|
|
@@ -5,14 +5,17 @@ import cn.com.ctop.job.bytedance.data.mapper.BytedanceCdpProjectMapper;
|
|
|
import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
|
|
|
import cn.com.ctop.job.bytedance.data.service.IBytedanceCdpProjectService;
|
|
|
import cn.com.ctop.job.bytedance.data.utils.Check;
|
|
|
+import cn.com.ctop.job.bytedance.data.utils.DateUtils;
|
|
|
import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
|
|
|
import cn.com.ctop.job.bytedance.data.utils.Okhttp3Utils;
|
|
|
+import cn.com.ctop.job.bytedance.data.utils.RandomStringGenerator;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.time.Instant;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
@@ -44,6 +47,11 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public boolean delErrApps(String type) {
|
|
|
+ return bytedanceCdpProjectMapper.delErrApps(type);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public List<Long> queryAdvertiserIds(String db, String date) {
|
|
|
return bytedanceCdpProjectMapper.queryAdvertiserIds(db, date);
|
|
|
}
|
|
|
@@ -64,12 +72,14 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
|
|
|
}
|
|
|
Map<String, Object> params = new HashMap<>();
|
|
|
params.put("advertiser_id", advertiserId);
|
|
|
+ JSONObject filtering = new JSONObject();
|
|
|
if (!Check.isNull(type)) {
|
|
|
- JSONObject filtering = new JSONObject();
|
|
|
//不传默认返回不限(不含已删除)
|
|
|
filtering.put("status_first", "PROJECT_STATUS_DELETE");
|
|
|
- params.put("filtering", filtering);
|
|
|
}
|
|
|
+ filtering.put("project_modify_time", date);
|
|
|
+
|
|
|
+ params.put("filtering", filtering);
|
|
|
params.put("page", page);
|
|
|
params.put("page_size", 100);//最大100
|
|
|
String url = "https://api.oceanengine.com/open_api/v3.0/project/list/";
|
|
|
@@ -230,4 +240,156 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
|
|
|
return bytedanceCdpProjectMapper.queryMediaAdverIds(date, mediaType);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<Long> queryADQAdverIds(String date) {
|
|
|
+ return bytedanceCdpProjectMapper.queryADQAdverIds(date);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void getAdqCreatives(Long advertiserId, String date) {
|
|
|
+ try {
|
|
|
+ String accessToken = tokenMapper.onlyGetADQToken(advertiserId);
|
|
|
+ if (Check.isNull(accessToken)) {
|
|
|
+ log.error("账户({})accessToken is null", advertiserId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.rebackadqCreativesVo(advertiserId, accessToken, date, 1, true, 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ log.error("账户({})获取动态创意异常", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void rebackadqCreativesVo(Long accountId, String accessToken, String date, 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);
|
|
|
+ if (!Check.isNull(date)) {
|
|
|
+ JSONArray filtering = new JSONArray();
|
|
|
+ JSONObject greObj = new JSONObject();
|
|
|
+ greObj.put("field", "created_time");
|
|
|
+ greObj.put("operator", "GREATER_EQUALS");
|
|
|
+ JSONArray startDateVls = new JSONArray();
|
|
|
+ startDateVls.add(String.valueOf(DateUtils.dt2milli(date + " 00:00:00")));
|
|
|
+ greObj.put("values", startDateVls);
|
|
|
+ filtering.add(greObj);
|
|
|
+ JSONObject lesObj = new JSONObject();
|
|
|
+ lesObj.put("field", "created_time");
|
|
|
+ lesObj.put("operator", "LESS_EQUALS");
|
|
|
+ JSONArray endDateVls = new JSONArray();
|
|
|
+ endDateVls.add(String.valueOf(DateUtils.dt2milli(date + " 23:59:59")));
|
|
|
+ lesObj.put("values", endDateVls);
|
|
|
+ filtering.add(lesObj);
|
|
|
+ param.put("filtering", filtering);
|
|
|
+ }
|
|
|
+// param.put("is_deleted", isDeleted);
|
|
|
+ JSONArray fields = new JSONArray();
|
|
|
+ fields.add("adgroup_id");
|
|
|
+ fields.add("dynamic_creative_id");
|
|
|
+ fields.add("creative_components");
|
|
|
+ param.put("fields", fields);
|
|
|
+ String result = HttpUtils.httpGet("https://api.e.qq.com/v3.0/dynamic_creatives/get", param, new HashMap<>());
|
|
|
+ JSONObject obj = JSONObject.parseObject(result);
|
|
|
+ if (!Check.isNull(obj)) {
|
|
|
+ if (0 == obj.getInteger("code")) {
|
|
|
+ log.info("---账户({})获取动态创意成功", accountId);
|
|
|
+ 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);
|
|
|
+ getAppId(object);
|
|
|
+ }
|
|
|
+ if (!Check.isNull(array)) {
|
|
|
+ bytedanceCdpProjectMapper.replaceAdqDynamicCreateives(array, accountId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (count <= 3) {
|
|
|
+ Thread.sleep(500);
|
|
|
+ rebackadqCreativesVo(accountId, accessToken, date, page, isDeleted, count + 1);
|
|
|
+ }
|
|
|
+ log.error("账户({})获取动态创意失败,入参:{}\n,结果:{}", accountId, JSONObject.toJSONString(param), obj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (nextPage) {
|
|
|
+ rebackadqCreativesVo(accountId, accessToken, date, page + 1, isDeleted, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void getAppId(JSONObject object) {
|
|
|
+ JSONObject creativeComponents = object.getJSONObject("creative_components");
|
|
|
+ if (!Check.isNull(creativeComponents)) {
|
|
|
+ JSONArray textLink = creativeComponents.getJSONArray("text_link");
|
|
|
+ if (!Check.isNull(textLink)) {
|
|
|
+ JSONObject value = textLink.getJSONObject(0).getJSONObject("value");
|
|
|
+ if (!Check.isNull(value)) {
|
|
|
+ JSONObject jumpInfo = value.getJSONObject("jump_info");
|
|
|
+ if (!Check.isNull(jumpInfo)) {
|
|
|
+ JSONObject pageSpec = jumpInfo.getJSONObject("page_spec");
|
|
|
+ if (!Check.isNull(pageSpec)) {
|
|
|
+ JSONObject wechatMiniProgramSpec = pageSpec.getJSONObject("wechat_mini_program_spec");
|
|
|
+ if (!Check.isNull(wechatMiniProgramSpec)) {
|
|
|
+ object.put("mini_program_id", wechatMiniProgramSpec.getString("mini_program_id"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!Check.isNull(object.getString("mini_program_id"))) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JSONArray jumpInfo = creativeComponents.getJSONArray("jump_info");
|
|
|
+ if (!Check.isNull(jumpInfo)) {
|
|
|
+ JSONObject value = jumpInfo.getJSONObject(0).getJSONObject("value");
|
|
|
+ if (!Check.isNull(value)) {
|
|
|
+ JSONObject pageSpec = value.getJSONObject("page_spec");
|
|
|
+ if (!Check.isNull(pageSpec)) {
|
|
|
+ JSONObject wechatMiniProgramSpec = pageSpec.getJSONObject("wechat_mini_program_spec");
|
|
|
+ if (!Check.isNull(wechatMiniProgramSpec)) {
|
|
|
+ object.put("mini_program_id", wechatMiniProgramSpec.getString("mini_program_id"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!Check.isNull(object.getString("mini_program_id"))) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JSONArray mainJumpInfo = creativeComponents.getJSONArray("main_jump_info");
|
|
|
+ if (!Check.isNull(mainJumpInfo)) {
|
|
|
+ JSONObject value = mainJumpInfo.getJSONObject(0).getJSONObject("value");
|
|
|
+ if (!Check.isNull(value)) {
|
|
|
+ JSONObject pageSpec = value.getJSONObject("page_spec");
|
|
|
+ if (!Check.isNull(pageSpec)) {
|
|
|
+ JSONObject wechatMiniProgramSpec = pageSpec.getJSONObject("wechat_mini_program_spec");
|
|
|
+ if (!Check.isNull(wechatMiniProgramSpec)) {
|
|
|
+ object.put("mini_program_id", wechatMiniProgramSpec.getString("mini_program_id"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ Long l = DateUtils.dt2milli("2025-03-03" + " 00:00:00");
|
|
|
+ Long l2 = DateUtils.dt2milli("2025-03-03" + " 23:59:59");
|
|
|
+
|
|
|
+ System.out.println(Integer.valueOf(l + ""));
|
|
|
+ System.out.println(l);
|
|
|
+ System.out.println(l2);
|
|
|
+ }
|
|
|
}
|