liyuyi@c-top.com.cn 4 years ago
parent
commit
33641f7ba6

+ 1 - 1
.idea/ai_ads.iml

@@ -5,7 +5,7 @@
       <excludeFolder url="file://$MODULE_DIR$/.pytest_cache" />
       <excludeFolder url="file://$MODULE_DIR$/venv" />
     </content>
-    <orderEntry type="jdk" jdkName="Python 3.8 (base)" jdkType="Python SDK" />
+    <orderEntry type="jdk" jdkName="Python 3.7 (ai_ads)" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
   <component name="PyDocumentationSettings">

+ 1 - 1
.idea/misc.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (base)" project-jdk-type="Python SDK" />
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (ai_ads)" project-jdk-type="Python SDK" />
 </project>

+ 40 - 50
ai_strategy_request_handler.py

@@ -16,49 +16,37 @@ log_handler.setFormatter(log_formatter)
 logger = logging.getLogger('ai_strategy_request_logger')
 logger.addHandler(log_handler)
 logger.setLevel(logging.DEBUG)
-print('id of logger %s' % id(logger))
-
-
-class AiStrategyRequestParse(tornado.web.RequestHandler):
-    def post(self):
-        data = self.request.body
-        data = str(data, 'utf8')
-        data = json.loads(data, encoding='utf8')
-        logger.info("***************************************  NEW REQUEST ***************************************")
-        logger.info("raw data from request is %s" % data)
-
-        # 1、新增广告组操作
-        try:
-            if data["operation_type"] == 1:
-                inst = ParseAddCampaignOrAddGroupRequest(data)
-                inst.get_advertiser_strategy_info()
-                inst.write_intelligence_strategy_table()
-                if inst.campaign_id == "" or inst.campaign_id is None:
-                    if inst.add_campaign() == -1:
-                        raise Exception('广告计划创建失败')
-
-                inst.assemble_group_and_creative_params()
-                create_group_and_creative_res = inst.res_data
-                inst.update_intelligence_strategy_table()
-                logger.info("create group and creative request info: %s" % create_group_and_creative_res)
-
-                request = requests.post(create_group_and_creative_url,
-                                        headers=headers,
-                                        data=json.JSONEncoder().encode(create_group_and_creative_res)
-                                        )
-                create_group_and_creative_response_data = json.loads(request.text)
-                logger.info("请求返回:%s" % create_group_and_creative_response_data)
-                self.write(json.dumps({'account_id': inst.account_id,
-                                       'ai_strategy_id': inst.ai_strategy_uuid,
-                                       'message': create_group_and_creative_response_data}))
-                self.flush()
-            else:
-                self.write(json.dumps({"message": "operation_type 不支持"}))
-                self.flush()
-        except Exception:
-            logger.error(traceback.format_exc())
-            self.write(json.dumps(traceback.format_exc()))
-            self.flush()
+print('id of ai_strategy_request_logger %s' % id(logger))
+
+
+def ai_strategy_request_parse(data):
+    """
+
+
+    :param data:
+    :return:
+    """
+    if data["operation_type"] == 1:
+        inst = ParseAddCampaignOrAddGroupRequest(data)
+        inst.get_advertiser_strategy_info()
+        inst.write_intelligence_strategy_table()
+        if inst.campaign_id == "" or inst.campaign_id is None:
+            if inst.add_campaign() == -1:
+                return {'code': -2, 'message': '广告计划创建失败!'}
+        inst.assemble_group_and_creative_params()
+        create_group_and_creative_res = inst.res_data
+        inst.update_intelligence_strategy_table()
+        logger.info("create group and creative request info: %s" % create_group_and_creative_res)
+
+        request = requests.post(create_group_and_creative_url,
+                                headers=headers,
+                                data=json.JSONEncoder().encode(create_group_and_creative_res)
+                                )
+        response_data = json.loads(request.text)
+        logger.info("请求返回:%s" % response_data)
+        return {'code': 0, 'message': response_data}
+    else:
+        return {'code': -1, 'message': '暂时不支持非新增的操作请求!'}
 
 
 # 该类解析的是 手动请求的新增广告计划或者新增广告组的数据
