bottom_videos.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import datetime
  2. import traceback
  3. import os
  4. import json
  5. from utils import execute_sql_from_odps, request_post
  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. sql = "SELECT id " \
  17. ",play_count_total " \
  18. "FROM videoods.wx_video_test " \
  19. "WHERE transcode_status = 3 " \
  20. "AND STATUS = 1 " \
  21. "AND recommend_status IN ( - 6, 1) " \
  22. "ORDER BY play_count_total DESC " \
  23. "LIMIT 1000" \
  24. ";"
  25. records = execute_sql_from_odps(project='videoods', sql=sql)
  26. # 视频按照总播放量写入redis
  27. video_id_list = []
  28. videos = {}
  29. with records.open_reader() as reader:
  30. for record in reader:
  31. video_id = int(record['id'])
  32. video_id_list.append(video_id)
  33. videos[video_id] = record['play_count_total']
  34. # print(videos)
  35. redis_helper = RedisHelper()
  36. redis_helper.add_data_with_zset(key_name=config_.BOTTOM_KEY_NAME, data=videos)
  37. # 与原有兜底视频排序,保留top1000
  38. redis_helper.remove_by_rank_from_zset(key_name=config_.BOTTOM_KEY_NAME, start=config_.BOTTOM_NUM, stop=-1)
  39. # 移除bottom key的过期时间,将其转换为永久状态
  40. redis_helper.persist_key(key_name=config_.BOTTOM_KEY_NAME)
  41. log_.info('{} update bottom videos success! num = {}'.format(now_date, len(videos)))
  42. # 获取今日兜底视频的json,并存入redis
  43. video_json_list = []
  44. for i in range(0, len(video_id_list) // 10):
  45. video_json = get_video_info_json(video_ids=video_id_list[i * 10:(i + 1) * 10])
  46. if video_json is not None:
  47. print(len(video_json))
  48. video_json_list.extend(video_json)
  49. # 写入redis,先删除key,再重新写入
  50. redis_helper.del_keys(config_.BOTTOM_JSON_KEY_NAME)
  51. redis_helper.add_data_with_set(key_name=config_.BOTTOM_JSON_KEY_NAME, values=video_json_list)
  52. # 移除过期时间,将其转换为永久状态
  53. redis_helper.persist_key(key_name=config_.BOTTOM_JSON_KEY_NAME)
  54. log_.info('{} update bottom videos info json success!, video nums = {}'.format(now_date, len(video_json_list)))
  55. except Exception as e:
  56. log_.error(traceback.format_exc())
  57. def get_video_info_json(video_ids):
  58. """
  59. 获取视频对应json
  60. :param video_ids: type-list [int, int, ...]
  61. :return: json_data_list
  62. """
  63. request_data = {
  64. "appType": 4,
  65. "platform": "android",
  66. "versionCode": 295,
  67. "pageSize": 10,
  68. "machineCode": "weixin_openid_otjoB5WWWmkRjpMzkV5ltZ3osg3A",
  69. "uid": 6281917,
  70. "videoIds": video_ids
  71. }
  72. res = request_post(request_url=config_.BOTTOM_JSON_URL, request_data=request_data)
  73. if res is None:
  74. return None
  75. if res['code'] != 0:
  76. log_.info('获取视频json失败!')
  77. return None
  78. json_data_list = [json.dumps(item) for item in res['data']]
  79. return json_data_list
  80. if __name__ == '__main__':
  81. update_bottom_videos()
  82. # 将日志上传到oss
  83. # log_cmd = "ossutil cp -r -f {} oss://{}/{}".format(log_.logname, config_.BUCKET_NAME,
  84. # config_.OSS_FOLDER_LOGS + 'bottom_videos/')
  85. # os.system(log_cmd)