ai_historical_high_quality_material_handler.py 3.8 KB

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