소스 검색

获取定向包;人群包。

yangzian 4 년 전
부모
커밋
bb155e9a60

+ 4 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/MarketingService.java

@@ -66,4 +66,8 @@ public interface MarketingService {
     JSONObject getSuggestImageId(CtopOauthToken token, String vid);
 
     Result getActionText(CtopOauthToken token, String landing_type,String advanced_creative_type);
+
+    Result getAudiencePackage(CtopOauthToken token,String landingType,String deliveryRange);
+
+    Result getAudiencePackageRead(CtopOauthToken token,String accountId,List<Integer> ids);
 }

+ 71 - 2
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/MarketingServiceImpl.java

@@ -124,8 +124,8 @@ public class MarketingServiceImpl implements MarketingService{
         params.put("advertiser_id", token.getAccountId());
         //查询类型,枚举值:"0":该广告主创建的人群包和被推送给该广告主的人群包,"1":状态为可投放的人群包
         params.put("select_type", "1");
-        params.put("offset", "0");
-        params.put("limit", "100");
+        //params.put("offset", "0");
+        //params.put("limit", "100");
         JSONObject jsonObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(),
                 urlPath + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_dmp_custom_audience_select"),
                 params);
@@ -1076,4 +1076,73 @@ public class MarketingServiceImpl implements MarketingService{
         }
         return Result.successMsg("获取行动号召成功",dataList);
     }
+
+
+
+    /**
+     *
+     * @description: 获取定向包
+     *
+     * @param token
+     * @param landingType 定向包类型
+     * @param deliveryRange 广告投放范围
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     */
+    public Result getAudiencePackage(CtopOauthToken token,String landingType,String deliveryRange) {
+
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", token.getAccountId());
+
+        Map map = new HashMap();
+        map.put("landing_type",landingType);
+        map.put("delivery_range",deliveryRange);
+        params.put("filtering", map);
+        params.put("page", 1);
+        params.put("page_size", 100);
+
+        params = Check.jsonRemoveEmpty(params);
+        JSONObject jsonObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(),
+                urlPath+ PropertiesUtils.getValue("bytedance_config", "bytedance_v2_audience_package_get"),params);
+
+        Integer code = jsonObject.getInteger("code");
+        String message = jsonObject.getString("message");
+
+        if (null == code || !code.equals(0)) {
+            log.info("获取定向包接口异常==》accountId:{},message:{}", token.getAccountId(), message);
+            return Result.error(message);
+        }
+        JSONObject dataList = jsonObject.getJSONObject("data");
+        if (null == dataList || dataList.isEmpty()) {
+            log.info("获取定向包不存在==》accountId:{},message:{}", token.getAccountId(), message);
+            return Result.error("获取定向包不存在");
+        }
+        return Result.successMsg("获取定向包成功",dataList);
+    }
+
+
+    public Result getAudiencePackageRead(CtopOauthToken token,String accountId,List<Integer> ids) {
+
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", token.getAccountId());
+        params.put("custom_audience_ids", ids);
+
+        params = Check.jsonRemoveEmpty(params);
+        JSONObject jsonObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(),
+                urlPath+ PropertiesUtils.getValue("bytedance_config", "bytedance_v2_dmp_custom_audience_read"),params);
+
+        Integer code = jsonObject.getInteger("code");
+        String message = jsonObject.getString("message");
+
+        if (null == code || !code.equals(0)) {
+            log.info("获取人群包详细信息接口异常==》accountId:{},message:{}", token.getAccountId(), message);
+            return Result.error(message);
+        }
+        JSONObject dataList = jsonObject.getJSONObject("data");
+        if (null == dataList || dataList.isEmpty()) {
+            log.info("获取人群包详细信息不存在==》accountId:{},message:{}", token.getAccountId(), message);
+            return Result.error("获取人群包详细信息不存在");
+        }
+        return Result.successMsg("获取人群包详细信息成功",dataList.getJSONArray("custom_audience_list"));
+    }
 }

+ 8 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IAiBytedanceAdvertiserStrategyService.java

