|
@@ -6,13 +6,18 @@ import time
|
|
|
import gevent
|
|
|
import pandas as pd
|
|
|
import random
|
|
|
-
|
|
|
from datetime import datetime
|
|
|
# from db_helper import HologresHelper, RedisHelper, MysqlHelper
|
|
|
from db_helper import RedisHelper, MysqlHelper
|
|
|
from config import set_config
|
|
|
from log import Log
|
|
|
|
|
|
+import sys
|
|
|
+sys.path.append("parameter_dir/")
|
|
|
+from parameter_update import param_update_risk_rule
|
|
|
+from parameter_update import param_update_risk_videos
|
|
|
+from parameter_update import param_update_risk_filter_flag
|
|
|
+
|
|
|
config_ = set_config()
|
|
|
log_ = Log()
|
|
|
|
|
@@ -319,9 +324,24 @@ class FilterVideos(object):
|
|
|
|
|
|
def filter_videos(self, pool_type='rov', region_code=None, shield_config=None):
|
|
|
"""视频过滤"""
|
|
|
+ # todo: 添加app和region的风险过滤。
|
|
|
+ st_viewed = time.time()
|
|
|
+ videos_filtered = self.filter_videos_with_risk_video(self.video_ids, self.app_type, region_code)
|
|
|
+ # log_.info({
|
|
|
+ # 'logTimestamp': int(time.time() * 1000),
|
|
|
+ # 'pool_type': "zhangbo-filter-pool_type",
|
|
|
+ # 'request_id': self.request_id,
|
|
|
+ # 'app_type': self.app_type,
|
|
|
+ # 'mid': "zhangbo-filter_videos",
|
|
|
+ # 'uid': self.uid,
|
|
|
+ # 'operation': 'shield_filter',
|
|
|
+ # 'request_videos': self.video_ids,
|
|
|
+ # 'shield_filter_result': videos_filtered,
|
|
|
+ # 'executeTime': (time.time() - st_viewed) * 1000
|
|
|
+ # })
|
|
|
# 预曝光过滤
|
|
|
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 +388,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):
|
|
|
"""
|
|
@@ -695,9 +717,24 @@ class FilterVideos(object):
|
|
|
|
|
|
def filter_videos_status(self, pool_type='rov', region_code=None, shield_config=None):
|
|
|
"""视频过滤"""
|
|
|
+ # todo: 添加app和region的风险过滤。
|
|
|
+ st_viewed = time.time()
|
|
|
+ videos_filtered = self.filter_videos_with_risk_video(self.video_ids, self.app_type, region_code)
|
|
|
+ # log_.info({
|
|
|
+ # 'logTimestamp': int(time.time() * 1000),
|
|
|
+ # 'pool_type': "zhangbo-filter-pool_type",
|
|
|
+ # 'request_id': self.request_id,
|
|
|
+ # 'app_type': self.app_type,
|
|
|
+ # 'mid': "zhangbo-filter_videos_status",
|
|
|
+ # 'uid': self.uid,
|
|
|
+ # 'operation': 'shield_filter',
|
|
|
+ # 'request_videos': self.video_ids,
|
|
|
+ # 'shield_filter_result': videos_filtered,
|
|
|
+ # 'executeTime': (time.time() - st_viewed) * 1000
|
|
|
+ # })
|
|
|
# 预曝光过滤
|
|
|
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 +781,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 +847,38 @@ class FilterVideos(object):
|
|
|
filtered_videos = result['data']
|
|
|
return filtered_videos
|
|
|
|
|
|
+ def filter_videos_with_risk_video(self, video_ids, app_type, region_code):
|
|
|
+ # 0 用一个开关控制,是否过滤生效。 便于回滚功能。
|
|
|
+ flag = param_update_risk_filter_flag()
|
|
|
+ if not flag:
|
|
|
+ return video_ids[0: min(20, len(video_ids))]
|
|
|
+ # 1 判断是否过滤,不展示的app+区域列表,-1必须过滤
|
|
|
+ app_region_filtered = param_update_risk_rule()
|
|
|
+ if app_type in app_region_filtered.keys():
|
|
|
+ if_filtered = False
|
|
|
+ if region_code in app_region_filtered[app_type]:
|
|
|
+ if_filtered = True
|
|
|
+ else:
|
|
|
+ if_filtered = True
|
|
|
+ if region_code == -1:
|
|
|
+ if_filtered = True
|
|
|
+ if not if_filtered:
|
|
|
+ return video_ids[0: min(20, len(video_ids))]
|
|
|
+ # 2 确认过滤,获取风险video列表param_update_risk_videos
|
|
|
+ videos_with_risk = param_update_risk_videos()
|
|
|
+ # 3 过滤 返回结果
|
|
|
+ video_ids_new = [i for i in video_ids if i not in videos_with_risk]
|
|
|
+ # print(flag)
|
|
|
+ # print(app_region_filtered)
|
|
|
+ # print(video_ids)
|
|
|
+ # print(app_type)
|
|
|
+ # print(region_code)
|
|
|
+ # print(videos_with_risk)
|
|
|
+ # print(video_ids_new)
|
|
|
+ # print(len(video_ids))
|
|
|
+ # print(len(video_ids_new))
|
|
|
+ return video_ids_new[0: min(20, len(video_ids_new))]
|
|
|
+
|
|
|
if __name__ == '__main__':
|
|
|
user = [
|
|
|
('weixin_openid_o0w175fDc8pNnywrYN49E341tKfI', ''),
|