Переглянути джерело

新增补充历史遗漏素材接口
新增历史跑量素材接口

liyuyi@c-top.com.cn 4 роки тому
батько
коміт
78bc97c3a8

+ 2 - 3
ai_callback_add_group_handler.py

@@ -22,7 +22,6 @@ class AiCallBackAddGroup(tornado.web.RequestHandler):
 
 
     def post(self):
     def post(self):
         res = {'code': 0,
         res = {'code': 0,
-               'data': None,
                'message': "SUCCESS"}
                'message': "SUCCESS"}
 
 
         data = self.request.body
         data = self.request.body
@@ -32,7 +31,7 @@ class AiCallBackAddGroup(tornado.web.RequestHandler):
         self.logger.info("raw data from request is %s" % data)
         self.logger.info("raw data from request is %s" % data)
 
 
         try:
         try:
-            inst = UpdateGroupLevelRecordTable(data,self.logger)
+            inst = UpdateGroupLevelRecordTable(data, self.logger)
             inst.update_table_info()
             inst.update_table_info()
         except Exception:
         except Exception:
             res['code'] = -1
             res['code'] = -1
@@ -45,7 +44,7 @@ class AiCallBackAddGroup(tornado.web.RequestHandler):
 
 
 
 
 class UpdateGroupLevelRecordTable(object):
 class UpdateGroupLevelRecordTable(object):
-    def __init__(self, request_data,logger):
+    def __init__(self, request_data, logger):
         self.data = request_data
         self.data = request_data
         self.logger = logger
         self.logger = logger
 
 

+ 65 - 0
ai_historical_high_quality_material_handler.py

@@ -0,0 +1,65 @@
+import datetime
+import json
+import traceback
+import requests
+import tornado.web
+from db_config import *
+
+
+class AiHistoricalHighQualityMaterial(tornado.web.RequestHandler):
+    def initialize(self, logger):
+        self.logger = logger
+
+    def post(self):
+        self.logger.info("***************************************  NEW REQUEST ***************************************")
+        try:
+            for account_id in account_id_list:
+                inst = GetRequestData(account_id)
+                if inst.data is not None:
+                    request = requests.post(ai_strategy_request_url, inst.data)
+                    self.logger.info("ai策略的返回信息:%s" % request.text)
+                    self.write(request.text)
+                    self.flush()
+                else:
+                    self.write(json.dumps({"message": "没有获取到视频新,不发送ai策略请求!"}))
+                    self.flush()
+        except Exception:
+            self.logger.error(traceback.format_exc())
+            self.write(json.dumps(traceback.format_exc()))
+            self.flush()
+
+
+class GetRequestData(object):
+    def __init__(self, account_id):
+        self.video = None
+        self.account_id = account_id
+        self.data = None
+        self.get_video_info()
+        self.get_request_data()
+
+    def get_video_info(self):
+        video_request_data = {"accountId": self.account_id,
+                              "videoCnt": historical_missing_video_cnt,
+                              "days": high_quality_video_days
+        }
+        request = requests.post(get_historical_high_quality_video_url,
+                                headers=headers,
+                                data=json.JSONEncoder().encode(video_request_data))
+        self.video = request
+
+    def get_request_data(self):
+        if self.video['code'] == 0:
+            self.data = {"video": self.video['data'],
+                         "operation_type": 1,
+                         "account_id": self.account_id,
+                         "ai_strategy_remark": "跑量素材",
+                         "campaign_info": {
+                             "campaign_id": "",
+                             "campaign_name": account_id_to_name[self.account_id] +
+                                              campaign_name.replace('自定义', '跑量素材')
+                                              + str(datetime.datetime.now()),
+                             "campaign_type": 2},
+                         'group_info': {'unit_name': account_id_to_name[self.account_id] + unit_name +
+                                                     str(datetime.datetime.now()),
+                                        'begin_time': str(datetime.date.today())},
+                         'creative_info': creative_info}

+ 65 - 0
ai_historical_missing_material_handler.py

