Parcourir la source

add get_video_info_json

liqian il y a 3 ans
Parent
commit
a68f90b03c
2 fichiers modifiés avec 59 ajouts et 4 suppressions
  1. 47 2
      bottom_videos.py
  2. 12 2
      config.py

+ 47 - 2
bottom_videos.py

@@ -1,9 +1,10 @@
 # coding:utf-8
 import datetime
+import json
 import traceback
 import os
 
-from utils import execute_sql_from_odps
+from utils import execute_sql_from_odps, request_post
 from db_helper import RedisHelper
 from config import set_config
 from log import Log
@@ -46,13 +47,16 @@ def update_bottom_videos():
         records = execute_sql_from_odps(project='loghubods', sql=sql)
 
         # 视频按照昨日播放量写入redis
+        video_id_list = []
         videos = {}
         with records.open_reader() as reader:
             for record in reader:
-                video_id = record['videoid']
+                video_id = int(record['videoid'])
+                video_id_list.append(video_id)
                 videos[video_id] = record['play_count']
 
         redis_helper = RedisHelper()
+        redis_helper.del_keys(key_name=config_.BOTTOM_KEY_NAME)
         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)
@@ -60,9 +64,50 @@ def update_bottom_videos():
         redis_helper.persist_key(key_name=config_.BOTTOM_KEY_NAME)
 
         log_.info('{} update bottom videos success!, video nums = {}'.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()

+ 12 - 2
config.py

@@ -50,6 +50,8 @@ class BaseConfig(object):
     BOTTOM_KEY_NAME = 'com.weiqu.video.bottom'
     # 兜底视频数量
     BOTTOM_NUM = 1000
+    # 首页兜底视频json存储 redis-key
+    BOTTOM_JSON_KEY_NAME = 'com.weiqu.video.homepage.bottom.info.json.item'
 
     # 修改ROV的视频 redis key
     UPDATE_ROV_KEY_NAME = 'com.weiqu.video.update.rov.item.score'
@@ -90,6 +92,8 @@ class DevelopmentConfig(BaseConfig):
     NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore'
     # 获取置顶视频列表接口地址
     TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList'
+    # 获取首页兜底视频json接口地址
+    BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list'
 
     # logs 上传oss 目标Bucket指定目录
     OSS_FOLDER_LOGS = 'rov-offline/dev/logs/'
@@ -126,6 +130,8 @@ class TestConfig(BaseConfig):
     NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore'
     # 获取置顶视频列表接口地址
     TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList'
+    # 获取首页兜底视频json接口地址
+    BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list'
 
     # logs 上传oss 目标Bucket指定目录
     OSS_FOLDER_LOGS = 'rov-offline/test/logs/'
@@ -162,6 +168,8 @@ class PreProductionConfig(BaseConfig):
     NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore'
     # 获取置顶视频列表接口地址
     TOP_VIDEO_LIST_URL = 'http://speedpre.wx.com/longvideoapi/openapi/recommend/topVideoList'
+    # 获取首页兜底视频json接口地址
+    BOTTOM_JSON_URL = 'http://speedpre.wx.com/longvideoapi/openapi/video/distribute/structure/video/list'
 
     # logs 上传oss 目标Bucket指定目录
     OSS_FOLDER_LOGS = 'rov-offline/pre/logs/'
@@ -198,6 +206,8 @@ class ProductionConfig(BaseConfig):
     NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://longvideoapi-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore'
     # 获取置顶视频列表接口地址
     TOP_VIDEO_LIST_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/topVideoList'
+    # 获取首页兜底视频json接口地址
+    BOTTOM_JSON_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/video/distribute/structure/video/list'
 
     # logs 上传oss 目标Bucket指定目录
     OSS_FOLDER_LOGS = 'rov-offline/pro/logs/'
@@ -207,6 +217,6 @@ class ProductionConfig(BaseConfig):
 
 def set_config():
     # return DevelopmentConfig()
-    # return TestConfig()
+    return TestConfig()
     # return PreProductionConfig()
-    return ProductionConfig()
+    # return ProductionConfig()