Browse Source

Merge remote-tracking branch 'origin/master'

syh 5 năm trước cách đây
mục cha
commit
bf381a21eb

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

@@ -0,0 +1,28 @@
+package org.jeecg.modules.ctop.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.ctop.entity.BindAccountAuth;
+import org.jeecg.modules.ctop.service.ICreateInternalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/test")
+public class TestController {
+    @Autowired
+    private ICreateInternalService createInternalService;
+
+    @PostMapping(value = "/create")
+    public void authorization(@RequestBody JSONObject json) {
+        System.err.println(json);
+        createInternalService.createInternal(json);
+
+
+    }
+
+}

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

@@ -0,0 +1,9 @@
+package org.jeecg.modules.ctop.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Map;
+
+public interface ICreateInternalService {
+    Map<String, Object> createInternal(JSONObject requestJson);
+}

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

@@ -0,0 +1,399 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import cn.com.ctop.common.utils.Check;
+import cn.com.ctop.common.utils.HttpUtils;
+import cn.com.ctop.crawler.modules.core.util.FateadmHttpUtil;
+import cn.com.ctop.crawler.modules.core.util.FateadmUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.http.impl.cookie.BasicClientCookie;
+import org.jeecg.modules.ctop.service.ICreateInternalService;
+import org.openqa.selenium.Cookie;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import sun.misc.BASE64Decoder;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+public class CreateInternalServiceImpl implements ICreateInternalService {
+    private static final Logger logger = LoggerFactory.getLogger(CreateInternalServiceImpl.class);
+
+
+    @Override
+    public Map<String, Object> createInternal(JSONObject requestJson) {
+        String url = "https://ad.oceanengine.com/pages/login/index.html";
+        System.getProperties().setProperty("webdriver.chrome.driver", "D:/chromedriver.exe");
+//        System.getProperties().setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
+        try {
+            ChromeOptions chromeOptions = new ChromeOptions();
+            WebDriver webDriver = new ChromeDriver(chromeOptions);
+            chromeOptions.addArguments("--headless");
+            chromeOptions.addArguments("--incognito");
+            chromeOptions.addArguments("--no-sandbox");
+            chromeOptions.addArguments("--disable-gpu");
+            chromeOptions.addArguments("--window-size=1290,1080");
+            chromeOptions.addArguments("--user-agent=" + HttpUtils.USER_AGENT);
+            chromeOptions.setAcceptInsecureCerts(true);
+            webDriver.get(url);  //获取登录页面
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            for (Cookie cookie : webDriver.manage().getCookies()) {
+                BasicClientCookie ck = new BasicClientCookie(cookie.getName(), cookie.getValue());
+                ck.setDomain("ad.oceanengine.com");
+
+
+//                if (cookie.getDomain().startsWith(".")){
+//                    ck.setDomain(cookie.getDomain().substring(1));
+//                }else {
+//                    ck.setDomain(cookie.getDomain());
+//                }
+
+                ck.setExpiryDate(cookie.getExpiry());
+                ck.setPath(cookie.getPath());
+                HttpUtils.cookieStore.addCookie(ck);
+                System.out.println(cookie.getName() + "," + cookie.getValue() + "," + cookie.getDomain());
+
+                BasicClientCookie ck2 = new BasicClientCookie(cookie.getName(), cookie.getValue());
+                ck2.setDomain("toutiao.com");
+
+                ck2.setExpiryDate(cookie.getExpiry());
+                ck2.setPath(cookie.getPath());
+                HttpUtils.cookieStore.addCookie(ck2);
+//                ck.setDomain(".sso.toutiao.com");
+//                HttpUtils.cookieStore.addCookie(ck);
+            }
+
+            String html = webDriver.getPageSource();
+            Map<String, String> header = new HashMap<String, String>();
+            header.put("Accept", "*/*");
+            header.put("Connection", "keep-alive");
+            header.put("Host", "sso.toutiao.com");
+            header.put("Content-Type", "application/x-www-form-urlencoded");
+            header.put("Origin", "https://ad.oceanengine.com");
+            header.put("Referer", "https://ad.oceanengine.com/pages/login/index.html");
+            Map<String, Object> param = new HashMap<String, Object>();
+            param.put("mobile", "");
+            param.put("code", "");
+//            param.put("account","guoyanling@c-top.com.cn");
+//            param.put("password","Hcstad-567");
+            param.put("account", "dcd_ad@bytedance.com");
+            param.put("password", "typdDCD@2018");
+            param.put("captcha", "hqde");
+            param.put("is_30_days_no_login", "true");
+            param.put("service", "https://ad.oceanengine.com");
+            String res = HttpUtils.httpPostParamRequest("https://sso.toutiao.com/account_login/", param, header);
+//            System.out.println(res);
+//            Scanner scanner = new Scanner(System.in);
+//            String code = scanner.nextLine();
+//            param.put("captcha",code);
+//            res = HttpUtils.httpPostParamRequest("https://sso.toutiao.com/account_login/",param,header);
+//            System.out.println(res);
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+            JsonNode jsonNode = mapper.readTree(res);
+            Integer errorCode = jsonNode.get("error_code").asInt();
+            String orderId = null;
+            while (errorCode != 0) {
+                FateadmUtil fateadmUtil = new FateadmUtil();
+                fateadmUtil.init();
+                if (orderId != null) {
+                    fateadmUtil.Justice(orderId);
+                }
+                String captcha = jsonNode.get("captcha").asText();
+                BASE64Decoder decoder = new BASE64Decoder();
+                FateadmHttpUtil.HttpResp resp = fateadmUtil.Predict("30400", decoder.decodeBuffer(captcha));
+                param.put("captcha", resp.pred_resl);
+                orderId = resp.req_id;
+                res = HttpUtils.httpPostParamRequest("https://sso.toutiao.com/account_login/", param, header);
+                System.out.println(res);
+                jsonNode = mapper.readTree(res);
+                errorCode = jsonNode.get("error_code").asInt();
+            }
+            if (errorCode == 0) {
+//                String redirectUrl = jsonNode.get("redirect_url").asText();
+//                webDriver.get(redirectUrl);
+                String csrftoken = "";
+                List<org.apache.http.cookie.Cookie> cookies = HttpUtils.cookieStore.getCookies();
+                for (org.apache.http.cookie.Cookie ck : cookies) {
+                    Cookie cookie = new Cookie(ck.getName(), ck.getValue(), "." + ck.getDomain(), ck.getPath(), ck.getExpiryDate());
+                    webDriver.manage().addCookie(cookie);
+                }
+
+                webDriver.get("https://ad.oceanengine.com/pages/promotion.html#/ad");//登录成功 进入推广页面
+
+                webDriver.get("https://ad.oceanengine.com/pages/campaign/create.html");//创建广告组页面
+//                HttpUtils.httpGetRequest("https://ad.toutiao.com/pages/promotion.html#/ad");
+//                HttpUtils.httpGetRequest("https://ad.toutiao.com/pages/campaign/create.html");
+
+                Map<String, Object> param2 = new HashMap<String, Object>();
+                Map<String, Object> param3 = new HashMap<String, Object>();
+                String uuid = UUID.randomUUID().toString();
+                param3.put("budget", 0);
+                param3.put("budget_mode", -1);
+                param2.put("campaign_id", "");
+                param2.put("campaign_name", uuid.substring(1, 7));
+                param2.put("landing_type", 3);
+                param2.put("campaign_type", 1);
+                param2.put("budget", param3);
+
+//                webDriver.get("https://ad.toutiao.com/pages/campaign/create.html");
+                for (Cookie cookie : webDriver.manage().getCookies()) {
+                    if (cookie.getName().equals("csrftoken")) {
+                        csrftoken = cookie.getValue();
+                    }
+                    BasicClientCookie ck = new BasicClientCookie(cookie.getName(), cookie.getValue());
+//                    if (cookie.getDomain().startsWith(".")){
+//                        ck.setDomain(URLDecoder.decode(cookie.getDomain().substring(1),"utf-8"));
+//                    }else {
+//                        ck.setDomain(URLDecoder.decode(cookie.getDomain(),"utf-8"));
+//                    }
+                    ck.setDomain("ad.oceanengine.com");
+
+                    ck.setExpiryDate(cookie.getExpiry());
+                    ck.setPath(cookie.getPath());
+                    HttpUtils.cookieStore.addCookie(ck);
+                    System.out.println(cookie.getName() + "," + cookie.getValue() + "," + cookie.getDomain());
+
+                    BasicClientCookie ck2 = new BasicClientCookie(cookie.getName(), cookie.getValue());
+                    ck2.setDomain("toutiao.com");
+
+                    ck2.setExpiryDate(cookie.getExpiry());
+                    ck2.setPath(cookie.getPath());
+                    HttpUtils.cookieStore.addCookie(ck2);
+                }
+                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-CSRFToken", csrftoken);
+                header.put("X-Requested-With", "XMLHttpRequest");
+                header.put("Referer", "https://ad.oceanengine.com/pages/campaign/create.html");
+                res = HttpUtils.httpPostRequest("https://ad.oceanengine.com/overture/campaign/create/", param2, header);// 创建广告组返回信息
+                System.out.println(res);
+                JsonNode node = mapper.readTree(res);
+                //{"status": "fail", "msg": "\u5e7f\u544a\u7ec4\u4e0d\u80fd\u91cd\u590d", "type": "form_error", "name": "campaign_name"}
+                String campaignId = node.get("data").get("campaign_id").asText();  //广告组id
+                String url2 = "https://ad.oceanengine.com/pages/ad/create.html?campaign_id=" + campaignId + "&landing_type=3&temp_id=ADvQb";
+                webDriver.get(url2);
+//                webDriver.get("https://ad.toutiao.com/agent/get_agency/?advertiser_id=1634948959249411");
+                header.put("Referer", url2);
+                for (Cookie cookie : webDriver.manage().getCookies()) {
+                    BasicClientCookie ck = new BasicClientCookie(cookie.getName(), cookie.getValue());
+                    ck.setDomain("ad.oceanengine.com");
+
+                    ck.setExpiryDate(cookie.getExpiry());
+                    ck.setPath(cookie.getPath());
+                    HttpUtils.cookieStore.addCookie(ck);
+                    System.out.println(cookie.getName() + "," + cookie.getValue() + "," + cookie.getDomain());
+
+                    BasicClientCookie ck2 = new BasicClientCookie(cookie.getName(), cookie.getValue());
+                    ck2.setDomain("toutiao.com");
+
+                    ck2.setExpiryDate(cookie.getExpiry());
+                    ck2.setPath(cookie.getPath());
+                    HttpUtils.cookieStore.addCookie(ck2);
+                }
+                String siteStr = HttpUtils.httpGetRequest("https://ad.oceanengine.com/overture/api/adv_site/get_site_list/?_=" + String.valueOf(new Date().getTime()));
+                String convStr = HttpUtils.httpGetRequest("https://ad.oceanengine.com/overture/api/get_tetris_action/?external_url=&type=external&pricing=9&landing_type=3&_=" + String.valueOf(new Date().getTime()));
+                JsonNode siteNode = mapper.readTree(siteStr);
+                JsonNode convNode = mapper.readTree(convStr);
+
+                Map<String, Object> param4 = new HashMap<String, Object>();
+                param4.put("location_type", 4);
+                param4.put("aweme_account_fans", 0);
+                String tokenStr = HttpUtils.httpPostRequest("https://ad.oceanengine.com/api/v1/hl/ad/audience/estimate/", param4, header);
+                System.out.println(siteStr);
+                System.out.println(convStr);
+                System.out.println(tokenStr);
+                JsonNode tokenNode = mapper.readTree(tokenStr);
+                Map<String, Object> param5 = new HashMap<String, Object>();
+                /*param5.put("name", "自动创建测试4");  //广计划名称
+                param5.put("delivery_range", 1);  // 投放范围
+                param5.put("classify", 5);  //广告类别  5 内广
+                param5.put("projectid", "");
+                param5.put("download_type", 2);  //下载方式    1下载链接 2包含下载链接的落地页
+                param5.put("localGeolocation", new ArrayList<String>());
+                param5.put("external_url", "https://ad.oceanengine.com/tetris/page/" + siteNode.get("data").get(0).get("siteId").asText());  // 落地页链接
+                param5.put("convert_id", convNode.get("action_data").get(0).get("id").asLong()); // 转换id
+                param5.put("open_url", ""); //  应用直达链接
+                param5.put("style_type", 0);
+                param5.put("location_type", 4); //受众位置类型
+                param5.put("hide_if_exists", 0); // 过滤已安装,当推广目标为安卓应用下载时可填,0表示不过滤,1表示过滤,默认为不过滤
+                param5.put("interest_tag_mode", 0); //兴趣分类
+                param5.put("token", tokenNode.get("data").get("token").asText());
+                param5.put("toutiao", 100000005);  //头条预估数据
+                param5.put("aweme", 150000005); //抖音预估数据
+                param5.put("video_app", 40000005);//西瓜预估数据
+                param5.put("hotsoon", 40000005); //火山预估数据
+                param5.put("aweme_account_fans", 0); //账号粉丝相似人群
+                param5.put("auto_extend_enabled", 0);// 智能放量????
+                param5.put("budget_mode", 0);  // 广告预算类型  0 日预算  1 总预算
+                param5.put("budget", 300); //广告预算
+                param5.put("schedule_type", 1); //广告投放时间类型   默认1 1:不限  2:按时间???
+                param5.put("start_time", "2019-07-02 00:00"); //广告投放起始时间
+                param5.put("end_time", "2019-07-03 23:59");//广告投放结束时间
+                param5.put("week_schedule", new ArrayList<String>());  //投放时段
+                param5.put("week_time", new ArrayList<ArrayList<Integer>>());//投放时段
+                param5.put("pricing", 9); //计划出价类型  9 按展示付费  7 按点击付费 8 按转化付费
+                param5.put("cpa_phrase", 2); //出价为OCPC时,计划处于哪个阶段??
+                param5.put("is_union_slot", "");
+                param5.put("hide_if_converted", 1); //过滤已转化用户类型字段,只有转化为目标时可填 优化目标为转化才展示
+                param5.put("flow_control_mode", 0); //投放速度/投放方式使用字段
+                param5.put("cpa_bid", 1);
+                param5.put("smart_bid_type", 0); //自动出价类型,OCPM支持
+                param5.put("adjust_cpa", 0); //是否调整自动出价   允许值: "0", "1"  默认值: 0
+                param5.put("app_bid_ratio", new Object());
+                param5.put("campaign_id", campaignId);*/
+
+
+//                param5.put("name", requestJson.getString("templateName"));  //广计划名称
+               /* param5.put("name", param2.get("campaign_name"));
+                param5.put("delivery_range", requestJson.getInteger("deliveryRange"));  // 投放范围
+                param5.put("classify", requestJson.getInteger("adCategory"));  //广告类别  5 内广
+                param5.put("projectid", "");
+                //     param5.put("target", requestJson.getString("deliveryTarget")); //投放目标
+                param5.put("download_type", requestJson.getInteger("downloadType"));  //下载方式    1下载链接 2包含下载链接的落地页
+                param5.put("localGeolocation", new ArrayList<String>());
+
+                String downloadUrl = "";
+                if (!Check.isNull(requestJson.getString("downloadUrl"))) {
+                    downloadUrl = requestJson.getString("downloadUrl");
+                } else {
+                    downloadUrl = requestJson.getString("externalUrl");
+                }
+
+                //   param5.put("external_url", downloadUrl);  // 落地页链接
+                param5.put("download_url", downloadUrl);  // 下载链接
+                param5.put("package", "com.prometheus.c6");  // 包
+                param5.put("app_type", 201);  // app類型
+                //      param5.put("convert_id", convNode.get("action_data").get(0).get("id").asLong()); // 转换id
+                param5.put("open_url", ""); //  应用直达链接
+                param5.put("style_type", 0);
+                param5.put("location_type", 4); //受众位置类型
+                param5.put("hide_if_exists", 0); // 过滤已安装,当推广目标为安卓应用下载时可填,0表示不过滤,1表示过滤,默认为不过滤
+                param5.put("interest_tag_mode", 0); //兴趣分类
+                param5.put("token", tokenNode.get("data").get("token").asText());
+                param5.put("toutiao", 100000005);  //头条预估数据
+                param5.put("aweme", 150000005); //抖音预估数据
+                param5.put("video_app", 40000005);//西瓜预估数据
+                param5.put("hotsoon", 40000005); //火山预估数据
+                param5.put("aweme_account_fans", 0); //账号粉丝相似人群
+                param5.put("auto_extend_enabled", 0);// 智能放量????
+                param5.put("budget_mode", 0);  // 广告预算类型  0 日预算  1 总预算
+                param5.put("budget", requestJson.getString("budgetPrice")); //广告预算
+
+
+                String flowDateType = requestJson.getString("flowDateType");
+                param5.put("schedule_type", 1); //广告投放时间类型   默认1 1:不限  2:按时间???
+                System.err.println(requestJson.getString("startDate"));
+                System.err.println(requestJson.getString("endDate"));
+                param5.put("start_time", "2019-08-03 23:59"); //广告投放起始时间
+                param5.put("end_time", "2019-08-04 23:59");//广告投放结束时间
+
+                List<List<String>> wsList = new ArrayList<List<String>>();
+                wsList.add(new ArrayList<String>());
+                wsList.add(new ArrayList<String>());
+                wsList.add(new ArrayList<String>());
+                wsList.add(new ArrayList<String>());
+                wsList.add(new ArrayList<String>());
+                wsList.add(new ArrayList<String>());
+                wsList.add(new ArrayList<String>());
+                param5.put("week_schedule", wsList);  //投放时段
+                param5.put("week_time", new ArrayList<ArrayList<Integer>>());//投放时段
+                param5.put("pricing", requestJson.getString("priceType")); //计划出价类型  9 按展示付费  7 按点击付费 8 按转化付费
+                param5.put("cpa_phrase", 2); //出价为OCPC时,计划处于哪个阶段??
+                param5.put("is_union_slot", "");
+                param5.put("hide_if_converted", 1); //过滤已转化用户类型字段,只有转化为目标时可填 优化目标为转化才展示
+                param5.put("flow_control_mode", 0); //投放速度/投放方式使用字段
+
+
+                param5.put("smart_bid_type", 0); //自动出价类型,OCPM支持
+                param5.put("adjust_cpa", 0); //是否调整自动出价   允许值: "0", "1"  默认值: 0
+                param5.put("app_bid_ratio", new Object());
+                param5.put("cpa_bid", 1);//目标转化出价
+                param5.put("external_action", 4);//
+                param5.put("android_osv", 0);//
+                List list = new ArrayList();
+                list.add(1);
+
+                param5.put("platform", list);//
+                param5.put("campaign_id", campaignId);*/
+
+                param5.put("name", requestJson.getString("templateName"));//模板名称
+                Integer deliveryRange = requestJson.getInteger("deliveryRange");
+                param5.put("delivery_range", deliveryRange);  //投放形式
+
+                if (deliveryRange == 2) {
+                    param5.put("union_video_type", requestJson.getInteger("deliveryForm")); //投放形式 1:激励视频 2:原生
+                }
+
+                param5.put("classify", requestJson.getString("adCategory")); //广告类别
+                param5.put("projectid", ""); //
+                Integer downloadType = requestJson.getInteger("downloadType");
+                param5.put("download_type", downloadType); //下载方式  1:下载包 2:h5
+                if (downloadType == 1) {
+                    param5.put("download_url",requestJson.getString("downloadUrl"));
+                }
+                if(downloadType == 2 ){
+                    param5.put("external_url", requestJson.getString("externalUrl"));  // 落地页链接
+                }
+
+                param5.put("localGeolocation", new ArrayList<String>());
+                param5.put("package", requestJson.getString("packageName"));//包名
+                param5.put("style_type", 0); //样式类型
+                param5.put("location_type", 4); //受众位置类型
+                param5.put("hide_if_exists", 0); // 过滤已安装,当推广目标为安卓应用下载时可填,0表示不过滤,1表示过滤,默认为不过滤
+                param5.put("interest_tag_mode", 0); //兴趣分类
+                param5.put("token", tokenNode.get("data").get("token").asText());
+                param5.put("toutiao", 100000005);
+                param5.put("aweme", 150000005);
+                param5.put("video_app", 40000005);
+                param5.put("hotsoon", 40000005);
+                param5.put("aweme_account_fans", 0);
+                param5.put("auto_extend_enabled", 0);
+                param5.put("budget_mode", 0); //预算类型 0 日预算  1 总预算
+                param5.put("budget", 300); //预算金额
+                param5.put("app_type", 201); //app 类型 201 应用推广 安卓 201 应用推广 ios
+                param5.put("schedule_type", 1); //广告投放时间类型   默认1 1:不限  2:按时间???
+                param5.put("start_time", "2019-09-02 00:00"); // 广告投放开始时间
+                param5.put("end_time", "2019-09-03 23:59"); //结束时间
+                param5.put("week_schedule", new ArrayList<String>());
+                param5.put("week_time", new ArrayList<ArrayList<Integer>>());
+                param5.put("pricing", requestJson.getString("priceType")); ////计划出价类型  9 按展示付费  7 按点击付费 8 按转化付费
+                param5.put("cpa_phrase", 2);
+                param5.put("is_union_slot", "");
+                param5.put("hide_if_converted", 1); //过滤已转化用户类型字段,只有转化为目标时可填 优化目标为转化才展示
+                param5.put("flow_control_mode", 0); //投放速度/投放方式使用字段
+                param5.put("cpa_bid", 1); //目标转化出价
+                param5.put("smart_bid_type", 0); ////自动出价类型,OCPM支持
+
+                param5.put("external_action", 15);
+                param5.put("adjust_cpa", 0); ////是否调整自动出价   允许值: "0", "1"  默认值: 0
+                param5.put("app_bid_ratio", new Object());
+
+                param5.put("campaign_id", campaignId);
+
+                System.err.println(JSON.toJSONString(param5));
+                String createResult = HttpUtils.httpPostRequest("https://ad.oceanengine.com/overture/ad/create/", param5, header);
+                System.out.println(createResult);
+            }
+//            webDriver.close();
+
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+}

+ 37 - 0
module-common/src/main/java/cn/com/ctop/common/utils/HttpUtils.java

@@ -150,6 +150,43 @@ public class HttpUtils {
     }
 
 
+    public static String httpPostRequestTest(String url, String body, Map<String, String> headers) {
+//        HttpClient httpclient = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();
+        HttpClient httpClient = createSSLClientDefault();
+        String strReturn = "";
+        try {
+            HttpPost httppost = new HttpPost(url);
+            httppost.setHeader("User-Agent", USER_AGENT);
+            httppost.addHeader("Content-Type", "application/json");
+            List<Cookie> list = cookieStore.getCookies();
+            for (Cookie ck : list) {
+                System.out.println(ck.getName() + "=" + ck.getValue() + "," + ck.getDomain());
+            }
+            for (String key : headers.keySet()) {
+                httppost.setHeader(key, headers.get(key));
+            }
+            //httppost.setHeader("Content-Type", "application/json");
+            httppost.setEntity(new StringEntity(body, Charset.forName("UTF-8")));
+            HttpEntity respentity;
+
+            HttpResponse response = httpClient.execute(httppost);
+            int statusCode = response.getStatusLine().getStatusCode();
+            if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
+                String newUrl = response.getFirstHeader("Location").getValue();
+                return httpPostRequestTest(newUrl, body, headers);
+            } else if (statusCode == HttpStatus.SC_OK) {
+                respentity = response.getEntity();
+                strReturn = EntityUtils.toString(respentity);
+                return strReturn;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error(e.getMessage());
+        }
+        return strReturn;
+    }
+
+
     public static String kuaiShouhttpPostRequest(String url, String body, Map<String, String> headers) {
         HttpClient httpClient = createSSLClientDefault();
         String strReturn = "";

+ 38 - 40
module-toutiao/src/main/java/cn/com/ctop/toutiao/test/Test.java

@@ -39,7 +39,7 @@ public class Test {
             chromeOptions.addArguments("--window-size=1290,1080");
             chromeOptions.addArguments("--user-agent="+HttpUtils.USER_AGENT);
             chromeOptions.setAcceptInsecureCerts(true);
-            webDriver.get(url);
+            webDriver.get(url);  //获取登录页面
 
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
             for (Cookie cookie : webDriver.manage().getCookies()){
@@ -72,8 +72,8 @@ public class Test {
             param.put("code","");
 //            param.put("account","guoyanling@c-top.com.cn");
 //            param.put("password","Hcstad-567");
-            param.put("account", "touxitouxi00075@bytedance.com");
-            param.put("password", "Youxi,2018");
+            param.put("account","dcd_ad@bytedance.com");
+            param.put("password","typdDCD@2018");
             param.put("captcha","hqde");
             param.put("is_30_days_no_login","true");
             param.put("service","https://ad.oceanengine.com");
@@ -115,9 +115,9 @@ public class Test {
                     webDriver.manage().addCookie(cookie);
                 }
 
-                webDriver.get("https://ad.oceanengine.com/pages/promotion.html#/ad");
-                Thread.sleep(10000);
-                webDriver.get("https://ad.oceanengine.com/pages/campaign/create.html");
+                webDriver.get("https://ad.oceanengine.com/pages/promotion.html#/ad");//登录成功 进入推广页面
+
+                webDriver.get("https://ad.oceanengine.com/pages/campaign/create.html");//创建广告组页面
 //                HttpUtils.httpGetRequest("https://ad.toutiao.com/pages/promotion.html#/ad");
 //                HttpUtils.httpGetRequest("https://ad.toutiao.com/pages/campaign/create.html");
 
@@ -126,7 +126,7 @@ public class Test {
                 param3.put("budget",0);
                 param3.put("budget_mode",-1);
                 param2.put("campaign_id","");
-                param2.put("campaign_name", "自动创建测试8");
+                param2.put("campaign_name","自动创建测试444444");
                 param2.put("landing_type",3);
                 param2.put("campaign_type",1);
                 param2.put("budget",param3);
@@ -156,11 +156,11 @@ public class Test {
                 header.put("X-CSRFToken",csrftoken);
                 header.put("X-Requested-With","XMLHttpRequest");
                 header.put("Referer","https://ad.oceanengine.com/pages/campaign/create.html");
-                res = HttpUtils.httpPostRequest("https://ad.oceanengine.com/overture/campaign/create/",param2,header);
+                res = HttpUtils.httpPostRequest("https://ad.oceanengine.com/overture/campaign/create/",param2,header);// 创建广告组返回信息
                 System.out.println(res);
                 JsonNode node = mapper.readTree(res);
                 //{"status": "fail", "msg": "\u5e7f\u544a\u7ec4\u4e0d\u80fd\u91cd\u590d", "type": "form_error", "name": "campaign_name"}
-                String campaignId = node.get("data").get("campaign_id").asText();
+                String campaignId = node.get("data").get("campaign_id").asText();  //广告组id
                 String url2 = "https://ad.oceanengine.com/pages/ad/create.html?campaign_id="+campaignId+"&landing_type=3&temp_id=ADvQb";
                 webDriver.get(url2);
 //                webDriver.get("https://ad.toutiao.com/agent/get_agency/?advertiser_id=1634948959249411");
@@ -187,44 +187,42 @@ public class Test {
                 System.out.println(tokenStr);
                 JsonNode tokenNode = mapper.readTree(tokenStr);
                 Map<String,Object> param5 = new HashMap<String,Object>();
-                param5.put("delivery_range",1);
-                param5.put("classify",5);
+                param5.put("delivery_range",1);  // 投放范围
+                param5.put("classify",5);  //广告类别  5 内广
                 param5.put("projectid","");
-                param5.put("download_type",2);
+                param5.put("download_type",2);  //下载方式    1下载链接 2包含下载链接的落地页
                 param5.put("localGeolocation",new ArrayList<String>());
-                param5.put("external_url", "https://ad.oceanengine.com/tetris/page/1");
-                param5.put("convert_id", 1);
-//                param5.put("external_url","https://ad.oceanengine.com/tetris/page/"+siteNode.get("data").get(0).get("siteId").asText());
-//                param5.put("convert_id",convNode.get("action_data").get(0).get("id").asLong());
-                param5.put("open_url","");
+                param5.put("external_url","https://ad.oceanengine.com/tetris/page/"+siteNode.get("data").get(0).get("siteId").asText());  // 落地页链接
+                param5.put("convert_id",convNode.get("action_data").get(0).get("id").asLong()); // 转换id
+                param5.put("open_url",""); //  应用直达链接
                 param5.put("style_type",0);
-                param5.put("location_type",4);
-                param5.put("hide_if_exists",0);
-                param5.put("interest_tag_mode",0);
+                param5.put("location_type",4); //受众位置类型
+                param5.put("hide_if_exists",0); // 过滤已安装,当推广目标为安卓应用下载时可填,0表示不过滤,1表示过滤,默认为不过滤
+                param5.put("interest_tag_mode",0); //兴趣分类
                 param5.put("token",tokenNode.get("data").get("token").asText());
-                param5.put("toutiao",100000005);
-                param5.put("aweme",150000005);
-                param5.put("video_app",40000005);
-                param5.put("hotsoon",40000005);
-                param5.put("aweme_account_fans",0);
-                param5.put("auto_extend_enabled",0);
-                param5.put("budget_mode",0);
-                param5.put("budget",300);
-                param5.put("schedule_type",1);
-                param5.put("start_time","2019-07-02 00:00");
-                param5.put("end_time","2019-07-03 23:59");
-                param5.put("week_schedule",new ArrayList<String>());
-                param5.put("week_time",new ArrayList<ArrayList<Integer>>());
-                param5.put("pricing",9);
-                param5.put("cpa_phrase",2);
+                param5.put("toutiao",100000005);  //头条预估数据
+                param5.put("aweme",150000005); //抖音预估数据
+                param5.put("video_app",40000005);//西瓜预估数据
+                param5.put("hotsoon",40000005); //火山预估数据
+                param5.put("aweme_account_fans",0); //账号粉丝相似人群
+                param5.put("auto_extend_enabled",0);// 智能放量????
+                param5.put("budget_mode",0);  // 广告预算类型  0 日预算  1 总预算
+                param5.put("budget",300); //广告预算
+                param5.put("schedule_type",1); //广告投放时间类型   默认1 1:不限  2:按时间???
+                param5.put("start_time","2019-07-02 00:00"); //广告投放起始时间
+                param5.put("end_time","2019-07-03 23:59");//广告投放结束时间
+                param5.put("week_schedule",new ArrayList<String>());  //投放时段
+                param5.put("week_time",new ArrayList<ArrayList<Integer>>());//投放时段
+                param5.put("pricing",9); //计划出价类型  9 按展示付费  7 按点击付费 8 按转化付费
+                param5.put("cpa_phrase",2); //出价为OCPC时,计划处于哪个阶段??
                 param5.put("is_union_slot","");
-                param5.put("hide_if_converted",1);
-                param5.put("flow_control_mode",0);
+                param5.put("hide_if_converted",1); //过滤已转化用户类型字段,只有转化为目标时可填 优化目标为转化才展示
+                param5.put("flow_control_mode",0); //投放速度/投放方式使用字段
                 param5.put("cpa_bid",1);
-                param5.put("smart_bid_type",0);
-                param5.put("adjust_cpa",0);
+                param5.put("smart_bid_type",0); //自动出价类型,OCPM支持
+                param5.put("adjust_cpa",0); //是否调整自动出价   允许值: "0", "1"  默认值: 0
                 param5.put("app_bid_ratio",new Object());
-                param5.put("name", "自动创建测试8");
+                param5.put("name","自动创建测试4");  //广计划名称
                 param5.put("campaign_id",campaignId);
                 String createResult = HttpUtils.httpPostRequest("https://ad.oceanengine.com/overture/ad/create/",param5,header);
                 System.out.println(createResult);