@@ -7,6 +7,7 @@ import org.jeecg.modules.bytedance.advertise.entity.UpdAdStaOrCpaOrBudget;
 import org.jeecg.modules.bytedance.advertise.vo.AdConvertQueryVo;
 import org.jeecg.modules.bytedance.advertise.vo.AdGroupSearchVo;
 import org.jeecg.modules.bytedance.advertise.vo.PlanSearchVo;
+import org.jeecg.modules.bytedance.common.entity.CtopOauthToken;
 
 import java.util.List;
 
@@ -99,4 +100,11 @@ public interface IAiBytedanceAdvertiserStrategyService extends IService<AiByteda
 
     Result getAdActionText(String accountId,String landingType,String advancedCreativeType) throws Exception;
 
+    Result getAdAudiencePackage(String accountId, String landingType, String deliveryRange);
+
+    Result getDMPCustomAudience(String accountId);
+
+
+
+
 }

+ 142 - 19
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java

@@ -5,7 +5,11 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.base.Joiner;
+import com.google.gson.JsonArray;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Transformer;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.bytedance.advertise.dockapi.MarketingService;
@@ -31,6 +35,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.transaction.Transactional;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 头条智能投放账户配置信息表
@@ -464,7 +469,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         }
         if(!Check.isNull(strategy.getAdCity())){
             String[] city = strategy.getAdCity().split(",");
-            if(city.length>0){
+            if(null != city&&city.length>0){
                 params.put("city",city);
             }
         }
@@ -522,7 +527,11 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdActionScene())){
             String[] actionScene = strategy.getAdActionScene().split(",");
             if(actionScene.length>0){
-                params.put("action_scene",actionScene);
+                JSONArray actionSceneArray = new JSONArray();
+                for(int i=0;i<actionScene.length;i++){
+                    actionSceneArray.add(actionScene[i]);
+                }
+                params.put("action_scene",actionSceneArray);
             }
         }
         if(!Check.isNull(strategy.getAdActionDays())){
@@ -531,49 +540,81 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdActionCategories())){
             String[] actionCategories = strategy.getAdActionCategories().split(",");
             if(actionCategories.length>0){
-                params.put("action_categories",actionCategories);
+                JSONArray actionCategoriesArray = new JSONArray();
+                for(int i=0;i<actionCategories.length;i++){
+                    actionCategoriesArray.add(actionCategories[i]);
+                }
+                params.put("action_categories",actionCategoriesArray);
             }
         }
         if(!Check.isNull(strategy.getAdActionWords())){
             String[] actionWords = strategy.getAdActionWords().split(",");
             if(actionWords.length>0){
-                params.put("action_words",actionWords);
+                JSONArray actionWordsArray = new JSONArray();
+                for(int i=0;i<actionWords.length;i++){
+                    actionWordsArray.add(actionWords[i]);
+                }
+                params.put("action_words",actionWordsArray);
             }
         }
         if(!Check.isNull(strategy.getAdInterestCategories())){
             String[] interestCategories = strategy.getAdInterestCategories().split(",");
             if(interestCategories.length>0){
-                params.put("interest_categories",interestCategories);
+                JSONArray interestCategoriesArray = new JSONArray();
+                for(int i=0;i<interestCategories.length;i++){
+                    interestCategoriesArray.add(interestCategories[i]);
+                }
+                params.put("interest_categories",interestCategoriesArray);
             }
         }
         if(!Check.isNull(strategy.getAdInterestWords())){
             String[] interestWords = strategy.getAdInterestWords().split(",");
             if(interestWords.length>0){
-                params.put("interest_words",interestWords);
+                JSONArray interestWordsArray = new JSONArray();
+                for(int i=0;i<interestWords.length;i++){
+                    interestWordsArray.add(interestWords[i]);
+                }
+                params.put("interest_words",interestWordsArray);
             }
         }
         if(!Check.isNull(strategy.getAdAwemeFanBehaviors())){
             String[] awemeFanBehaviors = strategy.getAdAwemeFanBehaviors().split(",");
             if(awemeFanBehaviors.length>0){
-                params.put("aweme_fan_behaviors",awemeFanBehaviors);
+                JSONArray awemeFanBehaviorsArray = new JSONArray();
+                for(int i=0;i<awemeFanBehaviors.length;i++){
+                    awemeFanBehaviorsArray.add(awemeFanBehaviors[i]);
+                }
+                params.put("aweme_fan_behaviors",awemeFanBehaviorsArray);
             }
         }
         if(!Check.isNull(strategy.getAdAwemeFanCategories())){
             String[] awemeFanCategories = strategy.getAdAwemeFanCategories().split(",");
             if(awemeFanCategories.length>0){
-                params.put("aweme_fan_categories",awemeFanCategories);
+                JSONArray awemeFanCategoriesArray = new JSONArray();
+                for(int i=0;i<awemeFanCategories.length;i++){
+                    awemeFanCategoriesArray.add(awemeFanCategories[i]);
+                }
+                params.put("aweme_fan_categories",awemeFanCategoriesArray);
             }
         }
         if(!Check.isNull(strategy.getAdAwemeFanAccounts())){
             String[] awemeFanAccount = strategy.getAdAwemeFanAccounts().split(",");
             if(awemeFanAccount.length>0){
-                params.put("aweme_fan_accounts",awemeFanAccount);
+                JSONArray awemeFanAccountArray = new JSONArray();
+                for(int i=0;i<awemeFanAccount.length;i++){
+                    awemeFanAccountArray.add(awemeFanAccount[i]);
+                }
+                params.put("aweme_fan_accounts",awemeFanAccountArray);
             }
         }
         if(!Check.isNull(strategy.getAdAwemeFansNumbers())){
             String[] awemeFansNumbers = strategy.getAdAwemeFansNumbers().split(",");
             if(awemeFansNumbers.length>0){
-                params.put("aweme_fans_numbers",awemeFansNumbers);
+                JSONArray awemeFansNumbersArray = new JSONArray();
+                for(int i=0;i<awemeFansNumbers.length;i++){
+                    awemeFansNumbersArray.add(awemeFansNumbers[i]);
+                }
+                params.put("aweme_fans_numbers",awemeFansNumbersArray);
             }
         }
         if(!Check.isNull(strategy.getAdFilterAwemeAbnormalActive())){
@@ -591,19 +632,31 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdFlowPackage())){
             String[] flowPackage = strategy.getAdFlowPackage().split(",");
             if(flowPackage.length>0){
-                params.put("flow_package",flowPackage);
+                JSONArray flowPackageArray = new JSONArray();
+                for(int i=0;i<flowPackage.length;i++){
+                    flowPackageArray.add(flowPackage[i]);
+                }
+                params.put("flow_package",flowPackageArray);
             }
         }
         if(!Check.isNull(strategy.getAdExcludeFlowPackage())){
             String[] excludeFlowPackage = strategy.getAdExcludeFlowPackage().split(",");
             if(excludeFlowPackage.length>0){
-                params.put("exclude_flow_package",excludeFlowPackage);
+                JSONArray excludeFlowPackageArray = new JSONArray();
+                for(int i=0;i<excludeFlowPackage.length;i++){
+                    excludeFlowPackageArray.add(excludeFlowPackage[i]);
+                }
+                params.put("exclude_flow_package",excludeFlowPackageArray);
             }
         }
         if(!Check.isNull(strategy.getAdPlatform())){
             String[] platform = strategy.getAdPlatform().split(",");
             if(platform.length>0){
-                params.put("platform",platform);
+                JSONArray platformArray = new JSONArray();
+                for(int i=0;i<platform.length;i++){
+                    platformArray.add(platform[i]);
+                }
+                params.put("platform",platformArray);
             }
         }
 
