bottom_videos.py 2.2 KB

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