Browse Source

区域屏蔽需求

zhangbo 1 year ago
parent
commit
a46532964b
2 changed files with 98 additions and 60 deletions
  1. 96 59
      utils.py
  2. 2 1
      video_recall.py

+ 96 - 59
utils.py

@@ -6,6 +6,7 @@ import time
 import gevent
 import pandas as pd
 import random
+import copy
 
 from datetime import datetime
 # from db_helper import HologresHelper, RedisHelper, MysqlHelper
@@ -319,9 +320,12 @@ class FilterVideos(object):
 
     def filter_videos(self, pool_type='rov', region_code=None, shield_config=None):
         """视频过滤"""
+        # todo: 添加app和region的风险过滤。
+        videos_filtered = self.filter_videos_with_risk_video(self.video_ids, self.app_type, region_code)
+
         # 预曝光过滤
         st_pre = time.time()
-        filtered_pre_result = self.filter_video_previewed(self.video_ids)
+        filtered_pre_result = self.filter_video_previewed(videos_filtered)
         # print("filtered_pre:", (time.time()-st_pre)*1000)
         # et_pre = time.time()
         # log_.info({
@@ -368,34 +372,36 @@ class FilterVideos(object):
         if not filtered_viewed_result:
             return None
         filtered_viewed_videos = [int(video_id) for video_id in filtered_viewed_result]
-        if pool_type == 'flow' or pool_type=='normal':
-            # 流量池视频需过滤屏蔽视频
-            if region_code is None or shield_config is None:
-                return filtered_viewed_videos
-            else:
-                shield_key_name_list = shield_config.get(region_code, None)
-                if shield_key_name_list is not None:
-                    filtered_shield_video_ids = self.filter_shield_video(
-                        video_ids=filtered_viewed_videos, shield_key_name_list=shield_key_name_list
-                    )
-                    log_.info({
-                        'logTimestamp': int(time.time() * 1000),
-                        'pool_type': pool_type,
-                        'request_id': self.request_id,
-                        'app_type': self.app_type,
-                        'mid': self.mid,
-                        'uid': self.uid,
-                        'operation': 'shield_filter',
-                        'request_videos': filtered_viewed_videos,
-                        'shield_filter_result': filtered_shield_video_ids,
-                        'executeTime': (time.time() - st_viewed) * 1000
-                    })
-                    # print("filtered_pre flow:", (time.time() - st_viewed) * 1000)
-                    return filtered_shield_video_ids
-                else:
-                    return filtered_viewed_videos
-        else:
-            return filtered_viewed_videos
+        return filtered_viewed_videos
+
+        # if pool_type == 'flow' or pool_type=='normal':
+        #     # 流量池视频需过滤屏蔽视频
+        #     if region_code is None or shield_config is None:
+        #         return filtered_viewed_videos
+        #     else:
+        #         shield_key_name_list = shield_config.get(region_code, None)
+        #         if shield_key_name_list is not None:
+        #             filtered_shield_video_ids = self.filter_shield_video(
+        #                 video_ids=filtered_viewed_videos, shield_key_name_list=shield_key_name_list
+        #             )
+        #             log_.info({
+        #                 'logTimestamp': int(time.time() * 1000),
+        #                 'pool_type': pool_type,
+        #                 'request_id': self.request_id,
+        #                 'app_type': self.app_type,
+        #                 'mid': self.mid,
+        #                 'uid': self.uid,
+        #                 'operation': 'shield_filter',
+        #                 'request_videos': filtered_viewed_videos,
+        #                 'shield_filter_result': filtered_shield_video_ids,
+        #                 'executeTime': (time.time() - st_viewed) * 1000
+        #             })
+        #             # print("filtered_pre flow:", (time.time() - st_viewed) * 1000)
+        #             return filtered_shield_video_ids
+        #         else:
+        #             return filtered_viewed_videos
+        # else:
+        #     return filtered_viewed_videos
 
     def filter_video_previewed(self, video_ids):
         """
@@ -693,11 +699,14 @@ class FilterVideos(object):
 
 
 
-    def filter_videos_status(self, pool_type='rov', region_code=None, shield_config=None):
+    def  filter_videos_status(self, pool_type='rov', region_code=None, shield_config=None):
         """视频过滤"""
+        # todo: 添加app和region的风险过滤。
+        videos_filtered = self.filter_videos_with_risk_video(self.video_ids, self.app_type, region_code)
+
         # 预曝光过滤
         st_pre = time.time()
-        filtered_pre_result = self.filter_video_previewed(self.video_ids)
+        filtered_pre_result = self.filter_video_previewed(videos_filtered)
         # print("filtered_pre:", (time.time()-st_pre)*1000)
         # et_pre = time.time()
         # log_.info({
@@ -744,34 +753,36 @@ class FilterVideos(object):
         if not filtered_viewed_result:
             return None
         filtered_viewed_videos = [int(video_id) for video_id in filtered_viewed_result]
-        if pool_type == 'flow' or pool_type=='normal':
-            # 流量池视频需过滤屏蔽视频
-            if region_code is None or shield_config is None:
-                return filtered_viewed_videos
-            else:
-                shield_key_name_list = shield_config.get(region_code, None)
-                if shield_key_name_list is not None:
-                    filtered_shield_video_ids = self.filter_shield_video(
-                        video_ids=filtered_viewed_videos, shield_key_name_list=shield_key_name_list
-                    )
-                    log_.info({
-                        'logTimestamp': int(time.time() * 1000),
-                        'pool_type': pool_type,
-                        'request_id': self.request_id,
-                        'app_type': self.app_type,
-                        'mid': self.mid,
-                        'uid': self.uid,
-                        'operation': 'shield_filter',
-                        'request_videos': filtered_viewed_videos,
-                        'shield_filter_result': filtered_shield_video_ids,
-                        'executeTime': (time.time() - st_viewed) * 1000
-                    })
-                    # print("filtered_pre flow:", (time.time() - st_viewed) * 1000)
-                    return filtered_shield_video_ids
-                else:
-                    return filtered_viewed_videos
-        else:
-            return filtered_viewed_videos
+        return filtered_viewed_videos
+
+        # if pool_type == 'flow' or pool_type=='normal':
+        #     # 流量池视频需过滤屏蔽视频
+        #     if region_code is None or shield_config is None:
+        #         return filtered_viewed_videos
+        #     else:
+        #         shield_key_name_list = shield_config.get(region_code, None)
+        #         if shield_key_name_list is not None:
+        #             filtered_shield_video_ids = self.filter_shield_video(
+        #                 video_ids=filtered_viewed_videos, shield_key_name_list=shield_key_name_list
+        #             )
+        #             log_.info({
+        #                 'logTimestamp': int(time.time() * 1000),
+        #                 'pool_type': pool_type,
+        #                 'request_id': self.request_id,
+        #                 'app_type': self.app_type,
+        #                 'mid': self.mid,
+        #                 'uid': self.uid,
+        #                 'operation': 'shield_filter',
+        #                 'request_videos': filtered_viewed_videos,
+        #                 'shield_filter_result': filtered_shield_video_ids,
+        #                 'executeTime': (time.time() - st_viewed) * 1000
+        #             })
+        #             # print("filtered_pre flow:", (time.time() - st_viewed) * 1000)
+        #             return filtered_shield_video_ids
+        #         else:
+        #             return filtered_viewed_videos
+        # else:
+        #     return filtered_viewed_videos
     def filter_video_viewed_status(self, video_ids, types=(1, 6,)):
         """
                    调用后端接口过滤用户已观看视频
