liyuyi@c-top.com.cn 4 anos atrás
pai
commit
c28fbf7b94

+ 1 - 2
BayesCombine.py

@@ -179,13 +179,12 @@ if __name__ == '__main__':
     with open('config/config.yaml', mode='r', encoding='utf-8') as f:
         config = yaml.load(f.read(), Loader=yaml.FullLoader)
 
-    # 数据库连接引擎,依据开发环境/生产环境 进行切换
+    # 1-1 数据库连接引擎,依据开发环境/生产环境 进行切换
     if os.getenv('environment', 'unknown') == 'dev':
         engine = get_db_engine(config['devDB'])
     else:
         engine = get_db_engine(config['productDB'])
 
-
     # 2、 参与定向组合的维度
     target_dim = [key for key in config['bayesDim'].keys() if config['bayesDim'][key]['isOn']]
 

+ 34 - 11
ai_target_combine_handler.py

@@ -141,7 +141,11 @@ class GetTargetAndAssemblyParameters(object):
         campaign_name = self.advertiser_strategy['campaign_name'] + '_优质定向'
         create_campaign_request_data = {'account_id': self.account_id,
                                         'campaign_name': campaign_name,
-                                        'type': self.advertiser_strategy['campaign_type']}
+                                        'type': self.advertiser_strategy['campaign_type'],
+                                        '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,
@@ -155,6 +159,8 @@ class GetTargetAndAssemblyParameters(object):
             'ai_strategy_uuid': self.ai_strategy_uuid,
             'campaign_name': campaign_name,
             'campaign_type': self.advertiser_strategy['campaign_type'],
+            'day_budget': self.advertiser_strategy['campaign_day_budget'],
+            'day_budget_schedule': self.advertiser_strategy['campaign_day_budget_schedule'],
             'create_time': datetime.datetime.now()
         }
         res = 0
@@ -300,11 +306,13 @@ class GetTargetAndAssemblyParameters(object):
             group_name = group_params['unit_name']
 
             # 获取素材名称, 在广告组命名中进行替换 (同时获取photo_id, 用于拼装创意层级的参数)
-            sql = """select photo_id, photo_name from ctop_kuaishou_video_get where account_id = %s and signature = '%s' limit 1""" % \
+            sql = """select photo_id, photo_name, material_type 
+            from ctop_kuaishou_video_get where account_id = %s and signature = '%s' limit 1""" % \
                   (self.account_id, item['signature'])
             signature_df = pd.read_sql(sql, self.product_engine)
             photo_name = signature_df['photo_name'].values[0] if not signature_df.empty else 'unknown'
             photo_id = signature_df['photo_id'].values[0] if not signature_df.empty else None
+            material_type = signature_df['material_type'].values[0] if not signature_df.empty else None
             group_name.replace('{{素材名称}}', photo_name)
             group_name = group_name + '_优质定向' + '_' + str(group_cnt)
 
@@ -333,6 +341,7 @@ class GetTargetAndAssemblyParameters(object):
                 single_creative_params_to_db['creative_uuid'] = creative_uuid
                 single_creative_params_to_db['creative_name'] = creative_name
                 single_creative_params_to_db['photo_id'] = int(photo_id) if photo_id else None
+                single_creative_params_to_db['creative_material_type'] = material_type
                 single_creative_params_to_db['create_time'] = datetime.datetime.now()
                 batch_creative_params_to_db.append(single_creative_params_to_db)
 
@@ -340,6 +349,7 @@ class GetTargetAndAssemblyParameters(object):
                 single_creative_params_to_request['creative_uuid'] = creative_uuid
                 single_creative_params_to_request['creative_name'] = creative_name
                 single_creative_params_to_request['photo_id'] = int(photo_id) if photo_id else None
+                single_creative_params_to_request['creative_material_type'] = material_type
 
                 # 单个创意信息加入到组里面的 creative_list 中
                 single_group_params_to_request['creative_list'].append(single_creative_params_to_request)
