Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/test' into test

yumeng 5 gadi atpakaļ
vecāks
revīzija
f908d07b95

+ 9 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceAdvertiserPostController.java

@@ -175,6 +175,15 @@ public class ByteDanceAdvertiserPostController {
     }
 
     /**
+     * 14:获取流量包数据
+     */
+    @RequestMapping("/advertiser/custom/package/get")
+    public Map<String, Object> flowPackageGet(String accountId) {
+        return advertiserDataService.flowPackageGet(accountId);
+    }
+
+
+    /**
      * 15:上传视频信息
      *
      * @param accountId 本平台广告主id

+ 12 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CreateInternalServiceImpl.java

@@ -341,6 +341,14 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
                     JsonNode node = mapper.readTree(res);
                     campaignId = node.get("data").get("campaign_id").asText();
                     System.out.println(res);
+                } else {
+                    header.put("Accept", "application/json, text/javascript, */*; q=0.01");
+                    header.put("Connection", "keep-alive");
+                    header.put("Host", "ad.oceanengine.com");
+                    header.put("Content-Type", "application/json");
+                    header.put("Origin", "https://ad.oceanengine.com");
+                    header.put("X-Requested-With", "XMLHttpRequest");
+                    header.put("Referer", "https://ad.oceanengine.com/pages/campaign/create.html");
                 }
 
                 Integer itratorNum = requestJson.getInteger("itratorNum");
@@ -353,12 +361,16 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
                         webDriver.get(url2);
                         header.put("Referer", url2);
                         for (Cookie cookie : webDriver.manage().getCookies()) {
+                            if ("csrftoken".equals(cookie.getName())) {
+                                csrftoken = cookie.getValue();
+                            }
                             BasicClientCookie ck = new BasicClientCookie(cookie.getName(), cookie.getValue());
                             ck.setDomain("ad.oceanengine.com");
                             ck.setExpiryDate(cookie.getExpiry());
                             ck.setPath(cookie.getPath());
                             HttpUtils2.cookieStore.addCookie(ck);
                         }
+                        header.put("X-CSRFToken", csrftoken);
                         Map<String, Object> audienceParam = new HashMap<>();
                         audienceParam.put("location_type", 4);
                         audienceParam.put("aweme_account_fans", 0);

+ 17 - 2
module-common/src/main/java/cn/com/ctop/common/module/service/impl/IpPoolServiceImpl.java

@@ -10,12 +10,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
 
-
+@Slf4j
 @Service
 public class IpPoolServiceImpl extends ServiceImpl<IpPoolMapper, IpPool> implements IIpPoolService {
 
@@ -44,7 +45,21 @@ public class IpPoolServiceImpl extends ServiceImpl<IpPoolMapper, IpPool> impleme
                 List<IpPool> ipList = JSON.parseObject(jsonNode.get("data").toString(), new TypeReference<List<IpPool>>() {
                 });
                 if (ipList != null && ipList.size() > 0) {
-                    this.saveBatch(ipList);
+                    for (IpPool ipPool : ipList) {
+                        Thread thread = new Thread() {
+                            @Override
+                            public void run() {
+                                Boolean avaliable = httpClientUtils.checkProxyIp(ipPool.getIp(), ipPool.getPort());
+                                if (!avaliable) {
+                                    ipPool.setStatus(2);
+                                    log.info("ip" + ipPool.getIp() + " is not avaliable");
+                                }
+                                save(ipPool);
+                            }
+                        };
+                        thread.start();
+                    }
+//                    this.saveBatch(ipList);
                 }
             }
         } catch (Exception e) {

+ 33 - 8
module-common/src/main/java/cn/com/ctop/common/module/utils/HttpClientUtils.java

@@ -70,13 +70,39 @@ public class HttpClientUtils {
         return HttpClients.createDefault();
     }
 
-    public String get(String urlStr) throws Exception {
+    public Boolean checkProxyIp(String ip, int port) {
+        int status = 0;
+        try {
+            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
+                //信任所有证书
+                @Override
+                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+                    return true;
+                }
+            }).build();
+            ConnectionConfig connectionConfig = ConnectionConfig.custom()
+                    .setBufferSize(4096)
+                    .build();
+            HttpHost proxy = new HttpHost(ip, port, "http");
+            RequestConfig globalConfig = RequestConfig.custom().setProxy(proxy).setConnectTimeout(1000).setSocketTimeout(1000).setCookieSpec(CookieSpecs.STANDARD).build();
+            SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(sslContext);
+
+            HttpClient httpClient = HttpClients.custom().setDefaultConnectionConfig(connectionConfig).setDefaultCookieStore(cookieStore).setDefaultRequestConfig(globalConfig).setConnectionReuseStrategy((response, context) -> false).setSSLSocketFactory(sslFactory).build();
+            HttpGet httpGet = new HttpGet("https://www.baidu.com");
+            status = httpClient.execute(httpGet).getStatusLine().getStatusCode();
+        } catch (Exception e) {
+            log.info("ip: " + ip + " is not aviable");
+        }
+        if (status == 200) {
+            return true;
+        } else {
+            return false;
+        }
+    }
 