@@ -0,0 +1,65 @@
+import datetime
+import json
+import traceback
+
+import requests
+import tornado.web
+
+from db_config import *
+
+
+class AiHistoricalMissingMaterial(tornado.web.RequestHandler):
+    def initialize(self, logger):
+        self.logger = logger
+
+    def post(self):
+        self.logger.info("***************************************  NEW REQUEST ***************************************")
+        try:
+            for account_id in account_id_list:
+                inst = GetRequestData(account_id)
+                if inst.data is not None:
+                    request = requests.post(ai_strategy_request_url, inst.data)
+                    self.logger.info("ai策略的返回信息:%s" % request.text)
+                    self.write(request.text)
+                    self.flush()
+                else:
+                    self.write(json.dumps({"message": "没有获取到视频新,不发送ai策略请求!"}))
+                    self.flush()
+        except Exception:
+            self.logger.error(traceback.format_exc())
+            self.write(json.dumps(traceback.format_exc()))
+            self.flush()
+
+
+class GetRequestData(object):
+    def __init__(self, account_id):
+        self.video = None
+        self.account_id = account_id
+        self.data = None
+        self.get_video_info()
+        self.get_request_data()
+
+    def get_video_info(self):
+        video_request_data = {"accountId": self.account_id,
+                              "videoCnt": historical_missing_video_cnt}
+        request = requests.post(get_historical_missing_video_url,
+                                headers=headers,
+                                data=json.JSONEncoder().encode(video_request_data))
+        self.video = request
+
+    def get_request_data(self):
+        if self.video['code'] == 0:
+            self.data = {"video": self.video['data'],
+                         "operation_type": 1,
+                         "account_id": self.account_id,
+                         "ai_strategy_remark": "补充历史遗漏素材",
+                         "campaign_info": {
+                             "campaign_id": "",
+                             "campaign_name": account_id_to_name[self.account_id] +
+                                              campaign_name.replace('自定义', '历史遗漏素材补充')
+                                              + str(datetime.datetime.now()),
+                             "campaign_type": 2},
+                         'group_info': {'unit_name': account_id_to_name[self.account_id] + unit_name +
+                                                     str(datetime.datetime.now()),
+                                        'begin_time': str(datetime.date.today())},
+                         'creative_info': creative_info}

+ 13 - 17
ai_strategy_request_handler.py

@@ -1,21 +1,15 @@
-from typing import Optional, Awaitable
-import pandas as pd
-import numpy as np
 import datetime
 import datetime
-import pymysql
-from sqlalchemy import create_engine
-import simplejson
-import requests
-import tornado.web
-import pandas as pd
 import json
 import json
-import numpy as np
-import datetime
-from sqlalchemy import create_engine
-from db_config import *
 import traceback
 import traceback
 import uuid
 import uuid
 
 
+import pandas as pd
+import requests
+import simplejson
+import tornado.web
+
+from db_config import *
+
 
 
 class AiStrategyRequestParse(tornado.web.RequestHandler):
 class AiStrategyRequestParse(tornado.web.RequestHandler):
     def initialize(self, logger):
     def initialize(self, logger):
@@ -48,9 +42,10 @@ class AiStrategyRequestParse(tornado.web.RequestHandler):
                                         headers=headers,
                                         headers=headers,
                                         data=json.JSONEncoder().encode(create_group_and_creative_res)
                                         data=json.JSONEncoder().encode(create_group_and_creative_res)
                                         )
                                         )
-                create_group_and_creative_response_data = simplejson.loads(request.text)
+                create_group_and_creative_response_data = json.loads(request.text)
                 self.logger.info("请求返回:%s" % create_group_and_creative_response_data)
                 self.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,
+                self.write(json.dumps({'account_id': inst.account_id,
+                                       'ai_strategy_id': inst.ai_strategy_uuid,
                                        'message': create_group_and_creative_response_data}))
                                        'message': create_group_and_creative_response_data}))
                 self.flush()
                 self.flush()
             else:
             else:
@@ -61,6 +56,7 @@ class AiStrategyRequestParse(tornado.web.RequestHandler):
             self.write(json.dumps(traceback.format_exc()))
             self.write(json.dumps(traceback.format_exc()))
             self.flush()
             self.flush()
 
 
+
 # 该类解析的是 手动请求的新增广告计划或者新增广告组的数据
 # 该类解析的是 手动请求的新增广告计划或者新增广告组的数据
 class ParseAddCampaignOrAddGroupRequest(object):
 class ParseAddCampaignOrAddGroupRequest(object):
     def __init__(self, request_data, logger):
     def __init__(self, request_data, logger):
