import datetime import traceback from config import set_config from log import Log from utils import request_post, RedisHelper config_, _ = set_config() log_ = Log() redis_helper = RedisHelper() def get_limit_videos(now_date): """获取限流视频并存入redis""" # 通过接口获取需要限流的视频 data = request_post(request_url=config_.GET_VIDEO_LIMIT_LIST_URL) if data is None: return limit_data = data.get('data', []) log_.info(f"limit_data = {limit_data}") video_limit_list = [] # [(videoId, maxDistributeCount), ...] video_id_list = [] for item in limit_data: video_id = int(item['videoId']) max_distribute_count = int(item['maxDistributeCount']) video_id_list.append(video_id) video_limit_list.append((video_id, max_distribute_count)) if len(video_limit_list) == 0: return # 视频对应最大分发数 存入redis redis_helper.set_data_to_redis(key_name=config_.KEY_NAME_PREFIX_LIMIT_VIDEOS, value=str(video_limit_list)) # 限流视频videoId 存入当日redis key redis_helper.add_data_with_set( key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_SET}{datetime.datetime.strftime(now_date, '%Y%m%d')}", values=tuple(video_id_list), expire_time=24*3600 ) def del_yesterday_limit_videos_record(now_date): """清除前一天的视频分发数记录""" dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d') # 获取前一天限流视频 video_list = redis_helper.get_data_from_set(key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_SET}{dt}") if video_list is None: return for video_id in video_list: redis_helper.del_keys(key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT}{video_id}") if __name__ == '__main__': try: now_date = datetime.datetime.today() now_h = datetime.datetime.now().hour log_.info(f"now_date = {now_date}, now_h = {now_h}") if now_h == 0: # 0点清除前一天限流视频分发记录 del_yesterday_limit_videos_record(now_date=now_date) log_.info("成功清除前一天限流视频分发记录!") # 获取最新限流视频 get_limit_videos(now_date=now_date) log_.info("成功获取最新限流视频!") except Exception as e: log_.error("限流视频更新失败!") log_.error(traceback.format_exc())