@@ -187,14 +175,16 @@ class ParseAddCampaignOrAddGroupRequest(object):
         :return:
         """
         # 1、组层级基本信息
-        drop_cols = ['id', 'account_id', 'status', 'campaign_type',
-                     'site_id', 'click_track_url', 'impression_url', 'ad_photo_played_t3s_url',
-                     'actionbar_click_url',
+        drop_cols = ['id', 'account_id', 'status', 'campaign_type', 'campaign_name', 'group_name',
+                     'creative_name', 'action_bar_text', 'description', 'short_slogan',
+                     'sticker_title', 'overlay_type', 'expose_tag', 'new_expose_tag', 'site_id',
+                     'click_track_url', 'impression_url', 'ad_photo_played_t3s_url', 'actionbar_click_url',
+                     'creative_category', 'creative_tag', 'image_cnt',
                      'create_time', 'effective_time', 'expiry_time']
 
         group_cols_to_list = ['app_store', 'scene_id', 'region', 'district_ids', 'ages_range', 'device_brand',
-                        'device_price', 'business_interest', 'fans_star', 'interest_video', 'app_interest',
-                        'app_ids', 'population', 'exclude_population', 'paid_audience', 'behavior_interest']
+                              'device_price', 'business_interest', 'fans_star', 'interest_video', 'app_interest',
+                              'app_ids', 'population', 'exclude_population', 'paid_audience', 'behavior_interest']
 
         basic_group_info = self.advertiser_strategy.copy()
         for col in drop_cols:
@@ -221,7 +211,7 @@ class ParseAddCampaignOrAddGroupRequest(object):
         # 2、创意层级基本信息
         creative_cols = ['creative_name',  'action_bar_text', 'description', 'short_slogan',
                          'sticker_title', 'overlay_type', 'expose_tag', 'new_expose_tag', 'site_id',
-                         'click_track_url', 'impression_url', 'ad_photo_played_t3s_url', 'actionbar_click_url'
+                         'click_track_url', 'impression_url', 'ad_photo_played_t3s_url', 'actionbar_click_url',
                          'creative_category', 'creative_tag']
         basic_creative_info = {}
         for col in creative_cols:
@@ -275,7 +265,7 @@ class ParseAddCampaignOrAddGroupRequest(object):
             creative_cnt = 1
             for image_md5 in video['imageList'][: self.advertiser_strategy['image_cnt']]:
                 creative_uuid = str(uuid.uuid4())
-                creative_name = self.creative_info['creative_name'] + '_' + str(creative_cnt)
+                creative_name = basic_creative_info['creative_name'] + '_' + str(creative_cnt)
 
                 single_creative_info_to_db = creative_info_to_db.copy()
                 single_creative_info_to_db['creative_uuid'] = creative_uuid

+ 13 - 14
ai_time_task_creative_handler.py

@@ -5,6 +5,7 @@ from utils.BaseClass import *
 from utils.CommonFunction import *
 from utils.ConstantConfig import *
 from utils.LogConfig import *
+from ai_strategy_request_func import ai_strategy_request_parse
 
 log_handler = TimedRotatingFileHandler("logs/ai_auto_create/ai_auto_create.log",
                                        when="midnight", backupCount=100)
@@ -41,11 +42,9 @@ class AiHistoricalMissingMaterial(tornado.web.RequestHandler):
                 else:
                     request_data = get_request_data(account_id, campaign_id, video_info, campaign_name, group_name,
                                                     "补充遗漏素材", "补充遗漏素材")
-                    print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-                    request = requests.post(ai_strategy_request_url, request_data)
-                    print("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
-                    logger.info("ai策略的返回信息:%s" % request.text)
-                    self.write(request.text)
+                    request = ai_strategy_request_parse(request_data)
+                    logger.info("ai策略的返回信息:%s" % request)
+                    self.write(json.dumps(request))
                     self.flush()
         except Exception:
             logger.error(traceback.format_exc())
@@ -79,9 +78,9 @@ class AiAutoCreative(tornado.web.RequestHandler):
                 else:
                     request_data = get_request_data(account_id, campaign_id, video_info, campaign_name, group_name,
                                                     "自动上新", "上新")
-                    request = requests.post(ai_strategy_request_url, request_data)
-                    logger.info("ai策略的返回信息:%s" % request.text)
-                    self.write(request.text)
+                    request = ai_strategy_request_parse(request_data)
+                    logger.info("ai策略的返回信息:%s" % request)
+                    self.write(json.dumps(request))
                     self.flush()
         except Exception:
             logger.error(traceback.format_exc())
@@ -117,9 +116,9 @@ class AiHighQualityMaterial(tornado.web.RequestHandler):
                 else:
                     request_data = get_request_data(account_id, campaign_id, video_info, campaign_name, group_name,
                                                     "跑量素材", "跑量素材")
-                    request = requests.post(ai_strategy_request_url, request_data)
-                    logger.info("ai策略的返回信息:%s" % request.text)
-                    self.write(request.text)
+                    request = ai_strategy_request_parse(request_data)
+                    logger.info("ai策略的返回信息:%s" % request)
+                    self.write(json.dumps(request))
                     self.flush()
         except Exception:
             logger.error(traceback.format_exc())
@@ -209,9 +208,9 @@ class AiCheckAndUpTOFullCreative(tornado.web.RequestHandler):
                     else:
                         request_data = get_request_data(account_id, campaign_id, video_info, campaign_name, group_name,
                                                         "跑量素材", "跑量素材")
-                        request = requests.post(ai_strategy_request_url, request_data)
-                        logger.info("ai策略的返回信息:%s" % request.text)
-                        self.write(request.text)
+                        request = ai_strategy_request_parse(request_data)
+                        logger.info("ai策略的返回信息:%s" % request)
+                        self.write(json.dumps(request))
                         self.flush()
         except Exception:
             logger.error(traceback.format_exc())

File diff suppressed because it is too large
+ 274 - 12
logs/ai_strategy_request/ai_strategy_request.log


+ 0 - 2
main.py

@@ -3,7 +3,6 @@ import tornado.ioloop
 import tornado.log
 import tornado.options
 import tornado.web
-from ai_strategy_request_handler import *
 from ai_callback_handler import *
 from advertiser_strategy_operate import *
 from ai_time_task_creative_handler import *
@@ -11,7 +10,6 @@ from ai_time_task_creative_handler import *
 
 def create_application():
     web_application = tornado.web.Application([
-        (r"/ai_strategy_request", AiStrategyRequestParse),
         (r"/ai_callback_add_group", AiCallBackAddGroup),
         (r"/ai_callback_add_creative", AiCallBackAddCreative),
         (r"/add_advertiser_strategy", AddAdvertiserStrategy),

File diff suppressed because it is too large
+ 47 - 36
manual_request_json.py


+ 16 - 8
utils/ConstantConfig.py

@@ -1,12 +1,20 @@
-# 补充历史遗落素材的个数
-historical_missing_video_cnt = 2
-
-# 近多少天的爆量视频
-high_quality_video_days = 14
+import os
+# 账户当天创意上新数
+full_creative_cnt = 2000
 
+os_env_code_status = os.getenv('LYY_STATUS', 'product')
+if os_env_code_status == 'dev':
+    # 补充历史遗落素材的个数
+    historical_missing_video_cnt = 2
+    # 近多少天的爆量视频
+    high_quality_video_days = 14
+    high_quality_video_cnt = 2
+else:
+    # 补充历史遗落素材的个数
+    historical_missing_video_cnt = 100
+    # 近多少天的爆量视频
+    high_quality_video_days = 14
+    high_quality_video_cnt = 100
 
-high_quality_video_cnt = 2
 
-# 账户当天创意上新数
-full_creative_cnt = 2000
 

+ 27 - 20
utils/DataBaseConfig.py

@@ -1,24 +1,31 @@
+import os
 from sqlalchemy import create_engine
-import pymysql
-
-# 线上数据库连接字符串
-# host = "139.186.151.174"
-# port = 3306
-# user = "hcst"
-# passwd = "hcst@2020"
-# db = 'jeecg-boot'
-# charset = 'utf8'
-# db_con_str = "mysql+pymysql://%s:%s@%s:%d/%s" % ("readonly", "hcst@2021", "139.186.27.96", 4000, "jeecg-boot")
-
-# 测试数据库连接字符串
-host = "139.186.151.174"
-port = 3306
-user = "hcst"
-passwd = "hcst@2020"
-db = 'jeecg-boot'
-charset = 'utf8'
-db_con_str = "mysql+pymysql://%s:%s@%s:%d/%s" % ("hcst", "hcst@2020", "139.186.151.174", 3306, "jeecg-boot")
-engine = create_engine(db_con_str, connect_args={'charset': 'utf8'})
+
+os_env_code_status = os.getenv('LYY_STATUS', 'product')
+if os_env_code_status == 'dev':
+    # 测试数据库连接字符串
+    host = "139.186.151.174"
+    port = 3306
+    user = "hcst"
+    passwd = "hcst@2020"
+    db = 'jeecg-boot'
+    charset = 'utf8'
+    db_con_str = "mysql+pymysql://%s:%s@%s:%d/%s" % ("hcst", "hcst@2020", "139.186.151.174", 3306, "jeecg-boot")
+    engine = create_engine(db_con_str, connect_args={'charset': 'utf8'})
+else:
+    # 线上数据库连接字符串
+    pass
+    # host = "139.186.151.174"
+    # port = 3306
+    # user = "hcst"
+    # passwd = "hcst@2020"
+    # db = 'jeecg-boot'
+    # charset = 'utf8'
+    # db_con_str = "mysql+pymysql://%s:%s@%s:%d/%s" % ("readonly", "hcst@2021", "139.186.27.96", 4000, "jeecg-boot")
+
+
+
+
 
 
 

+ 46 - 8
utils/UrlConfig.py

@@ -21,24 +21,62 @@ headers = {'Content-Type': 'application/json'}
 
 
 # 创建计划url
-create_campaign_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/create/campaignCreate"
+# create_campaign_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/create/campaignCreate"
 
 # 获取上新视频url
-get_new_video_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/material/getNewVideoList"
+# get_new_video_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/material/getNewVideoList"
 
 # 获取历史视频url
-get_history_video_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/material/getHistoryVideoList"
+# get_history_video_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/material/getHistoryVideoList"
 
 # 创建组和创意url
-create_group_and_creative_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/create/createUnitAndCreative"
+# create_group_and_creative_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/create/createUnitAndCreative"
 
 # 获取历史遗漏视频url, 没有关联上创意的视频
-get_missing_video_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/material/getCreateZeroVideoList"
+# get_missing_video_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/material/getCreateZeroVideoList"
 
 # 获取历史高质量视频url
-get_high_quality_video_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/material/getHistoryTopVideoList"
+# get_high_quality_video_url = "http://192.168.1.188:8088/jeecg-boot/kuaishou/material/getHistoryTopVideoList"
 
 # ai 策略请求url
-ai_strategy_request_url = 'http://192.168.1.193:31012/ai_strategy_request'
+# ai_strategy_request_url = 'http://192.168.1.193:31012/ai_strategy_request'
 
-# 192.168.1.193
+
+import os
+os_env_code_status = os.getenv('LYY_STATUS', 'product')
+if os_env_code_status == 'dev':
+    # 创建计划url
+    create_campaign_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/create/campaignCreate"
+
+    # 获取上新视频url
+    get_new_video_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/material/getNewVideoList"
+
+    # 获取历史视频url
+    get_history_video_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/material/getHistoryVideoList"
+
+    # 创建组和创意url
+    create_group_and_creative_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/create/createUnitAndCreative"
+
+    # 获取历史遗漏视频url, 没有关联上创意的视频
+    get_missing_video_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/material/getCreateZeroVideoList"
+
+    # 获取历史高质量视频url
+    get_high_quality_video_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/material/getHistoryTopVideoList"
+else:
+    # 创建计划url
+    create_campaign_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/create/campaignCreate"
+
+    # 获取上新视频url
+    get_new_video_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/material/getNewVideoList"
+
+    # 获取历史视频url
+    get_history_video_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/material/getHistoryVideoList"
+
+    # 创建组和创意url
+    create_group_and_creative_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/create/createUnitAndCreative"
+
+    # 获取历史遗漏视频url, 没有关联上创意的视频
+    get_missing_video_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/material/getCreateZeroVideoList"
+
+    # 获取历史高质量视频url
+    get_high_quality_video_url = "http://api.tjyourong.com.cn/jeecg-boot/kuaishou/material/getHistoryTopVideoList"