bottom_videos.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # coding:utf-8
  2. import datetime
  3. import traceback
  4. import os
  5. from utils import execute_sql_from_odps
  6. from db_helper import RedisHelper
  7. from config import set_config
  8. from log import Log
  9. config_ = set_config()
  10. log_ = Log()
  11. def update_bottom_videos():
  12. """更新兜底视频"""
  13. try:
  14. # 获取昨日播放量top1000的视频
  15. now_date = datetime.datetime.today()
  16. delta_date = now_date - datetime.timedelta(days=1)
  17. sql = "SELECT video_playcount.videoid " \
  18. ",video_playcount.play_count " \
  19. "FROM ( " \
  20. "SELECT videoid " \
  21. ",COUNT(*) play_count " \
  22. "FROM loghubods.video_action_log_applet " \
  23. "WHERE dt = {} " \
  24. "AND business = 'videoPlay' " \
  25. "GROUP BY videoid " \
  26. ") video_playcount INNER " \
  27. "JOIN ( " \
  28. "SELECT id " \
  29. "FROM videoods.wx_video " \
  30. "WHERE transcode_status = 3 " \
  31. "AND status = 1 " \
  32. "AND recommend_status IN ( - 6, 1) " \
  33. ") video_status " \
  34. "ON video_playcount.videoid = video_status.id " \
  35. "ORDER BY video_playcount.play_count DESC " \
  36. "LIMIT 1000 " \
  37. ";".format(delta_date.strftime('%Y%m%d'))
  38. records = execute_sql_from_odps(project='loghubods', sql=sql)
  39. # 视频按照昨日播放量写入redis
  40. videos = {}
  41. with records.open_reader() as reader:
  42. for record in reader:
  43. video_id = record['videoid']
  44. videos[video_id] = record['play_count']
  45. redis_helper = RedisHelper()
  46. redis_helper.add_data_with_zset(key_name=config_.BOTTOM_KEY_NAME, data=videos)
  47. # 与原有兜底视频排序,保留top1000
  48. redis_helper.remove_by_rank_from_zset(key_name=config_.BOTTOM_KEY_NAME, start=config_.BOTTOM_NUM, stop=-1)
  49. # 移除bottom key的过期时间,将其转换为永久状态
  50. redis_helper.persist_key(key_name=config_.BOTTOM_KEY_NAME)
  51. log_.info('{} update bottom videos success!, video nums = {}'.format(now_date, len(videos)))
  52. except Exception as e:
  53. log_.error(traceback.format_exc())
  54. if __name__ == '__main__':
  55. update_bottom_videos()