get_video_limit_list.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import datetime
  2. import traceback
  3. from config import set_config
  4. from log import Log
  5. from utils import request_post, RedisHelper
  6. config_, _ = set_config()
  7. log_ = Log()
  8. redis_helper = RedisHelper()
  9. def get_limit_videos(now_date):
  10. """获取限流视频并存入redis"""
  11. # 通过接口获取需要限流的视频
  12. data = request_post(request_url=config_.GET_VIDEO_LIMIT_LIST_URL)
  13. video_limit_list = [] # [(videoId, maxDistributeCount), ...]
  14. video_id_list = []
  15. # 视频对应最大分发数 存入redis
  16. redis_helper.set_data_to_redis(key_name=config_.KEY_NAME_PREFIX_LIMIT_VIDEOS, value=video_limit_list)
  17. # 限流视频videoId 存入当日redis key
  18. redis_helper.add_data_with_set(
  19. key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_SET}{datetime.datetime.strftime(now_date, '%Y%m%d')}",
  20. values=tuple(video_id_list),
  21. expire_time=2*24*3600
  22. )
  23. def del_yesterday_limit_videos_record(now_date):
  24. """清除前一天的视频分发数记录"""
  25. dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
  26. # 获取前一天限流视频
  27. video_list = redis_helper.get_data_from_set(key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_SET}{dt}")
  28. if video_list is None:
  29. return
  30. for video_id in video_list:
  31. redis_helper.del_keys(key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT}{video_id}")
  32. if __name__ == '__main__':
  33. try:
  34. now_date = datetime.datetime.today()
  35. now_h = datetime.datetime.now().hour
  36. log_.info(f"now_date = {now_date}, now_h = {now_h}")
  37. if now_h == 0:
  38. # 0点清除前一天限流视频分发记录
  39. del_yesterday_limit_videos_record(now_date=now_date)
  40. log_.info("成功清除前一天限流视频分发记录!")
  41. # 获取最新限流视频
  42. get_limit_videos(now_date=now_date)
  43. log_.info("成功获取最新限流视频!")
  44. except Exception as e:
  45. log_.error("限流视频更新失败!")
  46. log_.error(traceback.format_exc())