ad_thompson_param_update.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import traceback
  2. import datetime
  3. import json
  4. import time
  5. from odps import ODPS
  6. from db_helper import RedisHelper
  7. from utils import send_msg_to_feishu
  8. from config import set_config
  9. from log import Log
  10. config_ = set_config()
  11. log_ = Log()
  12. def main(project, table):
  13. try:
  14. # 获取广告ad_idea_id对应的曝光次数和点击次数
  15. odps = ODPS(
  16. access_id=config_.ODPS_CONFIG['ACCESSID'],
  17. secret_access_key=config_.ODPS_CONFIG['ACCESSKEY'],
  18. project=project,
  19. endpoint=config_.ODPS_CONFIG['ENDPOINT'],
  20. )
  21. records = odps.read_table(name=table)
  22. ad_idea_data = []
  23. for item in records:
  24. ad_idea_id = item['ad_idea_id']
  25. view_pv = item['view_pv']
  26. click_pv = item['click_pv']
  27. if ad_idea_id is None or ad_idea_id == '':
  28. continue
  29. try:
  30. view_pv = int(view_pv)
  31. except:
  32. view_pv = 0
  33. try:
  34. click_pv = int(click_pv)
  35. except:
  36. click_pv = 0
  37. if view_pv < click_pv:
  38. continue
  39. param_alpha = click_pv
  40. param_beta = view_pv - click_pv
  41. ad_idea_data.append({'ad_idea_id': ad_idea_id, 'param': [param_alpha, param_beta]})
  42. log_.info(f"ad_idea_data count: {len(ad_idea_data)}")
  43. log_.info(f"ad_idea_data: {ad_idea_data}")
  44. # 更新redis
  45. redis_helper = RedisHelper()
  46. i = 0
  47. for ad_idea in ad_idea_data:
  48. try:
  49. key_name = f"{config_.THOMPSON_PARAM_KEY_PREFIX}{ad_idea['ad_idea_id']}"
  50. value = json.dumps(ad_idea['param'])
  51. redis_helper.set_data_to_redis(key_name=key_name, value=value, expire_time=24 * 3600)
  52. i += 1
  53. except:
  54. continue
  55. log_.info(f"to redis count: {i}")
  56. except Exception as e:
  57. log_.error(f"地域分组小时级数据更新失败, exception: {e}, traceback: {traceback.format_exc()}")
  58. send_msg_to_feishu(
  59. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  60. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  61. msg_text=f"rov-offline{config_.ENV_TEXT} - 广告Thompson参数更新失败\n"
  62. f"exception: {e}\n"
  63. f"traceback: {traceback.format_exc()}"
  64. )
  65. if __name__ == '__main__':
  66. project = ''
  67. table = ''
  68. now_date = datetime.datetime.today()
  69. dt = datetime.datetime.strftime(now_date, '%Y%m%d %H:%M:%S')
  70. log_.info(f"dt: {dt}")
  71. start_time = time.time()
  72. main(project=project, table=table)
  73. log_.info(f"excuteTime: {(time.time() - start_time) * 1000}ms")