Przeglądaj źródła

update abtest: 228 & 229

liqian 2 lat temu
rodzic
commit
0d67ad9433
2 zmienionych plików z 68 dodań i 10 usunięć
  1. 12 2
      config.py
  2. 56 8
      recommend.py

+ 12 - 2
config.py

@@ -261,11 +261,13 @@ class BaseConfig(object):
         },
         '228': {
             'data_key': 'lhk_data', 'rule_key': 'lhk_rule1',
-            'ab_code': AB_CODE['region_rank_by_h'].get('abtest_228')
+            'ab_code': AB_CODE['region_rank_by_h'].get('abtest_228'),
+            'religion_class_name': 'catholicism',
         },  # 老好看 天主教 - 2插1
         '229': {
             'data_key': 'lhk_data', 'rule_key': 'lhk_rule2',
-            'ab_code': AB_CODE['region_rank_by_h'].get('abtest_229')
+            'ab_code': AB_CODE['region_rank_by_h'].get('abtest_229'),
+            'religion_class_name': 'christianity'
         },  # 老好看 基督教 - 2插1
     }
 
@@ -603,6 +605,14 @@ class BaseConfig(object):
     # 用户近30天是否有回流状态 存放 redis key 前缀,完整格式:'user:has30day:return:{mid}'
     KEY_NAME_PREFIX_USER_HAS30DAY_RETURN = 'user:has30day:return:'
 
+    # 宗教用户列表更新结果存放 redis key 前缀
+    KEY_NAME_PREFIX_RELIGION_USER = {
+        # 天主教,完整格式:'religion:catholicism:users:item:{hash_tag}:{date}'
+        'catholicism': 'religion:catholicism:users:item:',
+        # 基督教,完整格式:'religion:christianity:users:item:{hash_tag}:{date}'
+        'christianity': 'religion:christianity:users:item:',
+    }
+
     # 视频数据表类型 - 管理后台算法视频列表可视化
     VIDEO_DATA_LIST_MAPPING = {
         0: {

+ 56 - 8
recommend.py

@@ -4,7 +4,7 @@ import multiprocessing
 import traceback
 import hashlib
 
-from datetime import datetime
+from datetime import datetime, timedelta
 
 import config
 from log import Log
@@ -515,6 +515,30 @@ def update_local_distribute_count(videos):
         log_.error(traceback.format_exc())
 
 
+def get_religion_class_with_mid(mid, religion_class_name):
+    """
+    判断用户是否属于对应的宗教类型
+    :param mid: mid type-string
+    :param religion_class_name: 宗教类型, type-string, (catholicism-天主教, christianity-基督教)
+    :return: religion_class_flag, type-int, (0-否,1-是), 默认: 0
+    """
+    religion_class_flag = 0
+    now_date = datetime.today()
+    redis_helper = RedisHelper()
+    if mid:
+        hash_mid = hashlib.md5(mid.encode('utf-8')).hexdigest()
+        hash_tag = hash_mid[-1:]
+        key_name_prefix = config_.KEY_NAME_PREFIX_RELIGION_USER.get(religion_class_name, None)
+        if key_name_prefix is None:
+            return religion_class_flag
+        key_name = f"{key_name_prefix}{hash_tag}:{datetime.strftime(now_date, '%Y%m%d')}"
+        if not redis_helper.key_exists(key_name=key_name):
+            key_name = f"{key_name_prefix}{hash_tag}:{datetime.strftime(now_date - timedelta(days=1), '%Y%m%d')}"
+        if redis_helper.data_exists_with_set(key_name=key_name, value=mid):
+            religion_class_flag = 1
+    return religion_class_flag
+
+
 def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, mid, app_type, page_type=0):
     """
     根据实验分组给定对应的推荐参数
@@ -617,13 +641,37 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, mid, app_typ
             #         data_key = param.get('data_key')
             #         no_op_flag = True
 
-            for code, param in config_.AB_EXP_CODE.items():
-                if code in ab_exp_code_list:
-                    ab_code = param.get('ab_code')
-                    rule_key = param.get('rule_key')
-                    data_key = param.get('data_key')
-                    rule_key_30day = param.get('30day_rule_key')
-                    break
+            # 老好看视频 宗教人群实验
+            if '228' in ab_exp_code_list:
+                # 天主教
+                religion_param = config_.AB_EXP_CODE['228']
+                religion_class_name = religion_param.get('religion_class_name')
+                religion_class_flag = get_religion_class_with_mid(mid=mid, religion_class_name=religion_class_name)
+                if religion_class_flag == 1:
+                    ab_code = religion_param.get('ab_code')
+                    rule_key = religion_param.get('rule_key')
+                    data_key = religion_param.get('data_key')
+                    rule_key_30day = religion_param.get('30day_rule_key')
+
+            elif '229' in ab_exp_code_list:
+                # 基督教
+                religion_param = config_.AB_EXP_CODE['229']
+                religion_class_name = religion_param.get('religion_class_name')
+                religion_class_flag = get_religion_class_with_mid(mid=mid, religion_class_name=religion_class_name)
+                if religion_class_flag == 1:
+                    ab_code = religion_param.get('ab_code')
+                    rule_key = religion_param.get('rule_key')
+                    data_key = religion_param.get('data_key')
+                    rule_key_30day = religion_param.get('30day_rule_key')
+
+            else:
+                for code, param in config_.AB_EXP_CODE.items():
+                    if code in ab_exp_code_list:
+                        ab_code = param.get('ab_code')
+                        rule_key = param.get('rule_key')
+                        data_key = param.get('data_key')
+                        rule_key_30day = param.get('30day_rule_key')
+                        break
 
             """
             # 推荐条数 10->4 实验