ad_thompson_param_update.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. view_pv_sum = 0
  15. click_pv_sum = 0
  16. # 获取广告ad_idea_id对应的曝光次数和点击次数
  17. odps = ODPS(
  18. access_id=config_.ODPS_CONFIG['ACCESSID'],
  19. secret_access_key=config_.ODPS_CONFIG['ACCESSKEY'],
  20. project=project,
  21. endpoint=config_.ODPS_CONFIG['ENDPOINT'],
  22. )
  23. records = odps.read_table(name=table)
  24. ad_idea_data = []
  25. for item in records:
  26. ad_idea_id = item['ad_idea_id']
  27. view_pv = item['view_pv']
  28. click_pv = item['click_pv']
  29. if ad_idea_id is None or ad_idea_id == '':
  30. continue
  31. try:
  32. view_pv = int(view_pv)
  33. except:
  34. view_pv = 0
  35. try:
  36. click_pv = int(click_pv)
  37. except:
  38. click_pv = 0
  39. if view_pv < click_pv:
  40. continue
  41. param_alpha = click_pv
  42. param_beta = view_pv - click_pv
  43. ad_idea_data.append({'ad_idea_id': ad_idea_id, 'param': [param_alpha, param_beta]})
  44. view_pv_sum += view_pv
  45. click_pv_sum += click_pv
  46. log_.info(f"ad_idea_data count: {len(ad_idea_data)}")
  47. log_.info(f"ad_idea_data: {ad_idea_data}")
  48. # 更新redis
  49. redis_helper = RedisHelper()
  50. i = 0
  51. for ad_idea in ad_idea_data:
  52. try:
  53. key_name = f"{config_.THOMPSON_PARAM_KEY_PREFIX}{ad_idea['ad_idea_id']}"
  54. value = json.dumps(ad_idea['param'])
  55. redis_helper.set_data_to_redis(key_name=key_name, value=value, expire_time=24 * 3600)
  56. i += 1
  57. except:
  58. continue
  59. # 更新均值
  60. key_name = f"{config_.THOMPSON_PARAM_KEY_PREFIX}-1"
  61. value = json.dumps([int(click_pv_sum * 1.2), view_pv_sum])
  62. redis_helper.set_data_to_redis(key_name=key_name, value=value, expire_time=24 * 3600)
  63. i += 1
  64. log_.info(f"to redis count: {i}")
  65. log_.info(f"mean: {value}")
  66. except Exception as e:
  67. log_.error(f"广告Thompson参数更新失败, exception: {e}, traceback: {traceback.format_exc()}")
  68. send_msg_to_feishu(
  69. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  70. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  71. msg_text=f"rov-offline{config_.ENV_TEXT} - 广告Thompson参数更新失败\n"
  72. f"exception: {e}\n"
  73. f"traceback: {traceback.format_exc()}"
  74. )
  75. if __name__ == '__main__':
  76. project = 'loghubods'
  77. table = 'ad_own_data_vc'
  78. now_date = datetime.datetime.today()
  79. dt = datetime.datetime.strftime(now_date, '%Y%m%d %H:%M:%S')
  80. log_.info(f"dt: {dt}")
  81. start_time = time.time()
  82. main(project=project, table=table)
  83. log_.info(f"excuteTime: {(time.time() - start_time) * 1000}ms")