|
@@ -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', ''),
|