+    public String get(String urlStr) throws Exception {
         URL url = new URL(urlStr);
         URLConnection urlConnection = url.openConnection(); // 打开连接
-
-        System.out.println(urlConnection.getURL().toString());
-
         BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8")); // 获取输入流
         String line = null;
         StringBuilder sb = new StringBuilder();
@@ -104,14 +130,12 @@ public class HttpClientUtils {
             Header[] headers = response.getHeaders("Set-Cookie");
             if (headers != null && headers.length > 0) {
                 for (Header header : headers) {
-                    System.out.println(header.getValue());
                     String[] cookieArr = header.getValue().split(";");
                     String[] ck = cookieArr[0].split("=");
                     BasicClientCookie basicClientCookie = new BasicClientCookie(ck[0], ck[1]);
                     Map<String, String> cookieMap = new HashMap<>();
                     if (cookieArr.length > 1) {
                         for (int i = 1; i < cookieArr.length; i++) {
-                            System.out.println(cookieArr[i]);
                             String[] ckParam = cookieArr[i].split("=");
                             if (ckParam.length > 1) {
                                 cookieMap.put(ckParam[0].trim(), ckParam[1]);
@@ -148,6 +172,7 @@ public class HttpClientUtils {
             log.info(httpClientEntity.getResult());
         } catch (Exception e) {
             e.printStackTrace();
+            return httpGetRequest(httpClientEntity);
         }
         httpClientEntity.setResult(result);
         httpClientEntity.setCookieStore(cookieStore);
@@ -216,6 +241,7 @@ public class HttpClientUtils {
         } catch (Exception e) {
             e.printStackTrace();
             log.error(e.getMessage());
+            return httpGetRequest(httpClientEntity);
         }
         httpClientEntity.setResult(result);
         httpClientEntity.setCookieStore(cookieStore);
@@ -253,14 +279,12 @@ public class HttpClientUtils {
             Header[] headers = response.getHeaders("Set-Cookie");
             if (headers != null && headers.length > 0) {
                 for (Header header : headers) {
-                    System.out.println(header.getValue());
                     String[] cookieArr = header.getValue().split(";");
                     String[] ck = cookieArr[0].split("=");
                     BasicClientCookie basicClientCookie = new BasicClientCookie(ck[0], ck[1]);
                     Map<String, String> cookieMap = new HashMap<>();
                     if (cookieArr.length > 1) {
                         for (int i = 1; i < cookieArr.length; i++) {
-                            System.out.println(cookieArr[i]);
                             String[] ckParam = cookieArr[i].split("=");
                             if (ckParam.length > 1) {
                                 cookieMap.put(ckParam[0].trim(), ckParam[1]);
@@ -283,6 +307,7 @@ public class HttpClientUtils {
             log.info(httpClientEntity.getResult());
         } catch (Exception e) {
             e.printStackTrace();
+            return httpGetRequest(httpClientEntity);
         }
         httpClientEntity.setCookieStore(cookieStore);
         return httpClientEntity;

+ 7 - 7
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/impl/KuaishouWebInterfaceServiceImpl.java

@@ -133,9 +133,9 @@ public class KuaishouWebInterfaceServiceImpl implements IKuaishouWebInterfaceSer
                 ObjectMapper mapper = new ObjectMapper();
                 resultMap = mapper.readValue(httpClientEntity.getResult(), new TypeReference<Map<String, Object>>() {
                 });
+                JsonNode resultNode = mapper.readTree(httpClientEntity.getResult()).get("data");
 //                checkCaptcha(httpClientEntity.getResult());
-                String psor = mapper.readTree(httpClientEntity.getResult()).get("data").get("publicFeeds").get("pcursor").asText();
-                if (resultMap.containsKey("captcha") || psor == null) {
+                if (resultNode.get("subCommentList").isNull() || resultNode.get("subCommentList").get("pcursor").isNull()) {
                     ipPool.setStatus(2);
                     iIpPoolService.updateById(ipPool);
                     return subCommentList(ksid, photoId, rootCommentId, pcursor);
@@ -187,9 +187,8 @@ public class KuaishouWebInterfaceServiceImpl implements IKuaishouWebInterfaceSer
                 ObjectMapper mapper = new ObjectMapper();
                 resultMap = mapper.readValue(httpClientEntity.getResult(), new TypeReference<Map<String, Object>>() {
                 });
-                String psor = mapper.readTree(httpClientEntity.getResult()).get("data").get("publicFeeds").get("pcursor").asText();
-//                checkCaptcha(httpClientEntity.getResult());
-                if (resultMap.containsKey("captcha") || psor == null) {
+                JsonNode resultNode = mapper.readTree(httpClientEntity.getResult()).get("data");
+                if (resultNode.get("shortVideoCommentList").isNull() || resultNode.get("shortVideoCommentList").get("pcursor").isNull()) {
                     ipPool.setStatus(2);
                     iIpPoolService.updateById(ipPool);
                     return commentList(ksid, photoId, pcursor);
@@ -259,8 +258,9 @@ public class KuaishouWebInterfaceServiceImpl implements IKuaishouWebInterfaceSer
                 ObjectMapper mapper = new ObjectMapper();
                 resultMap = mapper.readValue(result, new TypeReference<Map<String, Object>>() {
                 });
-                String psor = mapper.readTree(result).get("data").get("publicFeeds").get("pcursor").asText();
-                if (resultMap.containsKey("captcha") || psor == null) {
+                JsonNode resultNode = mapper.readTree(httpClientEntity.getResult()).get("data");
+//                String psor = mapper.readTree(result).get("data").get("publicFeeds").get("pcursor").asText();
+                if (resultNode.get("publicFeeds").isNull() || resultNode.get("publicFeeds").get("pcursor").isNull()) {
                     ipPool.setStatus(2);
                     iIpPoolService.updateById(ipPool);
                     return videoList(ksid, pcursor);

+ 22 - 8
module-toutiao/src/main/java/cn/com/ctop/toutiao/entity/ByteDanceUserOrientationTemplate.java

@@ -245,6 +245,8 @@ public class ByteDanceUserOrientationTemplate {
 
     private String adTagStr;
 
+    private String deviceType;
+
     /**
      * status
      */
@@ -266,6 +268,10 @@ public class ByteDanceUserOrientationTemplate {
     }
 
     public ByteDanceUserOrientationTemplate(String userId, JSONObject template) {
+        Long id = template.getLong("id");
+        if (null != id && id != 0) {
+            this.id = id;
+        }
         this.userId = userId;
         String name = template.getString("name");
         if (null != name && !name.equals("")) {
@@ -284,6 +290,14 @@ public class ByteDanceUserOrientationTemplate {
         if (null != ageRange) {
             this.age = ageRange.toJSONString();
         }
+        String deviceType = template.getString("deviceType");
+        if (null != deviceType && !deviceType.trim().equals("")) {
+            this.deviceType = deviceType;
+        }
+        String superiorPopularityType = template.getString("superiorPopularityType");
+        if (null != superiorPopularityType && !"".equals(superiorPopularityType.trim())) {
+            this.superiorPopularityType = superiorPopularityType;
+        }
         //兴趣定向类别
         String intrestType = template.getString("intrestType");
         if (null != intrestType && !intrestType.equals("")) {
@@ -301,8 +315,8 @@ public class ByteDanceUserOrientationTemplate {
                     categoryList.forEach(category -> {
                         JSONObject categoryObject = JSONObject.parseObject(JSONObject.toJSONString(category));
                         adTagStr.add(categoryObject);
-                        Long id = categoryObject.getLong("value");
-                        tags.add(id);
+                        Long tagId = categoryObject.getLong("value");
+                        tags.add(tagId);
                     });
                 }
                 this.adTag = tags.toJSONString();
@@ -347,8 +361,8 @@ public class ByteDanceUserOrientationTemplate {
             cityList.forEach(city -> {
                 JSONObject cityObject = JSONObject.parseObject(JSONObject.toJSONString(city));
                 cityStr.add(cityObject);
-                Long id = cityObject.getLong("value");
-                cityArray.add(id);
+                Long cityId = cityObject.getLong("value");
+                cityArray.add(cityId);
             });
         }
         this.city = cityArray.toJSONString();
@@ -361,8 +375,8 @@ public class ByteDanceUserOrientationTemplate {
             areaList.forEach(area -> {
                 JSONObject areaObject = JSONObject.parseObject(JSONObject.toJSONString(area));
                 areaStr.add(areaObject);
-                Long id = areaObject.getLong("value");
-                areaArray.add(id);
+                Long areaId = areaObject.getLong("value");
+                areaArray.add(areaId);
             });
         }
         this.district = areaArray.toJSONString();
@@ -374,8 +388,8 @@ public class ByteDanceUserOrientationTemplate {
         if (null != intrestTagList && intrestTagList.size() > 0) {
             intrestTagList.forEach(intrestCategory -> {
                 JSONObject intrestCategoryObject = JSONObject.parseObject(JSONObject.toJSONString(intrestCategory));
-                Long id = intrestCategoryObject.getLong("value");
-                intrestTagArray.add(id);
+                Long intrestId = intrestCategoryObject.getLong("value");
+                intrestTagArray.add(intrestId);
             });
         }
         this.interestTags = areaArray.toJSONString();

+ 2 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/service/IByteDanceAdvertiserDataService.java

@@ -45,4 +45,6 @@ public interface IByteDanceAdvertiserDataService {
     JSONObject setUserOrentationData(JSONObject data, ByteDanceUserOrientationTemplate template);
 
     Map<String, Object> getAdvertiserCampaignList(String accountId);
+
+    Map<String, Object> flowPackageGet(String accountId);
 }

+ 86 - 2
module-toutiao/src/main/java/cn/com/ctop/toutiao/service/impl/ByteDanceAdvertiserDataServiceImpl.java

@@ -1,5 +1,7 @@
 package cn.com.ctop.toutiao.service.impl;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.HttpUtils;
 import cn.com.ctop.common.module.utils.PropertiesUtils;
 import cn.com.ctop.common.module.utils.ResultMapUtils;
@@ -11,8 +13,6 @@ import cn.com.ctop.toutiao.service.IByteDanceAdvertiserDataService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
-import cn.com.ctop.common.module.entity.CtopOauthToken;
-import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -632,6 +632,42 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
         //根据adId获取公告计划信息
         ByteDanceAdvertisePlan advertisePlan = advertisePlanService.getById(adId);
         data.put("modify_time", advertisePlan.getModifyTime());
+        Integer deliveryType = requestJson.getInteger("deviceType");
+        if (null != deliveryType && deliveryType == 2) {
+            //穿山甲
+            //精选流量包类型
+            String superiorPopularityType = template.getSuperiorPopularityType();
+            if (null != superiorPopularityType && "ZDY".equals(superiorPopularityType)) {
+                JSONArray flowPackage = requestJson.getJSONArray("flowPackage");
+                if (null != flowPackage && flowPackage.size() > 0) {
+                    JSONArray getFlowPackage = new JSONArray();
+                    for (int i = 0; i < flowPackage.size(); i++) {
+                        String flowPackageString = flowPackage.getString(i);
+                        getFlowPackage.add(Long.parseLong(flowPackageString));
+                    }
+                    data.put("flow_package", getFlowPackage);
+                }
+                JSONArray excludeFlowPackage = requestJson.getJSONArray("excludeFlowPackage");
+                if (null != excludeFlowPackage && excludeFlowPackage.size() > 0) {
+                    JSONArray getExcludeFlowPackage = new JSONArray();
+                    for (int i = 0; i < excludeFlowPackage.size(); i++) {
+                        String excludeFlowPackageString = excludeFlowPackage.getString(i);
+                        getExcludeFlowPackage.add(Long.parseLong(excludeFlowPackageString));
+                    }
+                    data.put("exclude_flow_package", getExcludeFlowPackage);
+                }
+            } else {
+                data.put("superior_popularity_type", superiorPopularityType);
+            }
+            //设备类型
+            String deviceType = template.getDeviceType();
+            if (null != deviceType && !"".equals(deviceType) && !"NONE".equals(deviceType)) {
+                JSONArray typeArray = new JSONArray();
+                typeArray.add(deviceType);
+                data.put("device_type", typeArray);
+            }
+        }
+
         JSONArray retargetingTagsExclude = requestJson.getJSONArray("retargetingTagsExclude");
         JSONArray retargetingTagsInclude = requestJson.getJSONArray("retargetingTagsInclude");
         if (null != retargetingTagsExclude && retargetingTagsExclude.size() > 0) {
@@ -805,6 +841,54 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
         return resultMap;
     }
 
+    /**
+     * 获取流量包数据接口
+     *
+     * @param accountId
+     * @return
+     */
+    @Override
+    public Map<String, Object> flowPackageGet(String accountId) {
+        JSONObject jsonObject = flowPackageGetJSONObject(accountId);
+        JSONObject result = new JSONObject();
+        Integer code = jsonObject.getInteger("code");
+        String message = jsonObject.getString("message");
+        result.put("code", code);
+        result.put("message", message);
+        if (null == code || code != 0) {
+            result.put("success", false);
+            return result;
+        }
+        JSONArray packageList = jsonObject.getJSONObject("data").getJSONArray("list");
+        if (null != packageList && packageList.size() > 0) {
+            JSONArray packageArray = new JSONArray();
+            for (int i = 0; i < packageList.size(); i++) {
+                JSONObject packageObject = packageList.getJSONObject(i);
+                packageObject.remove("rit");
+                String status = packageObject.getString("status");
+                if (null != status && status.equals("FLOW_PACKAGE_ENABLE")) {
+                    packageArray.add(packageObject);
+                }
+            }
+            result.put("data", packageArray);
+        }
+        result.put("success", true);
+        return result;
+    }
+
+    public JSONObject flowPackageGetJSONObject(String accountId) {
+        CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
+        // 请求地址
+        String url = "https://ad.toutiao.com/open_api/2/tools/union/flow_package/get/";
+        // 请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", token.getAccountId());
+        params.put("page", 1);
+        params.put("page_size", 100);
+        JSONObject resultObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(), url, params);
+        return resultObject;
+    }
+
 
     private void getAdvertiserCreativeByPageNumber(String accountId, Integer pageNumber, String ids) {
         CtopOauthToken cTopOauthToken = tokenService.getOauthTokenByAccountId(accountId);