Bladeren bron

添加调用修改广告计划状态的接口

liyuyi@c-top.com.cn 4 jaren geleden
bovenliggende
commit
5cf368f93d
4 gewijzigde bestanden met toevoegingen van 49 en 7 verwijderingen
  1. 1 0
      .idea/ai_target.iml
  2. 22 4
      ai_target_combine_handler.py
  3. 24 2
      config/url.py
  4. 2 1
      time_task/time_task_create_ad_by_target.py

+ 1 - 0
.idea/ai_target.iml

@@ -5,6 +5,7 @@
     <orderEntry type="jdk" jdkName="Remote Python 3.8.10 (sftp://root@139.186.165.84:22/data/Miniconda3/envs/ai_target/bin/python)" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="module" module-name="ai_ads" />
+    <orderEntry type="module" module-name="get_data_by_threadpool" />
   </component>
   <component name="PyDocumentationSettings">
     <option name="renderExternalDocumentation" value="true" />

+ 22 - 4
ai_target_combine_handler.py

@@ -12,7 +12,7 @@ import random
 import requests
 from utils.commonFunc import get_db_engine, is_contains_gender, is_contains_age, is_contains_region
 from utils.BaseClass import NpEncoder
-from config.url import create_campaign_url, create_group_and_creative_url, headers
+from config.url import create_campaign_url, create_group_and_creative_url, headers, update_campaign_status_url
 import logging
 from concurrent_log import ConcurrentTimedRotatingFileHandler
 
@@ -157,8 +157,6 @@ class GetTargetAndAssemblyParameters(object):
                                         'day_budget': self.advertiser_strategy['campaign_day_budget'],
                                         'day_budget_schedule': eval(self.advertiser_strategy['campaign_day_budget_schedule'])
                                         if self.advertiser_strategy['campaign_day_budget_schedule'] else None}
-        # TODO self.advertiser_strategy['campaign_status'] 如果为暂停,需要创建成功后,调用修改广告计划状态的接口
-
         request = requests.post(url=create_campaign_url,
                                 headers=headers,
                                 data=json.dumps(create_campaign_request_data, cls=NpEncoder))
@@ -183,6 +181,26 @@ class GetTargetAndAssemblyParameters(object):
             campaign_info_to_db['status'] = response_data.get('code', None)
             campaign_info_to_db['message'] = response_data.get('message', None)
 
+            # self.advertiser_strategy['campaign_status'] 如果为暂停,需要创建成功后,调用修改广告计划状态的接口
+            # `campaign_status` int(11) DEFAULT '1' COMMENT '计划状态: 1:投放 2:暂停 '
+            if self.advertiser_strategy['campaign_status'] == 2:
+                update_campaign_status_request = requests.post(url=update_campaign_status_url,
+                                                               headers=headers,
+                                                               data=json.dumps({'accountId': self.account_id,
+                                                                                'putStatus': 2,
+                                                                                'userId': '113dee46c7df464da78c07a985e92cd1',
+                                                                                'campaignIds': [self.campaign_id]},
+                                                                               cls=NpEncoder))
+                update_campaign_status_response_data = json.loads(update_campaign_status_request.text)
+                if update_campaign_status_response_data.get('result') and \
+                        update_campaign_status_response_data.get('result').get('failCount') == 0:
+                    logger.info("账户 %s 下的广告计划 %s 暂停成功!" % (self.account_id, self.campaign_id))
+                else:
+                    logger.error("账户 %s 下的广告计划 %s 暂停失败,异常信息: %s!" %
+                                 (self.account_id,
+                                  self.campaign_id,
+                                  str(update_campaign_status_response_data.get('result'))))
+                    raise Exception("账户 %s 下的广告计划 %s 暂停失败!" % (self.account_id, self.campaign_id))
         else:
             campaign_info_to_db['message'] = response_data['message']
             campaign_info_to_db['status'] = response_data['code']
@@ -312,7 +330,7 @@ class GetTargetAndAssemblyParameters(object):
         creative_cnt_df = creative_cnt_df[creative_cnt_df.creative_count < 200]
 
         # 1-2 计算每个素材还能创建的广告组(定向)个数: (200 - 已关联创意个数) / 15
-        creative_cnt_df['target_combine_cnt'] = np.floor((200 - creative_cnt_df['creative_count']) / 15)
+        creative_cnt_df['target_combine_cnt'] = int(np.floor((200 - creative_cnt_df['creative_count']) / 15))
 
         final_target_combine = pd.DataFrame([])
         for sig in creative_cnt_df.signature.unique():

+ 24 - 2
config/url.py

@@ -11,11 +11,33 @@ dev_server_port = 'http://139.186.165.84:31012/'
 product_server_port = 'http://139.186.27.96:31012/'
 
 
-
-
 # 创建计划url
 create_campaign_url = (debug_url if os_env == 'dev' else product_url) + 'kuaishou/create/campaignCreate'
 
+# 修改广告计划状态url
+# 入参:accountId    账户id                     Long
+#      putStatus    状态 1-投放、2-暂停、3-删除   int
+#      userId       操作人id                    string
+#      campaignIds  计划id集合                   array
+
+# {
+#     "success": true,
+#     "message": "操作成功!",
+#     "code": 0,
+#     "result": {
+#         "failCount": 1,
+#         "failInfo": [
+#             {
+#                 "message": "access token错误"
+#             }
+#         ],
+#         "totalCount": 1
+#     },
+#     "timestamp": 1630030314462
+# }
+update_campaign_status_url = (debug_url if os_env == 'dev' else product_url) + 'kuaishou/batch/batchUpdateStatus'
+
+
 # 创建组和创意url
 create_group_and_creative_url = (debug_url if os_env == 'dev' else product_url) + 'kuaishou/create/createUnitAndCreative'
 

+ 2 - 1
time_task/time_task_create_ad_by_target.py

@@ -59,7 +59,8 @@ account_df.drop_duplicates('account_id', keep='first', inplace=True)
 acc_list = [(item['account_id'], item['project_id']) for index, item in account_df.iterrows()]
 
 # for test
-acc_list = [(10456827, 458), (9774238, 458)]
+# acc_list = [(10456827, 458), (9774238, 458)]
+acc_list = [(10456827, 458)]
 
 # 2、 5个账户一组进行发送请求
 batch_num = 5