Explorar o código

adq 添加落地页

ZHAOXIAN hai 1 ano
pai
achega
1649714cc0

+ 4 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceCdpProjectMapper.java

@@ -2,7 +2,6 @@ package cn.com.ctop.job.bytedance.data.mapper;
 
 import cn.com.ctop.job.bytedance.data.entity.BytedanceCdpProject;
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -25,6 +24,8 @@ public interface BytedanceCdpProjectMapper {
 
     List<Long> queryTTErrApps();
 
+    List<Long> queryPageAdvertiserIds();
+
     boolean delErrApps(@Param("type") String type);
 
     boolean delTTErrApps();
@@ -41,6 +42,8 @@ public interface BytedanceCdpProjectMapper {
 
     int replaceAdqDynamicCreateives(@Param("list") JSONArray list, @Param("advertiserId") Long advertiserId);
 
+    int replaceAdqDynamicPages(@Param("list") JSONArray list, @Param("advertiserId") Long advertiserId);
+
     List<Long> queryADQAdverIds(String date);
 
     List<String> queryAppInstanceIdList(@Param("advertiserId") Long advertiserId);

+ 29 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceCdpProjectListMapper.xml

@@ -167,6 +167,15 @@
         order by create_time
     </select>
 
+    <select id="queryPageAdvertiserIds" resultType="Long">
+        SELECT advertiser_id
+        FROM media_api.adq_dynamic_createive_list
+        where page_type = 'PAGE_TYPE_WECHAT_CANVAS'
+          and mini_program_id is null
+          and advertiser_id not in (SELECT DISTINCT advertiser_id
+                                    FROM media_api.adq_dynamic_page_list)
+    </select>
+
     <select id="queryTTErrApps" resultType="Long">
         SELECT advertiser_id
         FROM media_api.error_advertiser_tt
@@ -224,6 +233,26 @@
         </foreach>
     </insert>
 
+    <insert id="replaceAdqDynamicPages">
+        replace into media_api.adq_dynamic_page_list(
+        advertiser_id,
+        page_id,
+        page_type,
+        mini_program_id,
+        mini_program_path
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{advertiserId},
+            #{item.page_id},
+            #{item.page_type},
+            #{item.mini_program_id},
+            #{item.mini_program_path}
+            )
+        </foreach>
+    </insert>
+
     <select id="queryADQAdverIds" resultType="Long">
         SELECT DISTINCT advertiser_id
         FROM deepthink.adq_advertiser_list

+ 3 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceCdpProjectService.java

@@ -33,6 +33,9 @@ public interface IBytedanceCdpProjectService {
 
     void getAdqCreatives(Long advertiserId, String date);
 
+    void getAdqWechatPages(Long advertiserId);
+
     List<Long> queryTTErrApps();
 
+    List<Long> queryPageAdvertiserIds();
 }

+ 89 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceCdpProjectServiceImpl.java

@@ -58,6 +58,11 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     }
 
     @Override
+    public List<Long> queryPageAdvertiserIds() {
+        return bytedanceCdpProjectMapper.queryPageAdvertiserIds();
+    }
+
+    @Override
     public boolean delErrApps(String type) {
         return bytedanceCdpProjectMapper.delErrApps(type);
     }
@@ -412,6 +417,90 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
         }
     }
 