@@ -367,7 +377,7 @@ class GetTargetAndAssemblyParameters(object):
     def get_group_params(self):
         # 1、从账户信息表读取基本的配置信息
         group_params = {'unit_name': self.advertiser_strategy.get('group_name'),
-                        # 'put_status': self.advertiser_strategy.get('group_status'),
+                        'put_status': self.advertiser_strategy.get('group_status'),
                         'template_id': self.advertiser_strategy.get('template_id'),
                         'bid_type': self.advertiser_strategy.get('bid_type'),
                         'use_app_market': self.advertiser_strategy.get('use_app_market'),
@@ -377,7 +387,9 @@ class GetTargetAndAssemblyParameters(object):
                         'smart_bid': self.advertiser_strategy.get('smart_bid'),
                         'ocpx_action_type': self.advertiser_strategy.get('ocpx_action_type'),
                         'deep_conversion_type': self.advertiser_strategy.get('deep_conversion_type'),
-                        'scene_id':self.advertiser_strategy.get('scene_id'),
+                        'roi_ratio': self.advertiser_strategy.get('roi_ratio'),
+                        'deep_conversion_bid': self.advertiser_strategy.get('deep_conversion_bid'),
+                        'scene_id': self.advertiser_strategy.get('scene_id'),
                         'unit_type': self.advertiser_strategy.get('unit_type'),
                         'begin_time': self.advertiser_strategy.get('begin_time'),
                         'end_time': self.advertiser_strategy.get('end_time'),
@@ -409,6 +421,8 @@ class GetTargetAndAssemblyParameters(object):
                         # 'merchandise_id': self.advertiser_strategy.get('merchandise_id'),
                         # 'merchandise_type': self.advertiser_strategy.get('merchandise_type'),
                         # 'intention_target': self.advertiser_strategy.get('intention_target'),
+                        # 'playable_id': self.advertiser_strategy.get('playable_id'),
+                        # 'play_button': self.advertiser_strategy.get('play_button'),
                         # 'dpa_unit_param': self.advertiser_strategy.get('dpa_unit_param'),
                         'region': self.advertiser_strategy.get('region'),
                         'district_ids': self.advertiser_strategy.get('district_ids'),
@@ -424,17 +438,17 @@ class GetTargetAndAssemblyParameters(object):
                         'device_brand': self.advertiser_strategy.get('device_brand'),
                         'device_price': self.advertiser_strategy.get('device_price'),
                         'business_interest_type': self.advertiser_strategy.get('business_interest_type'),
-                        'business_interest': eval(self.advertiser_strategy.get('business_interest'))
-                        if self.advertiser_strategy.get('business_interest') else None,
+                        'business_interest': self.advertiser_strategy.get('business_interest'),
                         'fans_star': self.advertiser_strategy.get('fans_star'),
                         'interest_video': self.advertiser_strategy.get('interest_video'),
                         'app_interest': self.advertiser_strategy.get('app_interest'),
                         # 'app_interest_ids': self.advertiser_strategy.get('app_interest_ids'),
-                        'app_ids':self.advertiser_strategy.get('app_ids'),
+                        'app_ids': self.advertiser_strategy.get('app_ids'),
                         'filter_converted_level': self.advertiser_strategy.get('filter_converted_level'),
                         'population': self.advertiser_strategy.get('population'),
                         'exclude_population': self.advertiser_strategy.get('exclude_population'),
                         'paid_audience': self.advertiser_strategy.get('paid_audience'),
+                        'splash_ad_switch': self.advertiser_strategy.get('splash_ad_switch'),
                         'is_open': self.advertiser_strategy.get('is_open'),
                         'no_age_break': self.advertiser_strategy.get('no_age_break'),
                         'no_gender_break': self.advertiser_strategy.get('no_gender_break'),
@@ -491,6 +505,12 @@ class GetTargetAndAssemblyParameters(object):
 
         # 5、 写入数据库的组参数
         group_params_to_db = group_params.copy()
+        # 5-1 需要删除的字段
+        drop_cols = ['put_status', 'splash_ad_switch']
+        for col in drop_cols:
+            if col in group_params_to_db.keys():
+                del group_params_to_db[col]
+
         group_params_to_db['group_name'] = group_params_to_db.pop('unit_name')
         group_params_to_db['ai_strategy_uuid'] = self.ai_strategy_uuid
         group_params_to_db['account_id'] = self.account_id
@@ -512,7 +532,7 @@ class GetTargetAndAssemblyParameters(object):
     def get_creative_params(self):
         # 1、从账户信息表读取基本的配置信息
         creative_params = {'creative_name': self.advertiser_strategy.get('creative_name'),
-                           # 'put_status': self.advertiser_strategy.get('put_status'),
+                           'put_status': self.advertiser_strategy.get('group_status'),
                            'action_bar_text': self.advertiser_strategy.get('action_bar_text'),
                            'description': self.advertiser_strategy.get('description'),
                            'short_slogan': self.advertiser_strategy.get('short_slogan'),
@@ -527,7 +547,7 @@ class GetTargetAndAssemblyParameters(object):
                            'actionbar_click_url': self.advertiser_strategy.get('actionbar_click_url'),
                            'creative_category': self.advertiser_strategy.get('creative_category'),
                            'creative_tag': self.advertiser_strategy.get('creative_tag'),
-                           # 'live_creative_type': self.advertiser_strategy.get('live_creative_type')
+                           'live_creative_type': self.advertiser_strategy.get('live_creative_type')
                            }
 
         # 1、description 可能存在多个值,需要从中随机获取一个
@@ -537,10 +557,13 @@ class GetTargetAndAssemblyParameters(object):
             creative_params['description'] = description_lst[0]
 
 
-
-
         # 2 写入数据库的创意参数
         creative_params_to_db = creative_params.copy()
+        drop_cols = ['put_status','live_creative_type']
+        for col in drop_cols:
+            if col in creative_params_to_db:
+                del creative_params_to_db[col]
+
         creative_params_to_db['ai_strategy_uuid'] = self.ai_strategy_uuid
         creative_params_to_db['account_id'] = self.account_id
         creative_params_to_db['campaign_id'] = self.campaign_id

+ 3 - 0
ai_target_server.py

@@ -4,11 +4,14 @@ import tornado.options
 import tornado.web
 import platform
 from ai_target_combine_handler import AiTargetCombine
+from ai_callback_handler import AiCallBackAddCreative, AiCallBackAddGroup
 
 
 def create_application():
     web_application = tornado.web.Application([
         (r"/ai_target_combine", AiTargetCombine),
+        (r"/ai_callback_add_creative", AiCallBackAddCreative),
+        (r"/ai_callback_add_group", AiCallBackAddGroup),
     ])
     return web_application
 

+ 6 - 7
config/url.py

@@ -3,20 +3,19 @@ import os
 headers = {'Content-Type': 'application/json'}
 
 os_env = os.getenv('environment', 'unknown')
+debug_url = ""
 product_url = 'http://api.tjyourong.com.cn/jeecg-boot/'
-dev_url = 'http://192.168.1.8:8080/jeecg-boot/'
+
 
 dev_server_port = 'http://139.186.165.84:31012/'
 product_server_port = 'http://139.186.27.96:31012/'
 
+
 # 创建计划url
-create_campaign_url = dev_url if os_env == 'dev' else product_url
-create_campaign_url += 'kuaishou/create/campaignCreate'
+create_campaign_url = (debug_url if os_env == 'dev' else product_url) + 'kuaishou/create/campaignCreate'
 
 # 创建组和创意url
-create_group_and_creative_url = dev_url if os_env == 'dev' else product_url
-create_group_and_creative_url += 'kuaishou/create/createUnitAndCreative'
+create_group_and_creative_url = (debug_url if os_env == 'dev' else product_url) + 'kuaishou/create/createUnitAndCreative'
 
 # ai_target_combine 服务的接口
-target_combine_url = dev_server_port  if os_env == 'dev' else product_server_port
-target_combine_url += 'ai_target_combine'
+target_combine_url = (dev_server_port if os_env == 'dev' else product_server_port) + 'ai_target_combine'

+ 17 - 0
readme.txt

@@ -0,0 +1,17 @@
+广告组回调 url = "http://139.186.165.84:31012/ai_callback_add_group"
+广告创意回调 url = "http://139.186.165.84:31012/ai_callback_add_creative"
+
+创建广告计划 url ?
+解析参数创建广告组和广告创意的 url?
+
+1、调用人群预估覆盖接口
+2、修改广告计划状态的接口
+
+
+
+
+
+
+
+
+

+ 0 - 1
time_task/time_task_create_ad_by_target.py

@@ -27,7 +27,6 @@ project_ids = config['projectId']  # 目前支持优质定向功能的项目列
 
 
 def send_request(args):
-    request = None
     try:
         request_data = json.dumps({"account_id": args[0], "project_id": args[1]})
         request = requests.post(target_combine_url, request_data)

+ 4 - 2
utils/commonFunc.py

@@ -3,8 +3,7 @@ from urllib import parse
 import pandas as pd
 import yaml
 
-with open('../config/config.yaml', mode='r', encoding='utf-8') as f:
-    config = yaml.load(f.read(), Loader=yaml.FullLoader)
+
 
 
 def update_dict(x, y):
@@ -46,6 +45,9 @@ def is_contains_region(val1, val2):
                 on t1.city_name = t2.name
                 where t1.city_level in %s
                 """ % (tuple(val1.split('|')),)
+    with open('config/config.yaml', mode='r', encoding='utf-8') as f:
+        config = yaml.load(f.read(), Loader=yaml.FullLoader)
+
     city_df = pd.read_sql(sql, get_db_engine(config['productDB']))
 
     if not val2 or val2 == '不限' or val2 == '[]':