@@ -264,13 +260,13 @@ class ParseAddCampaignOrAddGroupRequest(object):
             group_cnt += 1
             group_cnt += 1
 
 
             creative_cnt = 1
             creative_cnt = 1
-            for image in video['imageList']:
+            for image in video['imageList'][:image_cnt]:
                 single_creative_info = {
                 single_creative_info = {
                     'creative_uuid': str(uuid.uuid4()),
                     'creative_uuid': str(uuid.uuid4()),
                     'is_sticky': 0,
                     'is_sticky': 0,
                     'creative_name': self.creative_info['creative_name'] + '_' + str(creative_cnt),
                     'creative_name': self.creative_info['creative_name'] + '_' + str(creative_cnt),
                     'photo_id': video['photo_id'],
                     'photo_id': video['photo_id'],
-                    'image_md5': image,  # TODO 需要和蒙蒙确认字段名称
+                    'image_md5': image,
                     'image_tokens': self.creative_info.get('image_tokens'),
                     'image_tokens': self.creative_info.get('image_tokens'),
                     'action_bar_text': self.creative_info['action_bar_text'],
                     'action_bar_text': self.creative_info['action_bar_text'],
                     'description': self.creative_info['description'],
                     'description': self.creative_info['description'],

+ 34 - 0
db_config.py

@@ -34,4 +34,38 @@ get_history_video_url = "http://192.168.1.8:8080/jeecg-boot/kuaishou/material/ge
 # 创建组和创意url
 # 创建组和创意url
 create_group_and_creative_url = "http://192.168.1.8:8080/jeecg-boot/kuaishou/create/createUnitAndCreative"
 create_group_and_creative_url = "http://192.168.1.8:8080/jeecg-boot/kuaishou/create/createUnitAndCreative"
 
 
+# 获取历史遗漏视频url
+get_historical_missing_video_url = "http://192.168.1.8:8080/jeecg-boot/kuaishou/material/getHistoryVideoList"
+
+# 获取历史高质量视频url
+get_historical_high_quality_video_url = "http://192.168.1.8:8080/jeecg-boot/kuaishou/material/getHistoryVideoList"
+
+# ai 策略请求url
+ai_strategy_request_url = 'http://127.0.0.1:31012/ai_strategy_request'
+
+
+# 账户列表
+account_id_list = [9556344, 9743738, 9743727]
+# 补充历史遗落素材的个数
+historical_missing_video_cnt = 100
+
+# 近多少天的爆量视频
+high_quality_video_days = 14
+
+
+# 创意层级基本信息
+creative_info = {'creative_name': '自定义创意',
+                 'creative_category': 20101,
+                 'creative_tag': ['起量', '搞笑'],
+                 'action_bar_text': '一键下载',
+                 'description': '不买亏大了!众多商品低至一元!看看你多花了多少冤枉钱!'}
+
+# 每个素材最多搭配的封面个数
+image_cnt = 5
+
+# 计划名称 和 组名称  的头部
+account_id_to_name = {9556344: '户14', 9743738: '户8', 9743727: '户9'}
+campaign_name = '-上下滑&信息流-自定义-剪辑-低价-低价包邮-活动-年龄18岁以上-单出价-'
+unit_name = '-上下滑&信息流-剪辑-低价-低价包邮-活动-年龄18岁以上-单出价-'
+
 
 

+ 7 - 9
main.py

@@ -1,18 +1,16 @@
-import tornado.ioloop
-import tornado.web
 import argparse
 import argparse
-import json
-import pickle
-import tornado.options
-import tornado.log
+import logging
 import time
 import time
-import traceback
 from logging.handlers import TimedRotatingFileHandler
 from logging.handlers import TimedRotatingFileHandler
-import logging
 
 
-import ai_strategy_request_handler
+import tornado.ioloop
+import tornado.log
+import tornado.options
+import tornado.web
+
 import ai_callback_add_creative_handler
 import ai_callback_add_creative_handler
 import ai_callback_add_group_handler
 import ai_callback_add_group_handler
+import ai_strategy_request_handler
 
 
 
 
 def create_application():
 def create_application():