+    @Override
+    public void getAdqWechatPages(Long advertiserId) {
+        try {
+            String accessToken = tokenMapper.onlyGetADQToken(advertiserId);
+            if (Check.isNull(accessToken)) {
+                log.error("账户({})accessToken is null", advertiserId);
+                return;
+            }
+            this.getAdqWechatPagesVo(advertiserId, accessToken, 1, true, 1);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("账户({})获取原生落地页异常", e.getMessage());
+        }
+    }
+
+
+    private void getAdqWechatPagesVo(Long accountId, String accessToken, Integer page, Boolean isDeleted, int count) throws Exception {
+        boolean nextPage = false;
+        JSONObject returnJson = new JSONObject();
+        Map<String, Object> param = new HashMap<>();
+        long timestamp = Instant.now().getEpochSecond();
+        param.put("timestamp", String.valueOf(timestamp));
+        param.put("nonce", RandomStringGenerator.generateRandomString(32));
+        param.put("access_token", accessToken);
+        param.put("account_id", accountId);
+        param.put("page", page);
+        param.put("page_size", 100);
+        JSONArray filtering = new JSONArray();
+        JSONObject greObj = new JSONObject();
+        greObj.put("field", "page_type");
+        greObj.put("operator", "EQUALS");
+        greObj.put("values", "PAGE_TYPE_WECHAT_CANVAS");
+        param.put("filtering", filtering);
+        String result = HttpUtils.httpGet("https://api.e.qq.com/v3.0/wechat_pages/get", param, new HashMap<>());
+        JSONObject obj = JSONObject.parseObject(result);
+        if (!Check.isNull(obj)) {
+            if (0 == obj.getInteger("code")) {
+                JSONObject data = obj.getJSONObject("data");
+                if (!Check.isNull(data)) {
+                    JSONObject pageInfo = data.getJSONObject("page_info");
+                    Integer totalPage = pageInfo.getInteger("total_page");
+                    if (totalPage != 0 && totalPage > pageInfo.getInteger("page")) {
+                        nextPage = true;
+                    }
+                    JSONArray array = data.getJSONArray("list");
+                    for (int i = 0; i < array.size(); i++) {
+                        JSONObject object = array.getJSONObject(i);
+                        getPageAppId(object);
+                    }
+                    if (!Check.isNull(array))
+                        if (bytedanceCdpProjectMapper.replaceAdqDynamicPages(array, accountId) > 0)
+                            log.info("---账户({})广点通落地页更新成功", accountId);
+                }
+            } else {
+                if (count <= 4) {
+                    Thread.sleep(500);
+                    getAdqWechatPagesVo(accountId, accessToken, page, isDeleted, count + 1);
+                } else {
+                    log.error("账户({})获取动态创意失败,入参:{}\n,结果:{}", accountId, JSONObject.toJSONString(param), obj);
+                }
+            }
+        }
+        if (nextPage) {
+            getAdqWechatPagesVo(accountId, accessToken, page + 1, isDeleted, 1);
+        }
+    }
+
+    private void getPageAppId(JSONObject object) {
+        JSONArray pageElementsSpecList = object.getJSONArray("page_elements_spec_list");
+        if (!Check.isNull(pageElementsSpecList)) {
+            for (int i = 0; i < pageElementsSpecList.size(); i++) {
+                JSONObject obj = pageElementsSpecList.getJSONObject(i);
+                JSONObject buttonSpec = obj.getJSONObject("button_spec");
+                if (buttonSpec != null) {
+                    JSONObject miniProgramSpec = buttonSpec.getJSONObject("mini_program_spec");
+                    if (!Check.isNull(miniProgramSpec)) {
+                        object.put("mini_program_id", miniProgramSpec.getString("mini_program_id"));
+                        object.put("mini_program_path", miniProgramSpec.getString("mini_program_path"));
+                    }
+                }
+            }
+        }
+    }
+
     private void getAppId(JSONObject object) {
         JSONObject creativeComponents = object.getJSONObject("creative_components");
         if (!Check.isNull(creativeComponents)) {

+ 7 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCdpProjectJob.java

@@ -32,6 +32,7 @@ public class BytedanceCdpProjectJob {
     private static ExecutorService ttAppsExecutorService = Executors.newFixedThreadPool(3);
     private static ExecutorService wxAppsExecutorService = Executors.newFixedThreadPool(3);
     private static ExecutorService createiveAppsExecutorService = Executors.newFixedThreadPool(3);
+    private static ExecutorService pageAppsExecutorService = Executors.newFixedThreadPool(3);
 
     @XxlJob("getAll")
     public void getAll() {
@@ -157,6 +158,12 @@ public class BytedanceCdpProjectJob {
             if (!Check.isNull(ids)) {
                 ids.forEach(id -> createiveAppsExecutorService.submit(() -> cdpProjectService.getAdqCreatives(id, today)));
             }
+
+            List<Long> pageIds = cdpProjectService.queryPageAdvertiserIds();
+            if (!Check.isNull(pageIds)) {
+                pageIds.forEach(id -> pageAppsExecutorService.submit(() -> cdpProjectService.getAdqWechatPages(id)));
+            }
+
         } catch (Exception e) {
             e.printStackTrace();
             log.error("[nowDynamicCreateives]" + e.getMessage());