1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import datetime
- import pandas as pd
- import json
- import traceback
- import requests
- import tornado.web
- from utils.DataBaseConfig import *
- from utils.UrlConfig import *
- class AiHistoricalHighQualityMaterial(tornado.web.RequestHandler):
- def post(self):
- data = self.request.body
- data = str(data, 'utf8')
- data = json.loads(data, encoding='utf8')
- self.logger.info("*************************************** NEW REQUEST ***************************************")
- self.logger.info("raw data from request is %s" % data)
- account_id = data.get('account_id')
- campaign_id = data.get('campaign_id')
- try:
- inst = GetRequestData(account_id, campaign_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, campaign_id):
- self.video = None
- self.account_id = account_id
- self.campaign_id = campaign_id
- self.data = None
- self.campaign_name = None
- self.group_name = None
- self.get_video_info()
- self.get_campaign_and_group_name_rule()
- self.get_request_data()
- def get_video_info(self):
- video_request_data = {"accountId": self.account_id,
- "num": high_quality_video_cnt,
- "startTime": (datetime.datetime.now() +
- datetime.timedelta(days=-high_quality_video_days)).strftime("%Y-%m-%d"),
- "endTime": str(datetime.date.today())
- }
- request = requests.post(get_historical_high_quality_video_url,
- headers=headers,
- data=json.JSONEncoder().encode(video_request_data))
- self.video = request
- def get_campaign_and_group_name_rule(self):
- if self.video['code'] == 0:
- sql = """
- select campaign_name, unit_name
- from ctop_ai_kuaishou_advertiser_strategy
- where account_id = %d
- and status = 1
- limit 1
- """ % self.account_id
- df = pd.read_sql(sql, engine)
- self.campaign_name = df['campaign_name'].values[0]
- self.group_name = df['unit_name'].values[0]
- 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": self.campaign_id,
- "campaign_name": self.campaign_name.replace('自定义', '跑量素材')
- + str(datetime.datetime.now())
- },
- 'group_info':
- {
- 'group_name': self.group_name.replace('自定义', '跑量素材')
- + str(datetime.datetime.now()),
- 'begin_time': str(datetime.date.today())
- },
- 'creative_info':
- {
- 'is_sticky': 0
- }
- }
|