@@ -808,6 +819,32 @@ class FilterVideos(object):
         filtered_videos = result['data']
         return filtered_videos
 
+    def filter_videos_with_risk_video(self, video_ids, app_type, region_code):
+        # 1 判断是否过滤,不展示的app+区域列表
+        app_region_filtered = {
+            0: [110000]
+        }
+        # 初始化为:展示,不过滤。
+        if_filtered = False
+        if app_type in app_region_filtered.keys() and region_code in app_region_filtered[app_type]:
+            if_filtered = True
+        if not if_filtered:
+            return copy.deepcopy(video_ids)
+        # 2 确认过滤,获取风险video列表
+        videos_with_risk = []
+        # 3 过滤 返回结果
+        video_ids_new = [id for id in video_ids if id not in videos_with_risk]
+        return video_ids_new
+
+
+
+
+
+
+
+
+
+
 if __name__ == '__main__':
     user = [
         ('weixin_openid_o0w175fDc8pNnywrYN49E341tKfI', ''),

+ 2 - 1
video_recall.py

@@ -2804,7 +2804,8 @@ class PoolRecall(object):
         recall_data = []
         pool_recall_result = []
         # 每次获取的视频数
-        get_size = size * 5
+        # get_size = size * 5
+        get_size = size * 15
         # 记录获取频次
         freq = 0
         while len(pool_recall_result) < size: