laohaokan_recommend_update.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import datetime
  2. from db_helper import RedisHelper
  3. from config import set_config
  4. from log import Log
  5. config_, env = set_config()
  6. log_ = Log()
  7. initial_param = {'data': 'data1', 'rule': 'rule4'}
  8. redis_helper = RedisHelper()
  9. def get_religion_videos(now_date):
  10. """获取宗教视频列表"""
  11. religion_key_name = f"{config_.KEY_NAME_PREFIX_RELIGION_VIDEOS}{datetime.datetime.strftime(now_date, '%Y%m%d')}"
  12. if not redis_helper.key_exists(religion_key_name):
  13. redis_dt = datetime.datetime.strftime((now_date - datetime.timedelta(days=1)), '%Y%m%d')
  14. religion_key_name = f"{config_.KEY_NAME_PREFIX_RELIGION_VIDEOS}{redis_dt}"
  15. religion_videos = redis_helper.get_all_data_from_zset(key_name=religion_key_name, desc=True, with_scores=True)
  16. if religion_videos is None:
  17. return []
  18. return religion_videos
  19. def merge_process(initial_key_name, new_key_name, now_videos, religion_video_id_list):
  20. initial_data = redis_helper.get_all_data_from_zset(initial_key_name)
  21. if initial_data is None or len(initial_data) == 0:
  22. return now_videos, religion_video_id_list
  23. initial_video_ids = [int(video_id) for video_id, _ in initial_data]
  24. initial_video_ids = [video_id for video_id in initial_video_ids if video_id not in now_videos]
  25. religion_video_id_list = [video_id for video_id in religion_video_id_list if video_id not in initial_video_ids]
  26. if len(religion_video_id_list) == 0:
  27. new_video_ids = initial_video_ids
  28. else:
  29. new_video_ids = []
  30. for i, video_id in enumerate(initial_video_ids):
  31. new_video_ids.append(video_id)
  32. now_videos.append(video_id)
  33. if i % 2 == 1 and len(religion_video_id_list) > 0:
  34. new_video_ids.append(religion_video_id_list[0])
  35. now_videos.append(religion_video_id_list[0])
  36. religion_video_id_list = religion_video_id_list[1:]
  37. # 按照排序给定分数
  38. new_result = {}
  39. step = 100 / (len(new_video_ids) * 2)
  40. for i, video_id in enumerate(new_video_ids):
  41. score = 100 - i * step
  42. new_result[int(video_id)] = score
  43. # 写入新的key中
  44. redis_helper.add_data_with_zset(key_name=new_key_name, data=new_result, expire_time=23 * 3600)
  45. return now_videos, religion_video_id_list
  46. def merge_with_region(now_date, now_h, region, religion_video_id_list):
  47. initial_data_key = initial_param.get('data')
  48. initial_rule_key = initial_param.get('rule')
  49. new_data_key = new_param.get('data')
  50. new_rule_key = new_param.get('rule')
  51. now_videos = []
  52. # 地域小时级数据合并
  53. region_h_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H}{region}:{initial_data_key}:{initial_rule_key}:" \
  54. f"{datetime.datetime.strftime(now_date, '%Y%m%d')}:{now_h}"
  55. new_region_h_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H}{region}:{new_data_key}:{new_rule_key}:" \
  56. f"{datetime.datetime.strftime(now_date, '%Y%m%d')}:{now_h}"
  57. now_videos, religion_video_id_list = merge_process(initial_key_name=region_h_key_name,
  58. new_key_name=new_region_h_key_name,
  59. now_videos=now_videos,
  60. religion_video_id_list=religion_video_id_list)
  61. # 地域24h数据合并
  62. region_24h_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H}{region}:{initial_data_key}:" \
  63. f"{initial_rule_key}:{datetime.datetime.strftime(now_date, '%Y%m%d')}:{now_h}"
  64. new_region_24h_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H}{region}:{new_data_key}:" \
  65. f"{new_rule_key}:{datetime.datetime.strftime(now_date, '%Y%m%d')}:{now_h}"
  66. now_videos, religion_video_id_list = merge_process(initial_key_name=region_24h_key_name,
  67. new_key_name=new_region_24h_key_name,
  68. now_videos=now_videos,
  69. religion_video_id_list=religion_video_id_list)
  70. # 24h筛选数据合并
  71. dup2_24h_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H}{region}:{initial_data_key}:" \
  72. f"{initial_rule_key}:{datetime.datetime.strftime(now_date, '%Y%m%d')}:{now_h}"
  73. new_dup2_24h_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H}{region}:{new_data_key}:" \
  74. f"{new_rule_key}:{datetime.datetime.strftime(now_date, '%Y%m%d')}:{now_h}"
  75. now_videos, religion_video_id_list = merge_process(initial_key_name=dup2_24h_key_name,
  76. new_key_name=new_dup2_24h_key_name,
  77. now_videos=now_videos,
  78. religion_video_id_list=religion_video_id_list)
  79. # 24h筛选后剩余数据合并
  80. dup3_24h_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H}{region}:{initial_data_key}:" \
  81. f"{initial_rule_key}:{datetime.datetime.strftime(now_date, '%Y%m%d')}:{now_h}"
  82. new_dup3_24h_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H}{region}:{new_data_key}:" \
  83. f"{new_rule_key}:{datetime.datetime.strftime(now_date, '%Y%m%d')}:{now_h}"
  84. now_videos, religion_video_id_list = merge_process(initial_key_name=dup3_24h_key_name,
  85. new_key_name=new_dup3_24h_key_name,
  86. now_videos=now_videos,
  87. religion_video_id_list=religion_video_id_list)
  88. # region_h_data = redis_helper.get_all_data_from_zset(region_h_key_name)
  89. # region_h_video_ids = [int(video_id) for video_id, _ in region_h_data]
  90. # religion_video_id_list = [video_id for video_id in religion_video_id_list if video_id not in region_h_video_ids]
  91. # new_region_h_video_ids = []
  92. # for i, video_id in enumerate(region_h_video_ids):
  93. # new_region_h_video_ids.append(video_id)
  94. # if i % 2 == 1 and len(religion_video_id_list) > 0:
  95. # new_region_h_video_ids.append(religion_video_id_list[0])
  96. # religion_video_id_list = religion_video_id_list[1:]
  97. # # 按照排序给定分数
  98. # new_region_h_result = {}
  99. # step = 100 / (len(new_region_h_video_ids) * 2)
  100. # for i, video_id in enumerate(new_region_h_video_ids):
  101. # score = 100 - i * step
  102. # new_region_h_result[int(video_id)] = score
  103. def merge_videos(now_date, now_h):
  104. """将宗教视频插入到默认视频列表中"""
  105. # 获取宗教视频列表
  106. religion_videos = get_religion_videos(now_date=now_date)
  107. religion_video_id_list = [int(video_id) for video_id, _ in religion_videos]