123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import datetime
- import traceback
- import os
- import json
- from utils import execute_sql_from_odps, request_post
- from db_helper import RedisHelper
- from config import set_config
- from log import Log
- config_ = set_config()
- log_ = Log()
- def update_bottom_videos():
- """更新兜底视频"""
- try:
- # 获取总播放量top1000的视频
- now_date = datetime.datetime.today()
- sql = "SELECT id " \
- ",play_count_total " \
- "FROM videoods.wx_video_test " \
- "WHERE transcode_status = 3 " \
- "AND STATUS = 1 " \
- "AND recommend_status IN ( - 6, 1) " \
- "ORDER BY play_count_total DESC " \
- "LIMIT 1000" \
- ";"
- records = execute_sql_from_odps(project='videoods', sql=sql)
- # 视频按照总播放量写入redis
- video_id_list = []
- videos = {}
- with records.open_reader() as reader:
- for record in reader:
- video_id = int(record['id'])
- video_id_list.append(video_id)
- videos[video_id] = record['play_count_total']
- # print(videos)
- redis_helper = RedisHelper()
- redis_helper.add_data_with_zset(key_name=config_.BOTTOM_KEY_NAME, data=videos)
- # 与原有兜底视频排序,保留top1000
- redis_helper.remove_by_rank_from_zset(key_name=config_.BOTTOM_KEY_NAME, start=config_.BOTTOM_NUM, stop=-1)
- # 移除bottom key的过期时间,将其转换为永久状态
- redis_helper.persist_key(key_name=config_.BOTTOM_KEY_NAME)
- log_.info('{} update bottom videos success! num = {}'.format(now_date, len(videos)))
- # 获取今日兜底视频的json,并存入redis
- video_json_list = []
- for i in range(0, len(video_id_list) // 10):
- video_json = get_video_info_json(video_ids=video_id_list[i * 10:(i + 1) * 10])
- if video_json is not None:
- print(len(video_json))
- video_json_list.extend(video_json)
- # 写入redis,先删除key,再重新写入
- redis_helper.del_keys(config_.BOTTOM_JSON_KEY_NAME)
- redis_helper.add_data_with_set(key_name=config_.BOTTOM_JSON_KEY_NAME, values=video_json_list)
- # 移除过期时间,将其转换为永久状态
- redis_helper.persist_key(key_name=config_.BOTTOM_JSON_KEY_NAME)
- log_.info('{} update bottom videos info json success!, video nums = {}'.format(now_date, len(video_json_list)))
- except Exception as e:
- log_.error(traceback.format_exc())
- def get_video_info_json(video_ids):
- """
- 获取视频对应json
- :param video_ids: type-list [int, int, ...]
- :return: json_data_list
- """
- request_data = {
- "appType": 4,
- "platform": "android",
- "versionCode": 295,
- "pageSize": 10,
- "machineCode": "weixin_openid_otjoB5WWWmkRjpMzkV5ltZ3osg3A",
- "uid": 6281917,
- "videoIds": video_ids
- }
- res = request_post(request_url=config_.BOTTOM_JSON_URL, request_data=request_data)
- if res is None:
- return None
- if res['code'] != 0:
- log_.info('获取视频json失败!')
- return None
- json_data_list = [json.dumps(item) for item in res['data']]
- return json_data_list
- if __name__ == '__main__':
- update_bottom_videos()
- # 将日志上传到oss
- # log_cmd = "ossutil cp -r -f {} oss://{}/{}".format(log_.logname, config_.BUCKET_NAME,
- # config_.OSS_FOLDER_LOGS + 'bottom_videos/')
- # os.system(log_cmd)
|