@@ -645,7 +698,11 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdDeviceType())){
             String[] deviceType = strategy.getAdDeviceType().split(",");
             if(deviceType.length>0){
-                params.put("device_type",deviceType);
+                JSONArray deviceTypeArray = new JSONArray();
+                for(int i=0;i<deviceType.length;i++){
+                    deviceTypeArray.add(deviceType[i]);
+                }
+                params.put("device_type",deviceTypeArray);
             }
         }
 
@@ -662,25 +719,41 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdActivateType())){
             String[] activateType = strategy.getAdActivateType().split(",");
             if(activateType.length>0){
-                params.put("activate_type",activateType);
+                JSONArray activateTypeArray = new JSONArray();
+                for(int i=0;i<activateType.length;i++){
+                    activateTypeArray.add(activateType[i]);
+                }
+                params.put("activate_type",activateTypeArray);
             }
         }
         if(!Check.isNull(strategy.getAdArticleCategory())){
             String[] articleCategory = strategy.getAdArticleCategory().split(",");
             if(articleCategory.length>0){
-                params.put("article_category",articleCategory);
+                JSONArray articleCategoryArray = new JSONArray();
+                for(int i=0;i<articleCategory.length;i++){
+                    articleCategoryArray.add(articleCategory[i]);
+                }
+                params.put("article_category",articleCategoryArray);
             }
         }
         if(!Check.isNull(strategy.getAdDeviceBrand())){
             String[] deviceBrand = strategy.getAdDeviceBrand().split(",");
             if(deviceBrand.length>0){
-                params.put("device_brand",deviceBrand);
+                JSONArray deviceBrandArray = new JSONArray();
+                for(int i=0;i<deviceBrand.length;i++){
+                    deviceBrandArray.add(deviceBrand[i]);
+                }
+                params.put("device_brand",deviceBrandArray);
             }
         }
         if(!Check.isNull(strategy.getAdLaunchPrice())){
             String[] launchPrice = strategy.getAdLaunchPrice().split(",");
             if(launchPrice.length>0){
-                params.put("launch_price",launchPrice);
+                JSONArray launchPriceArray = new JSONArray();
+                for(int i=0;i<launchPrice.length;i++){
+                    launchPriceArray.add(launchPrice[i]);
+                }
+                params.put("launch_price",launchPriceArray);
             }
         }
         if(!Check.isNull(strategy.getAdAutoExtendEnabled())){
@@ -689,7 +762,11 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdAutoExtendTargets())){
             String[] autoExtendTargets = strategy.getAdAutoExtendTargets().split(",");
             if(autoExtendTargets.length>0){
-                params.put("auto_extend_targets",autoExtendTargets);
+                JSONArray autoExtendTargetsArray = new JSONArray();
+                for(int i=0;i<autoExtendTargets.length;i++){
+                    autoExtendTargetsArray.add(autoExtendTargets[i]);
+                }
+                params.put("auto_extend_targets",autoExtendTargetsArray);
             }
         }
         //预算与出价
