ai_auto_creative_handler.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import datetime
  2. import json
  3. import traceback
  4. import pandas as pd
  5. import requests
  6. import tornado.web
  7. from utils.DataBaseConfig import *
  8. from utils.UrlConfig import *
  9. from utils.LogConfig import *
  10. class AiAutoCreative(tornado.web.RequestHandler):
  11. """
  12. 定时任务调用,上新素材自动创建
  13. """
  14. def initialize(self, logger):
  15. self.logger = logger
  16. def post(self):
  17. data = self.request.body
  18. data = str(data, 'utf8')
  19. data = json.loads(data, encoding='utf8')
  20. self.logger.info("*************************************** NEW REQUEST ***************************************")
  21. self.logger.info("raw data from request is %s" % data)
  22. account_id = data.get('account_id')
  23. campaign_id = data.get('campaign_id')
  24. try:
  25. inst = GetRequestData(account_id, campaign_id)
  26. if inst.data is not None:
  27. request = requests.post(ai_strategy_request_url, inst.data)
  28. self.logger.info("ai策略的返回信息:%s" % request.text)
  29. self.write(request.text)
  30. self.flush()
  31. else:
  32. self.write(json.dumps({"message": "没有获取到视频新,不发送ai策略请求!"}))
  33. self.flush()
  34. except Exception:
  35. self.logger.error(traceback.format_exc())
  36. self.write(json.dumps(traceback.format_exc()))
  37. self.flush()
  38. class GetRequestData(object):
  39. def __init__(self, account_id, campaign_id):
  40. self.video = None
  41. self.account_id = account_id
  42. self.campaign_id = campaign_id
  43. self.data = None
  44. self.campaign_name = None
  45. self.group_name = None
  46. self.get_video_info()
  47. self.get_campaign_and_group_name_rule()
  48. self.get_request_data()
  49. def get_video_info(self):
  50. video_request_data = {"accountId": self.account_id}
  51. request = requests.post(get_new_video_url,
  52. headers=headers,
  53. data=json.JSONEncoder().encode(video_request_data))
  54. self.video = request
  55. def get_campaign_and_group_name_rule(self):
  56. if self.video['code'] == 0:
  57. sql = """
  58. select campaign_name, unit_name
  59. from ctop_ai_kuaishou_advertiser_strategy
  60. where account_id = %d
  61. and status = 1
  62. limit 1
  63. """ % self.account_id
  64. df = pd.read_sql(sql, engine)
  65. self.campaign_name = df['campaign_name'].values[0]
  66. self.group_name = df['unit_name'].values[0]
  67. def get_request_data(self):
  68. if self.video['code'] == 0:
  69. self.data = {
  70. "video": self.video['data'],
  71. "operation_type": 1,
  72. "account_id": self.account_id,
  73. "ai_strategy_remark": "自动上新",
  74. "campaign_info":
  75. {
  76. "campaign_id": self.campaign_id,
  77. "campaign_name": self.campaign_name.replace('自定义', '上新')
  78. + str(datetime.datetime.now())
  79. },
  80. 'group_info':
  81. {
  82. 'group_name': self.group_name.replace('自定义', '上新')
  83. + str(datetime.datetime.now()),
  84. 'begin_time': str(datetime.date.today())
  85. },
  86. 'creative_info':
  87. {
  88. 'is_sticky': 0
  89. }
  90. }