ai_historical_missing_material_handler.py 3.7 KB

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