|
@@ -0,0 +1,82 @@
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+import datetime
|
|
|
+from datetime import datetime as dt
|
|
|
+from threading import Timer
|
|
|
+from log import Log
|
|
|
+from db_helper import RedisHelper
|
|
|
+from config import set_config
|
|
|
+
|
|
|
+log_ = Log()
|
|
|
+config_, env = set_config()
|
|
|
+
|
|
|
+
|
|
|
+def app_rank_op(now_date, now_h):
|
|
|
+ """
|
|
|
+ 票圈视频App推荐列表小时级更新,小时级数据由运营提供
|
|
|
+ """
|
|
|
+ log_.info("now date: {}".format(now_date))
|
|
|
+
|
|
|
+
|
|
|
+ redis_helper = RedisHelper()
|
|
|
+ key_name = get_redis_key_date(now_date=now_date)
|
|
|
+ initial_data = redis_helper.get_data_zset_with_index(key_name=key_name, start=0, end=-1, with_scores=True)
|
|
|
+
|
|
|
+
|
|
|
+ op_key_name = f"{config_.APP_OP_VIDEOS_KEY_NAME_PREFIX}{dt.strftime(now_date, '%Y%m%d')}.{now_h}"
|
|
|
+ op_data = redis_helper.get_data_zset_with_index(key_name=op_key_name, start=0, end=-1, with_scores=True)
|
|
|
+ op_video_ids = [item[0] for item in op_data]
|
|
|
+
|
|
|
+
|
|
|
+ final_data = dict()
|
|
|
+ for i, video_id in enumerate(op_video_ids):
|
|
|
+ score = 1000 + i + 1
|
|
|
+ final_data[video_id] = score
|
|
|
+
|
|
|
+
|
|
|
+ for video_id, score in initial_data:
|
|
|
+ if video_id not in op_video_ids:
|
|
|
+ final_data[video_id] = score
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ final_key_name = f"{config_.APP_FINAL_RECALL_KEY_NAME_PREFIX}{dt.strftime(now_date, '%Y%m%d')}.{now_h}"
|
|
|
+ redis_helper.add_data_with_zset(key_name=final_key_name, data=final_data, expire_time=24*3600)
|
|
|
+
|
|
|
+
|
|
|
+def get_redis_key_date(now_date):
|
|
|
+
|
|
|
+ redis_helper = RedisHelper()
|
|
|
+ now_dt = dt.strftime(now_date, '%Y%m%d')
|
|
|
+ key_name = f'{config_.RECALL_KEY_NAME_PREFIX_APP}{now_dt}'
|
|
|
+ if not redis_helper.key_exists(key_name=key_name):
|
|
|
+ pre_dt = dt.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
|
|
|
+ key_name = f'{config_.RECALL_KEY_NAME_PREFIX_APP}{pre_dt}'
|
|
|
+ return key_name
|
|
|
+
|
|
|
+
|
|
|
+def app_timer_check():
|
|
|
+ now_date = dt.today()
|
|
|
+ now_h = dt.now().hour
|
|
|
+
|
|
|
+ op_key_name = f"{config_.APP_OP_VIDEOS_KEY_NAME_PREFIX}{dt.strftime(now_date, '%Y%m%d')}.{now_h}"
|
|
|
+ redis_helper = RedisHelper()
|
|
|
+ if redis_helper.key_exists(op_key_name):
|
|
|
+
|
|
|
+ app_rank_op(now_date=now_date, now_h=now_h)
|
|
|
+ else:
|
|
|
+
|
|
|
+ Timer(60, app_timer_check).start()
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ app_timer_check()
|