@@ -1182,6 +1259,52 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     }
 
 
+    /**
+     *
+     * @description: 获取定向包
+     *
+     * @param accountId 广告主id
+     * @param landingType 投放目标
+     * @param deliveryRange
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     */
+    public Result getAdAudiencePackage(String accountId, String landingType, String deliveryRange){
+        CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
+       Result list = marketingService.getAudiencePackage(token,landingType,deliveryRange);
+       JSONObject jsonObject = (JSONObject)list.getResult();
+        return Result.successMsg("成功。",jsonObject.getJSONArray("audience_packages"));
+    }
+
+    /**
+     *
+     * @description: 获取人群包列表信息
+     *
+     * @param accountId
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     */
+    public Result getDMPCustomAudience(String accountId){
+
+        CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
+        // 获取人群包列表
+       Result list = marketingService.selectCustomAudience(token);
+        List<Map<String,Object>> listMap = (List<Map<String, Object>>) list.getResult();
+        //获取人群包id  List
+        List<Object> packageList = listMap.stream().map(map -> map.get("custom_audience_id")).collect(Collectors.toList());
+        String idStr = Joiner.on(",").join(packageList);
+        List<Integer> idsIntList = Arrays.asList(idStr.split(",")).stream().map(id -> Integer.valueOf(id.trim())).collect(Collectors.toList());
+        //获取人群包详细信息
+        Result packageInfoList = marketingService.getAudiencePackageRead(token,accountId,idsIntList);
+        List<Map<String,Object>> listInfoMap = (List<Map<String, Object>>) packageInfoList.getResult();
+        //人群包是否被删除 "1":已删除,"0":未删除
+        //人群包可投放状态,只有当状态为CUSTOM_AUDIENCE_DELIVERY_STATUS_AVAILABLE时才可进行投放使用
+        List<Map<String,Object>> filterList = listInfoMap.stream()
+                .filter(info -> Integer.valueOf(info.get("isdel")+"") == 0)
+                .filter(info -> "CUSTOM_AUDIENCE_DELIVERY_STATUS_AVAILABLE".equalsIgnoreCase(info.get("delivery_status")+""))
+                .collect(Collectors.toList());
+        return Result.successMsg("人群包获取成功。",filterList);
+    }
 
 
 }

