Browse Source

add get video w_h_rate

liqian 3 năm trước cách đây
mục cha
commit
37e27ceaba
4 tập tin đã thay đổi với 92 bổ sung26 xóa
  1. 23 0
      config.py
  2. 16 15
      db_helper.py
  3. 15 9
      rov_train.py
  4. 38 2
      utils.py

+ 23 - 0
config.py

@@ -57,6 +57,9 @@ class BaseConfig(object):
     # 生效中的置顶视频列表 redis key
     TOP_VIDEO_LIST_KEY_NAME = 'com.weiqu.video.top.item.score.area'
 
+    # width : height > 1 的视频列表 redis key, zset存储,value为videoId,score为w_h_rate
+    W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME = 'com.weiqu.video.w.h.rate.1.item'
+
 
 class DevelopmentConfig(BaseConfig):
     """开发环境配置"""
@@ -76,6 +79,16 @@ class DevelopmentConfig(BaseConfig):
         'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
     }
 
+    # 测试环境mysql地址
+    MYSQL_INFO = {
+        'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
+        'port': 3306,
+        'user': 'wx2016_longvideo',
+        'password': 'wx2016_longvideoP@assword1234',
+        'db': 'longvideo',
+        'charset': 'utf8'
+    }
+
     # Hologres视频状态存储表名
     VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat'
 
@@ -114,6 +127,16 @@ class TestConfig(BaseConfig):
         'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
     }
 
+    # 测试环境mysql地址
+    MYSQL_INFO = {
+        'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
+        'port': 3306,
+        'user': 'wx2016_longvideo',
+        'password': 'wx2016_longvideoP@assword1234',
+        'db': 'longvideo',
+        'charset': 'utf8'
+    }
+
     # Hologres视频状态存储表名
     VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat'
 

+ 16 - 15
db_helper.py

@@ -241,16 +241,16 @@ class HologresHelper(object):
 
 
 class MysqlHelper(object):
-    def __init__(self, mysql_info):
+    def __init__(self):
         """
         初始化mysql连接信息
-        :param mysql_info: mysql连接信息, 格式:dict, {'host': '', 'port': '', 'user':'', 'password': '', 'db': ''}
         """
-        self.host = mysql_info['host']
-        self.port = mysql_info['port']
-        self.user = mysql_info['user']
-        self.password = mysql_info['password']
-        self.db = mysql_info['db']
+        self.mysql_info = config_.MYSQL_INFO
+        # self.host = mysql_info['host']
+        # self.port = mysql_info['port']
+        # self.user = mysql_info['user']
+        # self.password = mysql_info['password']
+        # self.db = mysql_info['db']
 
     def get_data(self, sql):
         """
@@ -259,14 +259,15 @@ class MysqlHelper(object):
         :return: data
         """
         # 连接数据库
-        conn = pymysql.connect(
-            host=self.host,
-            port=self.port,
-            user=self.user,
-            password=self.password,
-            db=self.db,
-            charset='utf8'
-        )
+        conn = pymysql.connect(**self.mysql_info)
+        # conn = pymysql.connect(
+        #     host=self.host,
+        #     port=self.port,
+        #     user=self.user,
+        #     password=self.password,
+        #     db=self.db,
+        #     charset='utf8'
+        # )
         # 创建游标
         cursor = conn.cursor()
         try:

+ 15 - 9
rov_train.py

@@ -9,7 +9,8 @@ from sklearn.model_selection import train_test_split
 from sklearn.metrics import mean_absolute_error, r2_score, mean_absolute_percentage_error
 
 from config import set_config
-from utils import read_from_pickle, write_to_pickle, data_normalization, request_post, filter_video_status
+from utils import read_from_pickle, write_to_pickle, data_normalization, request_post, filter_video_status, \
+    get_video_w_h_rate
 from log import Log
 from db_helper import RedisHelper, MysqlHelper
 
@@ -174,15 +175,16 @@ def predict():
 def predict_test():
     """测试环境数据生成"""
     # 获取测试环境中最近发布的40000条视频
-    mysql_info = {
-        'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
-        'port': 3306,
-        'user': 'wx2016_longvideo',
-        'password': 'wx2016_longvideoP@assword1234',
-        'db': 'longvideo'
-    }
+    # mysql_info = {
+    #     'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
+    #     'port': 3306,
+    #     'user': 'wx2016_longvideo',
+    #     'password': 'wx2016_longvideoP@assword1234',
+    #     'db': 'longvideo'
+    # }
     sql = "SELECT id FROM wx_video ORDER BY id DESC LIMIT 40000;"
-    mysql_helper = MysqlHelper(mysql_info=mysql_info)
+    mysql_helper = MysqlHelper()
+    # mysql_helper = MysqlHelper(mysql_info=mysql_info)
     data = mysql_helper.get_data(sql=sql)
     video_ids = [video[0] for video in data]
     # 视频状态过滤
@@ -208,6 +210,10 @@ def predict_test():
     #     log_.info('notify backend success!')
     # else:
     #     log_.error('notify backend fail!')
+    # 更新视频的宽高比数据
+    if filtered_videos:
+        get_video_w_h_rate(video_ids=filtered_videos)
+        log_.info('update video w_h_rate to redis finished!')
 
 
 if __name__ == '__main__':

+ 38 - 2
utils.py

@@ -5,7 +5,7 @@ import json
 
 from odps import ODPS
 from config import set_config
-from db_helper import HologresHelper
+from db_helper import HologresHelper, MysqlHelper, RedisHelper
 
 config_ = set_config()
 
@@ -160,7 +160,43 @@ def send_msg_to_feishu(msg_text):
     print(response.text)
 
 
+def get_video_w_h_rate(video_ids):
+    """
+    获取横屏视频的宽高比,并存入redis中 (width/height>1)
+    :param video_ids: videoId列表 type-list
+    :return: None
+    """
+    # 获取数据
+    if len(video_ids) == 1:
+        sql = "SELECT id, width/height w_h_rate " \
+              "FROM longvideo.wx_video " \
+              "WHERE width/height > 1 " \
+              "AND id IN ({});".format(video_ids[0])
+    else:
+        sql = "SELECT id, width/height w_h_rate " \
+              "FROM longvideo.wx_video " \
+              "WHERE width/height > 1 " \
+              "AND id IN {};".format(tuple(video_ids))
+
+    mysql_helper = MysqlHelper()
+    data = mysql_helper.get_data(sql=sql)
+
+    # 更新到redis
+    info_data = {}
+    for id, w_h_rate in data:
+        info_data[int(id)] = float(w_h_rate)
+    redis_helper = RedisHelper()
+    # 删除旧数据
+    redis_helper.del_keys(key_name=config_.W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME)
+    # 写入新数据
+    if len(info_data) > 0:
+        redis_helper.add_data_with_zset(key_name=config_.W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME, data=info_data)
+
+
 if __name__ == '__main__':
     # data_test = [9.20273281e+03, 7.00795065e+03, 5.54813112e+03, 9.97402494e-01, 9.96402495e-01, 9.96402494e-01]
     # data_normalization(data_test)
-    request_post(request_url=config_.NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL, request_data={'videos': []})
+    # request_post(request_url=config_.NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL, request_data={'videos': []})
+    video_ids = [110, 112, 113, 115, 116, 117, 118]
+    get_video_w_h_rate(video_ids=video_ids)
+