get_video_limit_list.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import datetime
  2. import traceback
  3. from my_config import set_config
  4. from log import Log
  5. from my_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. if data is None:
  14. return
  15. limit_data = data.get('data', [])
  16. log_.info(f"limit_data = {limit_data}")
  17. video_limit_list = [] # [(videoId, maxDistributeCount), ...]
  18. video_id_list = []
  19. for item in limit_data:
  20. video_id = int(item['videoId'])
  21. max_distribute_count = int(item['maxDistributeCount'])
  22. video_id_list.append(video_id)
  23. video_limit_list.append((video_id, max_distribute_count))
  24. if len(video_limit_list) == 0:
  25. return
  26. # 视频对应最大分发数 存入redis
  27. redis_helper.set_data_to_redis(key_name=config_.KEY_NAME_PREFIX_LIMIT_VIDEOS, value=str(video_limit_list))
  28. # 限流视频videoId 存入当日redis key
  29. redis_helper.add_data_with_set(
  30. key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_SET}{datetime.datetime.strftime(now_date, '%Y%m%d')}",
  31. values=tuple(video_id_list),
  32. expire_time=24*3600
  33. )
  34. def del_yesterday_limit_videos_record(now_date):
  35. """清除前一天的视频分发数记录"""
  36. dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
  37. # 获取前一天限流视频
  38. video_list = redis_helper.get_data_from_set(key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_SET}{dt}")
  39. if video_list is None:
  40. return
  41. for video_id in video_list:
  42. redis_helper.del_keys(key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT}{video_id}")
  43. if __name__ == '__main__':
  44. try:
  45. now_date = datetime.datetime.today()
  46. now_h = datetime.datetime.now().hour
  47. log_.info(f"now_date = {now_date}, now_h = {now_h}")
  48. if now_h == 0:
  49. # 0点清除前一天限流视频分发记录
  50. del_yesterday_limit_videos_record(now_date=now_date)
  51. log_.info("成功清除前一天限流视频分发记录!")
  52. # 获取最新限流视频
  53. get_limit_videos(now_date=now_date)
  54. log_.info("成功获取最新限流视频!")
  55. except Exception as e:
  56. log_.error("限流视频更新失败!")
  57. log_.error(traceback.format_exc())