+ 2 - 3
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/utils/Check.java

@@ -83,9 +83,8 @@ public class Check {
     public static JSONObject jsonRemoveEmpty(JSONObject jsonObject){
         JSONObject jsonResult = new JSONObject();
         for (Object key :jsonObject.keySet() ) {
-            String k = (String) jsonObject.get(key);
-            if (!Check.isNull(k)){
-                jsonResult.put(key.toString(), k);
+            if (!Check.isNull(jsonObject.get(key)) && !jsonObject.get(key).equals("")){
+                jsonResult.put(key.toString(), jsonObject.get(key));
             }
         }
         return jsonResult;

+ 5 - 1
jeecg-boot-bytedance/src/main/resources/bytedance_config.properties

@@ -37,6 +37,8 @@ bytedance_v2_ad_get_budget=/2/advertiser/budget/get/
 bytedance_v2_ad_update_budget=/2/advertiser/update/budget/
 #\u67E5\u8BE2\u5E7F\u544A\u4E3B\u4E0B\u5B58\u5728\u7684\u7684\u4EBA\u7FA4\u5305\u5217\u8868\u548C\u4FE1\u606F
 bytedance_v2_dmp_custom_audience_select=/2/dmp/custom_audience/select/
+#\u4EBA\u7FA4\u5305\u8BE6\u7EC6\u4FE1\u606F
+bytedance_v2_dmp_custom_audience_read=/2/dmp/custom_audience/read/
 #\u83B7\u53D6\u521B\u610F\u5BA1\u6838\u5EFA\u8BAE
 bytedance_v2_create_reject_reason=/2/creative/reject_reason/
 #\u83B7\u53D6\u5E7F\u544A\u7EC4
@@ -75,10 +77,12 @@ bytedance_v2_tools_ad_convert_query=/2/tools/ad_convert/query/
 #\u83B7\u53D6\u89C6\u9891\u63A8\u8350\u5C01\u9762\u63A5\u53E3
 bytedance_v2_tools_video_cover_suggest=/2/tools/video_cover/suggest/
 
-
 #\u884C\u52A8\u53F7\u53EC\u5B57\u6BB5\u5185\u5BB9\u83B7\u53D6
 bytedance_v2_tools_action_text_get=/2/tools/action_text/get/
 
+#\u83B7\u53D6\u5B9A\u5411\u5305
+bytedance_v2_audience_package_get=/2/audience_package/get/
+
 
 
 

+ 28 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java

@@ -386,6 +386,34 @@ public class AiBytedanceAdvertiserStrategyController {
 
 
 
+	@ApiOperation(value="获取行动号召", notes="获取行动号召")
+	@GetMapping(value = "/getAdAudiencePackage")
+	public Result getAdAudiencePackage(@RequestParam("accountId") String accountId,
+								  @RequestParam(value = "landingType",required = false) String landingType,
+								  @RequestParam(value = "deliveryRange",required = false) String deliveryRange) {
+		try {
+			return aiBytedanceAdvertiserStrategyService.getAdAudiencePackage(accountId,landingType,deliveryRange);
+		}catch (Exception e){
+			log.error("获取行动号召异常",e.getMessage());
+			return Result.error("请求失败,请联系开发人员!");
+		}
+	}
+
+
+	@ApiOperation(value="获取人群包列表信息", notes="获取人群包列表信息")
+	@GetMapping(value = "/getDMPCustomAudience")
+	public Result getDMPCustomAudience(@RequestParam("accountId") String accountId) {
+		try {
+			return aiBytedanceAdvertiserStrategyService.getDMPCustomAudience(accountId);
+		}catch (Exception e){
+			log.error("获取人群包列表异常",e.getMessage());
+			return Result.error("请求失败,请联系开发人员!");
+		}
+	}
+
+
+
+