ai_auto_creative__handler.py 3.7 KB

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