Procházet zdrojové kódy

Merge branch 'feature/zhangbo_filter' of algorithm/rov-server into master

zhangbo před 1 rokem
rodič
revize
3b644d47e0
1 změnil soubory, kde provedl 52 přidání a 2 odebrání
  1. 52 2
      utils.py

+ 52 - 2
utils.py

@@ -6,7 +6,10 @@ import time
 import gevent
 import pandas as pd
 import random
-from datetime import datetime
+from datetime import date, timedelta, datetime
+
+from typing import List
+
 # from db_helper import HologresHelper, RedisHelper, MysqlHelper
 from db_helper import RedisHelper, MysqlHelper
 from config import set_config
@@ -19,6 +22,15 @@ from parameter_update import param_update_risk_filter_flag
 config_ = set_config()
 log_ = Log()
 
+FESTIVAL = [
+    ["春节", 2024020900, 2024021000],
+    ["初一", 2024021010, 2024021100],
+    ["初二", 2024021110, 2024021200],
+    ["初三", 2024021210, 2024021300],
+    ["初四", 2024021310, 2024021400],
+    ["初五", 2024021410, 2024021500],
+    ["情人节", 2024021410, 2024021500]
+]
 
 def send_msg_to_feishu(msg_text):
     """发送消息到飞书"""
@@ -335,7 +347,11 @@ class FilterVideos(object):
         # todo: 添加app和region的风险过滤。
         st_viewed = time.time()
         videos_filtered = self.filter_videos_with_risk_video(self.video_ids, self.app_type, region_code)
-
+        # videos_filtered.append(18562889)
+        # videos_filtered.append(18613648)
+        # videos_filtered.append(18608478)
+        videos_filtered = self.filter_videos_with_festival(videos_filtered)
+        # print(str(videos_filtered))
         # log_.info({
         #     'logTimestamp': int(time.time() * 1000),
         #     'pool_type': "zhangbo-filter-pool_type",
@@ -729,6 +745,7 @@ class FilterVideos(object):
         # todo: 添加app和region的风险过滤。
         st_viewed = time.time()
         videos_filtered = self.filter_videos_with_risk_video(self.video_ids, self.app_type, region_code)
+        videos_filtered = self.filter_videos_with_festival(videos_filtered)
         # log_.info({
         #     'logTimestamp': int(time.time() * 1000),
         #     'pool_type': "zhangbo-filter-pool_type",
@@ -892,6 +909,39 @@ class FilterVideos(object):
         else:
             return video_ids[:min(self.force_truncation, len(video_ids))]
 
+    def filter_videos_with_festival(self, video_ids: List[int]):
+        # 1 获取当前时间,判断过滤标准
+        now_date = datetime.today()
+        now_dt = datetime.strftime(now_date, '%Y%m%d%H')
+        now_dt_int = int(now_dt)
+        filter_fes = []
+        for k, v1, v2 in FESTIVAL:
+            if now_dt_int >= v1 and now_dt_int < v2:
+                filter_fes.append(k)
+        if len(filter_fes) == 0:
+            return video_ids
+        # 2 过滤
+        redis_keys = ["alg_recsys_video_tags_" + str(id) for id in video_ids]
+        redis_helper = RedisHelper()
+        redis_values = redis_helper.get_batch_key(redis_keys)
+        # print(str(video_ids))
+        # print(str(redis_values))
+        if redis_values and len(redis_values) > 0 and len(redis_values) == len(redis_keys):
+            video_ids_new = []
+            for id, tags in zip(video_ids, redis_values):
+                flag = True
+                if tags and len(tags) > 0:
+                    for t in tags.split(","):
+                        if t in filter_fes:
+                            flag = False
+                            break
+                if flag:
+                    video_ids_new.append(id)
+            return video_ids_new
+        else:
+            return video_ids
+
+
 if __name__ == '__main__':
     user = [
         ('weixin_openid_o0w175fDc8pNnywrYN49E341tKfI', ''),