Browse Source

add apptype-6-rov-recall

liqian 3 years ago
parent
commit
6ac1b1b213
2 changed files with 34 additions and 11 deletions
  1. 9 0
      config.py
  2. 25 11
      video_recall.py

+ 9 - 0
config.py

@@ -1,4 +1,11 @@
 class BaseConfig(object):
+    # 产品标识
+    APP_TYPE = {
+        'VLOG': 0,  # vlog
+        'LOVE_LIVE': 4,  # 票圈视频
+        'LONG_VIDEO': 5,  # 内容精选
+        'SHORT_VIDEO': 6
+    }
     # abCode
     AB_CODE = 10000
     # category id mapping
@@ -12,6 +19,8 @@ class BaseConfig(object):
     P = 0.3
     # ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.{date}
     RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.'
+    # appType = 6, ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.apptype.h.item.score.{appType}.{h}
+    RECALL_KEY_NAME_PREFIX_APP_TYPE = 'com.weiqu.video.recall.hot.apptype.h.item.score.'
     # 流量池redis key前缀,完整格式 com.weiqu.video.flowpool.hot.item.score.{appType}
     FLOW_POOL_KEY_NAME_PREFIX = 'com.weiqu.video.flowpool.hot.item.score.'
     # 首页推荐预曝光列表redis key 前缀,完整key格式:com.weiqu.video.hot.recommend.previewed.{appType}.{mid}

+ 25 - 11
video_recall.py

@@ -1,6 +1,6 @@
 import time
 
-from datetime import date, timedelta
+from datetime import date, timedelta, datetime
 from log import Log
 from db_helper import RedisHelper
 from config import set_config
@@ -171,16 +171,29 @@ class PoolRecall(object):
         :return: key_name
         """
         if pool_type == 'rov':
-            # 判断热度列表是否更新,未更新则使用前一天的热度列表
-            key_name = config_.RECALL_KEY_NAME_PREFIX + time.strftime('%Y%m%d')
-            if self.redis_helper.key_exists(key_name):
-                redis_date = date.today().strftime('%Y%m%d')
+            # appType = 6
+            if self.app_type == config_.APP_TYPE['SHORT_VIDEO']:
+                # 获取当前所在小时
+                redis_date = datetime.now().hour
+                # 判断热度列表是否更新,未更新则使用前一小时的热度列表
+                key_name = '{}{}.{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, self.app_type, redis_date)
+                if self.redis_helper.key_exists(key_name):
+                    return key_name, redis_date
+                else:
+                    key_name = '{}{}.{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, self.app_type, redis_date - 1)
+                    return key_name, redis_date - 1
+                # 其他
             else:
-                redis_date = (date.today() - timedelta(days=1)).strftime('%Y%m%d')
-                key_name = config_.RECALL_KEY_NAME_PREFIX + redis_date
-                # if not self.redis_helper.key_exists(key_name):
-                #     return None, None
-            return key_name, redis_date
+                # 判断热度列表是否更新,未更新则使用前一天的热度列表
+                key_name = config_.RECALL_KEY_NAME_PREFIX + time.strftime('%Y%m%d')
+                if self.redis_helper.key_exists(key_name):
+                    redis_date = date.today().strftime('%Y%m%d')
+                else:
+                    redis_date = (date.today() - timedelta(days=1)).strftime('%Y%m%d')
+                    key_name = config_.RECALL_KEY_NAME_PREFIX + redis_date
+                    # if not self.redis_helper.key_exists(key_name):
+                    #     return None, None
+                return key_name, redis_date
 
         elif pool_type == 'flow':
             return config_.FLOW_POOL_KEY_NAME_PREFIX + str(self.app_type)
@@ -194,7 +207,8 @@ class PoolRecall(object):
         rov_pool_key, redis_date = self.get_pool_redis_key('rov')
         if not rov_pool_key:
             return None, None, None
-        last_rov_recall_key = config_.LAST_VIDEO_FROM_ROV_POOL_PREFIX + '{}.{}.{}'.format(self.app_type, self.mid, redis_date)
+        last_rov_recall_key = config_.LAST_VIDEO_FROM_ROV_POOL_PREFIX + '{}.{}.{}'.format(
+            self.app_type, self.mid, redis_date)
         value = self.redis_helper.get_data_from_redis(last_rov_recall_key)
         if value:
             idx = self.redis_helper.get_index_with_data(rov_pool_key, value)