Przeglądaj źródła

添加字节广告列表

ZHAOXIAN 1 rok temu
rodzic
commit
02b851c190

+ 2 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceCdpProjectMapper.java

@@ -16,6 +16,8 @@ public interface BytedanceCdpProjectMapper {
 
     int replaceBytedanceCdpProjectList(@Param("projectList") List<BytedanceCdpProject> projectList);
 
+    int replaceBytedancePromotionList(@Param("list") JSONArray array);
+
     void insertErrorAdvertiserId(@Param("advertiserId") Long advertiserId, @Param("type") String type);
 
     List<Long> queryAllAdverIdList(@Param("mediaType") String mediaType);

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

@@ -67,6 +67,31 @@
     </insert>
 
 
+
+    <insert id="replaceBytedancePromotionList">
+        replace into media_api.bytedance_promotion_list (
+        advertiser_id,
+        project_id,
+        promotion_id,
+        promotion_name,
+        app_id,
+        params,
+        url
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.advertiser_id},
+            #{item.project_id},
+            #{item.promotion_id},
+            #{item.promotion_name},
+            #{item.app_id},
+            #{item.params},
+            #{item.url}
+            )
+        </foreach>
+    </insert>
+
     <insert id="replaceBytedanceByteAppInfo">
         replace into media_api.bytedance_byte_app_info (
         advertiser_id,
@@ -157,7 +182,7 @@
 
     <select id="queryAllAdverIdList" resultType="Long">
         SELECT advertiser_id
-        FROM deepthink.adq_advertiser_list
+        FROM deepthink.bytedance_advertiser_list
     </select>
 
     <select id="queryErrApps" resultType="Long">

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

@@ -9,6 +9,9 @@ import java.util.List;
  * @date 2025-04-23
  */
 public interface IBytedanceCdpProjectService {
+
+    void getpromotionList(Long advertiserId, String date);
+
     void getProjectList(Long advertiserId, String date);
 
     List<Long> queryAllAdverIdList(String type);

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

@@ -77,6 +77,75 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     }
 
     @Override
+    public void getpromotionList(Long advertiserId, String date) {
+        this.getpromotionListVo(advertiserId, date, 1, 1);
+//        this.getProjectListVo(advertiserId, "del", date, 1, 1);
+    }
+
+    private void getpromotionListVo(Long advertiserId, String date, Integer page, int count) {
+        try {
+            boolean nextPage = false;
+            String accessToken = tokenMapper.onlyGetToken(advertiserId);
+            if (Check.isNull(accessToken)) {
+                log.error("账户({})查询token失败", advertiserId);
+                return;
+            }
+            Map<String, Object> params = new HashMap<>();
+            params.put("advertiser_id", advertiserId);
+            JSONObject filtering = new JSONObject();
+//            filtering.put("promotion_modify_time", date);
+//            params.put("filtering", filtering);
+            params.put("page", page);
+            params.put("page_size", 20);//最大100
+            String url = "https://api.oceanengine.com/open_api/v3.0/promotion/list/";
+            String results = HttpUtils.httpGet(url, params, HttpUtils.postMHeaders(accessToken));
+            JSONObject obj = JSONObject.parseObject(results);
+            if (!Check.isNull(obj)) {
+                Integer code = obj.getInteger("code");
+                if (code == 0) {
+                    JSONObject data = obj.getJSONObject("data");
+                    Integer totalPage = data.getJSONObject("page_info").getInteger("total_page");
+                    if (totalPage != 0 && totalPage > data.getJSONObject("page_info").getInteger("page")) {
+                        nextPage = true;
+                    }
+                    JSONArray array = data.getJSONArray("list");
+                    for (int i = 0; i < array.size(); i++) {
+                        checkPromotionInfo(array.getJSONObject(i));
+                    }
+
+                    if (!Check.isNull(array))
+                        if (bytedanceCdpProjectMapper.replaceBytedancePromotionList(array) > 0)
+                            log.info("---账户({})广告更新成功", advertiserId);
+                } else {
+                    //40100请求超频
+                    if (40100 == code && count <= 5) {
+                        Thread.sleep(800);
+                        getpromotionListVo(advertiserId, date, page, count + 1);
+                    } else {
+                        log.error("获取广告列表失败(url:{}),入参:{}\n结果:{}", url, JSONObject.toJSONString(params), obj);
+                    }
+                }
+            }
+            if (nextPage) {
+                getpromotionListVo(advertiserId, date, page + 1, 1);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+
+    private void checkPromotionInfo(JSONObject entity) {
+        JSONObject promotionMaterials = entity.getJSONObject("promotion_materials");
+        if (!Check.isNull(promotionMaterials)) {
+            JSONObject miniProgramInfo = promotionMaterials.getJSONObject("mini_program_info");
+            entity.put("params", miniProgramInfo.getString("params"));
+            entity.put("app_id", miniProgramInfo.getString("app_id"));
+            entity.put("url", miniProgramInfo.getString("url"));
+        }
+    }
+
+    @Override
     public void getProjectList(Long advertiserId, String date) {
         this.getProjectListVo(advertiserId, null, date, 1, 1);
 //        this.getProjectListVo(advertiserId, "del", date, 1, 1);

+ 4 - 2
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCdpProjectJob.java

@@ -24,6 +24,7 @@ public class BytedanceCdpProjectJob {
     @Autowired
     private IBytedanceCdpProjectService cdpProjectService;
 
+    private static ExecutorService allService = Executors.newFixedThreadPool(2);
     private static ExecutorService allttService = Executors.newFixedThreadPool(2);
     private static ExecutorService allwxService = Executors.newFixedThreadPool(2);
     private static ExecutorService allt2Service = Executors.newFixedThreadPool(2);
@@ -37,9 +38,10 @@ public class BytedanceCdpProjectJob {
     @XxlJob("getAll")
     public void getAll() {
         log.info("[getAll] 任务启动...");
-        List<Long> ids = cdpProjectService.queryAllAdverIdList("WECHAT_APP");
+        List<Long> ids = cdpProjectService.queryAllAdverIdList("");
         if (!Check.isNull(ids)) {
-            ids.forEach(id -> createiveAppsExecutorService.submit(() -> cdpProjectService.getAdqCreatives(id, "2025-02-15")));
+            ids.forEach(id -> allService.submit(() -> cdpProjectService.getpromotionList(id, null)
+            ));
         }
     }