|
@@ -1,4 +1,5 @@
|
|
|
import time
|
|
|
+import json
|
|
|
import traceback
|
|
|
from datetime import date, timedelta, datetime
|
|
|
|
|
@@ -11,6 +12,67 @@ config_, env = set_config()
|
|
|
log_ = Log()
|
|
|
|
|
|
|
|
|
+def filter_relevant_videos():
|
|
|
+ """运营强插相关推荐视频过滤"""
|
|
|
+ log_.info("relevant videos with op filter start...")
|
|
|
+ # 读取需要过滤的头部视频id
|
|
|
+ redis_helper = RedisHelper()
|
|
|
+ head_videos = redis_helper.get_data_from_set(key_name=config_.RELEVANT_TOP_VIDEOS_KEY_NAME)
|
|
|
+ if len(head_videos) == 0:
|
|
|
+ return
|
|
|
+
|
|
|
+ # 过滤
|
|
|
+ remove_head_vids = []
|
|
|
+ for head_vid in head_videos:
|
|
|
+ key_name = '{}{}'.format(config_.RELEVANT_VIDEOS_WITH_OP_KEY_NAME, head_vid)
|
|
|
+ # 头部视频 对应的key不存在时,将head_vid移除对应redis
|
|
|
+ if not redis_helper.key_exists(key_name=key_name):
|
|
|
+ remove_head_vids.append(head_vid)
|
|
|
+ log_.info('head_vid = {} relevant redis key not exist!'.format(head_vid))
|
|
|
+ continue
|
|
|
+
|
|
|
+ # 获取头部视频对应的相关视频
|
|
|
+ relevant_videos = redis_helper.get_data_from_redis(key_name=key_name)
|
|
|
+ # 该视频没有指定的相关性视频,将head_vid移除对应redis
|
|
|
+ if relevant_videos is None:
|
|
|
+ remove_head_vids.append(head_vid)
|
|
|
+ log_.info('head_vid = {} not have relevant videos!'.format(head_vid))
|
|
|
+ continue
|
|
|
+ # 过滤
|
|
|
+ relevant_videos = json.loads(relevant_videos)
|
|
|
+ relevant_video_ids = [int(item['recommend_vid']) for item in relevant_videos]
|
|
|
+ filtered_videos = filter_video_status(video_ids=relevant_video_ids)
|
|
|
+ # 保留可推荐 且生效中 的视频
|
|
|
+ relevant_videos_new = [
|
|
|
+ item for item in relevant_videos
|
|
|
+ if int(item['recommend_vid']) in filtered_videos and int(item['finish_time'] <= int(time.time()))
|
|
|
+ ]
|
|
|
+
|
|
|
+ # 过滤后没有符合的视频,将head_vid移除对应redis,删除对应的相关推荐的key
|
|
|
+ if len(relevant_videos_new) == 0:
|
|
|
+ remove_head_vids.append(head_vid)
|
|
|
+ redis_helper.del_keys(key_name=key_name)
|
|
|
+ log_.info('head_vid = {} filtered finished! new relevant videos count = {}'.format(
|
|
|
+ head_vid, len(relevant_videos_new)))
|
|
|
+ continue
|
|
|
+
|
|
|
+ # 重新写入redis
|
|
|
+ # 以最晚结束的视频的结束时间 - 当前时间 + 5s 作为key的过期时间
|
|
|
+ finish_time_list = [item['finish_time'] for item in relevant_videos_new]
|
|
|
+ expire_time = max(finish_time_list) - int(time.time()) + 5
|
|
|
+ # 存入redis
|
|
|
+ redis_helper.set_data_to_redis(key_name=key_name,
|
|
|
+ value=json.dumps(relevant_videos_new),
|
|
|
+ expire_time=expire_time)
|
|
|
+ log_.info('head_vid = {} filtered finished! new relevant videos count = {}'.format(
|
|
|
+ head_vid, len(relevant_videos_new)))
|
|
|
+
|
|
|
+ # 将需要移除的头部视频id进行移除
|
|
|
+ redis_helper.remove_value_from_set(key_name=config_.RELEVANT_TOP_VIDEOS_KEY_NAME, values=tuple(remove_head_vids))
|
|
|
+ log_.info('head videos remove finished! remove_head_vids = {}'.format(remove_head_vids))
|
|
|
+ log_.info("relevant videos with op filter end!")
|
|
|
+
|
|
|
+
|
|
|
def filter_rov_pool(app_type=None):
|
|
|
"""ROV召回池视频过滤"""
|
|
|
log_.info("rov recall pool filter start ...")
|
|
@@ -198,6 +260,8 @@ def main():
|
|
|
filter_bottom()
|
|
|
# 修改过ROV的视频过滤
|
|
|
filter_rov_updated()
|
|
|
+ # 运营强插相关推荐视频过滤
|
|
|
+ filter_relevant_videos()
|
|
|
except Exception as e:
|
|
|
log_.error(traceback.format_exc())
|
|
|
send_msg_to_feishu('{} - 过滤失败 \n {}'.format(config_.ENV_TEXT, traceback.format_exc()))
|