config.py 73 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473
  1. # coding:utf-8
  2. import os
  3. # from log import Log
  4. # log_ = Log()
  5. class BaseConfig(object):
  6. # 产品标识
  7. APP_TYPE = {
  8. 'VLOG': 0, # vlog
  9. 'LOVE_LIVE': 4, # 票圈视频
  10. 'LONG_VIDEO': 5, # 内容精选
  11. 'SHORT_VIDEO': 6, # 票圈短视频
  12. 'WAN_NENG_VIDEO': 17, # 万能影视屋
  13. 'LAO_HAO_KAN_VIDEO': 18, # 老好看视频
  14. 'ZUI_JING_QI': 19, # 票圈最惊奇
  15. 'APP': 13, # 票圈视频APP
  16. 'PIAO_QUAN_VIDEO_PLUS': 21, # 票圈视频+
  17. }
  18. # 数据存放路径
  19. DATA_DIR_PATH = './data'
  20. # oss 目标Bucket
  21. BUCKET_NAME = 'ali-recommend'
  22. # ODPS服务配置
  23. ODPS_CONFIG = {
  24. 'ENDPOINT': 'http://service.cn.maxcompute.aliyun.com/api',
  25. 'ACCESSID': 'LTAIWYUujJAm7CbH',
  26. 'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
  27. }
  28. # 飞书机器人配置
  29. FEISHU_ROBOT = {
  30. 'server_robot': {
  31. # webhook地址
  32. 'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/8de4de35-30ed-4692-8854-7a154e89b2f2',
  33. # 自定义关键词key_word
  34. 'key_word': '服务报警'
  35. },
  36. 'feature_monitor_robot': {
  37. 'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/0ca66b89-5e2b-4e89-a04a-a01fda31cc89',
  38. 'key_word': 'ROV特征监控'
  39. },
  40. 'ad_threshold_auto_update_robot': {
  41. 'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/f2494511-18b8-4fa9-8073-91a089dd4bf3',
  42. 'key_word': '广告模型阈值调整'
  43. }
  44. }
  45. # 训练数据截止时间距当前日期间隔天数
  46. TRAIN_DIFF = 7
  47. # 训练数据所需数据范围天数
  48. TRAIN_DELTA_DAYS = 30
  49. # 训练数据表名
  50. TRAIN_PROJECT = 'usercdm'
  51. TRAIN_TABLE = 'rov_feature_add_v1'
  52. # 训练数据文件存放路径
  53. TRAIN_DATA_FILENAME = 'train_data.pickle'
  54. # 预测数据截止时间距当前日期间隔天数
  55. PREDICT_DIFF = 1
  56. # 预测数据所需数据范围天数
  57. PREDICT_DELTA_DAYS = 1
  58. # 预测数据表名
  59. PREDICT_PROJECT = 'usercdm'
  60. PREDICT_TABLE = 'rov_predict_table_add_v1'
  61. # 预测数据文件存放路径
  62. PREDICT_DATA_FILENAME = 'predict_data.pickle'
  63. # 模型存放文件
  64. MODEL_FILENAME = 'model.pickle'
  65. # 运营给定App小时级更新数据表名
  66. APP_OP_PROJECT = 'loghubods'
  67. APP_OP_TABLE = 'category_video_list_test1'
  68. # 小程序小时级规则参数
  69. RULE_PARAMS = {
  70. # 'rule1': {'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
  71. # 'rule2': {'return_count': 20, 'score_rule': 0.001}, # 下线
  72. # 'rule3': {'view_type': 'pre-view', 'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
  73. # 'rule4': {'cal_score_func': 2, 'return_count': 20, 'score_rule': 0}, # 下线
  74. # 'rule5': {'cal_score_func': 3, 'return_count': 20, 'score_rule': 0}, # 下线
  75. 'rule6': {'view_type': 'video-show', 'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
  76. }
  77. # app_type: [18, 19]预测表名
  78. PREDICT_PROJECT_18_19 = {
  79. '18': 'loghubods', # 老好看
  80. '19': 'loghubods', # 最惊奇
  81. }
  82. PREDICT_TABLE_18_19 = {
  83. '18': 'haokan_video_list_each_hour_update', # 老好看
  84. '19': 'amazed_video_list_each_hour_update', # 最惊奇
  85. }
  86. # 预测数据文件存放路径
  87. PREDICT_DATA_FILENAME_18_19 = {
  88. '18': 'predict_data_18.pickle',
  89. '19': 'predict_data_19.pickle'
  90. }
  91. # 天级规则更新使用数据
  92. PROJECT_DAY = 'loghubods'
  93. TABLE_DAY = 'video_data_each_day_dataset'
  94. # 小程序天级规则参数
  95. RULE_PARAMS_DAY = {
  96. # 'rule1': {'return_count': 200},
  97. 'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001},
  98. }
  99. REGION_CODE = {
  100. '北京': '110000', '天津': '120000', '河北省': '130000', '山西省': '140000', '内蒙古': '150000',
  101. '辽宁省': '210000', '吉林省': '220000', '黑龙江省': '230000',
  102. '上海': '310000', '江苏省': '320000', '浙江省': '330000', '安徽省': '340000', '福建省': '350000', '江西省': '360000', '山东省': '370000',
  103. '河南省': '410000', '湖北省': '420000', '湖南省': '430000', '广东省': '440000', '广西': '450000', '海南省': '460000',
  104. '重庆': '500000', '四川省': '510000', '贵州省': '520000', '云南省': '530000', '西藏': '540000',
  105. '陕西省': '610000', '甘肃省': '620000', '青海省': '630000', '宁夏': '640000', '新疆': '650000',
  106. '台湾省': '710000', '香港': '810000', '澳门': '820000',
  107. 'None': '-1'
  108. }
  109. CITY_CODE = {
  110. '广州': '440100', '深圳': '440300', '成都': '510100',
  111. }
  112. REGION_CITY_MAPPING = {
  113. REGION_CODE['广东省']: [CITY_CODE['广州'], CITY_CODE['深圳'], ],
  114. REGION_CODE['四川省']: [CITY_CODE['成都'], ]
  115. }
  116. # 地域分组天级规则更新使用数据
  117. PROJECT_REGION_DAY = 'loghubods'
  118. TABLE_REGION_DAY = 'video_each_day_update_province'
  119. # 地域分组天级规则参数
  120. RULE_PARAMS_REGION_DAY = {
  121. 'rule1': {'view_type': 'pre-view', 'return_count': 21, 'score_rule': 0},
  122. }
  123. # ##### 区分appType数据
  124. DATA_PARAMS = {
  125. 'data1': {APP_TYPE['VLOG']: 0}, # vlog
  126. 'data2': {APP_TYPE['VLOG']: 0.5, APP_TYPE['LONG_VIDEO']: 0.5}, # [vlog, 内容精选]
  127. 'data3': {APP_TYPE['VLOG']: 0.5, APP_TYPE['LOVE_LIVE']: 0.5}, # [vlog, 票圈视频]
  128. 'data4': {APP_TYPE['VLOG']: 0.5, APP_TYPE['SHORT_VIDEO']: 0.5}, # [vlog, 票圈短视频]
  129. # 'data5': [APP_TYPE['VLOG'], APP_TYPE['ZUI_JING_QI']], # [vlog, 最惊奇]
  130. 'data6': {APP_TYPE['VLOG']: 0.25, APP_TYPE['LOVE_LIVE']: 0.25, APP_TYPE['SHORT_VIDEO']: 0.25,
  131. APP_TYPE['LONG_VIDEO']: 0.25},
  132. 'data7': {APP_TYPE['VLOG']: 0.5, APP_TYPE['APP']: 0.5}, # [vlog, 票圈视频APP]
  133. 'data8': {APP_TYPE['VLOG']: 0.7, APP_TYPE['LONG_VIDEO']: 0.3}, # [vlog, 内容精选]
  134. 'data9': {APP_TYPE['VLOG']: 0.3, APP_TYPE['LONG_VIDEO']: 0.7}, # [vlog, 内容精选]
  135. 'data10': {APP_TYPE['VLOG']: 0.2, APP_TYPE['LOVE_LIVE']: 0.8}, # [vlog, 票圈视频]
  136. 'data11': {APP_TYPE['VLOG']: 0.3, APP_TYPE['LOVE_LIVE']: 0.7}, # [vlog, 票圈视频]
  137. 'data12': {APP_TYPE['VLOG']: 0.4, APP_TYPE['SHORT_VIDEO']: 0.6}, # [vlog, 票圈短视频]
  138. 'data13': {APP_TYPE['VLOG']: 0.3, APP_TYPE['SHORT_VIDEO']: 0.7}, # [vlog, 票圈短视频]
  139. 'data14': {APP_TYPE['VLOG']: 0.78, APP_TYPE['LOVE_LIVE']: 0.11, APP_TYPE['SHORT_VIDEO']: 0.08,
  140. APP_TYPE['LONG_VIDEO']: 0.03},
  141. }
  142. # 小时级更新过去48h数据 loghubods.video_data_each_hour_dataset_48h_total_apptype
  143. PROJECT_48H_APP_TYPE = 'loghubods'
  144. TABLE_48H_APP_TYPE = 'video_data_each_hour_dataset_48h_total_apptype'
  145. # 小时级更新过去48h数据规则参数
  146. RULE_PARAMS_48H_APP_TYPE = {
  147. 'rule_params': {
  148. 'rule1': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001, 'view_type': 'preview'},
  149. },
  150. 'data_params': {
  151. 'data1': [APP_TYPE['VLOG'], ],
  152. },
  153. 'params_list': [
  154. {'data': 'data1', 'rule': 'rule1'},
  155. ],
  156. }
  157. # 天级更新过去30天数据 loghubods.video_data_30days_dataset_total_apptype
  158. PROJECT_30DAY_APP_TYPE = 'loghubods'
  159. TABLE_30DAY_APP_TYPE = 'video_data_30days_dataset_total_apptype'
  160. # 天级更新过去30天数据规则参数
  161. RULE_PARAMS_30DAY_APP_TYPE = {
  162. 'rule_params': {
  163. 'rule1': {'top': 500, 'view_type': 'preview'},
  164. },
  165. 'data_params': DATA_PARAMS,
  166. 'params_list': [
  167. {'data': 'data1', 'rule': 'rule1'},
  168. ]
  169. }
  170. # 小时级更新过去24h数据 loghubods.video_data_each_hour_dataset_24h_total_apptype
  171. PROJECT_24H_APP_TYPE = 'loghubods'
  172. TABLE_24H_APP_TYPE = 'video_data_each_hour_dataset_24h_total_apptype'
  173. # 小时级更新过去24h数据规则参数
  174. RULE_PARAMS_24H_APP_TYPE = {
  175. 'rule_params': {
  176. 'rule3': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
  177. 'view_type': 'preview'},
  178. 'rule4': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
  179. 'view_type': 'preview', 'merge_func': 2},
  180. # # 无回流人群
  181. # 'rule5': {'return_count': 100, 'platform_return_rate': 0.001,
  182. # 'view_type': 'preview', 'click_score_rate': 0.7},
  183. # 'rule7': {'return_count': 100, 'platform_return_rate': 0.001,
  184. # 'view_type': 'preview', 'click_score_rate': 0.8},
  185. # # 有回流人群
  186. # 'rule6': {'return_count': 100, 'platform_return_rate': 0.001,
  187. # 'view_type': 'preview', 'back_score_rate': 0.7},
  188. # 'rule8': {'return_count': 100, 'platform_return_rate': 0.001,
  189. # 'view_type': 'preview', 'back_score_rate': 0.8},
  190. },
  191. 'data_params': DATA_PARAMS,
  192. 'params_list': [
  193. {'data': 'data1', 'rule': 'rule3', 'notify_backend': True},
  194. # {'data': 'data2', 'rule': 'rule3'},
  195. {'data': 'data2', 'rule': 'rule4'},
  196. # {'data': 'data3', 'rule': 'rule4'},
  197. # {'data': 'data4', 'rule': 'rule4'},
  198. # {'data': 'data6', 'rule': 'rule4'},
  199. {'data': 'data7', 'rule': 'rule4'},
  200. # {'data': 'data1', 'rule': 'rule5'},
  201. # {'data': 'data1', 'rule': 'rule6'},
  202. # {'data': 'data8', 'rule': 'rule4'},
  203. # {'data': 'data9', 'rule': 'rule4'},
  204. {'data': 'data10', 'rule': 'rule4'},
  205. # {'data': 'data11', 'rule': 'rule4'},
  206. # {'data': 'data12', 'rule': 'rule4'},
  207. # {'data': 'data13', 'rule': 'rule4'},
  208. # # {'data': 'data14', 'rule': 'rule4'},
  209. # {'data': 'data1', 'rule': 'rule7'},
  210. # {'data': 'data1', 'rule': 'rule8'},
  211. ]
  212. }
  213. # 地域分组小时级更新24h使用数据 loghubods.video_each_day_update_province_24h_total_apptype
  214. PROJECT_REGION_24H_APP_TYPE = 'loghubods'
  215. TABLE_REGION_24H_APP_TYPE = 'video_each_day_update_province_24h_total_apptype'
  216. # 地域分组小时级更新24h规则参数
  217. RULE_PARAMS_REGION_24H_APP_TYPE = {
  218. 'rule_params': {
  219. 'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
  220. 'platform_return_rate': 0.001},
  221. # 'rule3': {'view_type': 'preview', 'return_count': 21, 'score_rule': 0,
  222. # 'platform_return_rate': 0.001},
  223. 'rule4': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
  224. 'platform_return_rate': 0.001, 'merge_func': 2},
  225. 'rule5': {'view_type': 'preview', 'return_count': 21, 'score_rule': 0,
  226. 'platform_return_rate': 0.001, 'merge_func': 2},
  227. # # 无回流人群
  228. # 'rule6': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
  229. # 'platform_return_rate': 0.001, 'click_score_rate': 0.7},
  230. # 'rule8': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
  231. # 'platform_return_rate': 0.001, 'click_score_rate': 0.8},
  232. # # 有回流人群
  233. # 'rule7': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
  234. # 'platform_return_rate': 0.001, 'back_score_rate': 0.7},
  235. # 'rule9': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
  236. # 'platform_return_rate': 0.001, 'back_score_rate': 0.8},
  237. },
  238. 'data_params': DATA_PARAMS,
  239. 'params_list': [
  240. {'data': 'data1', 'rule': 'rule2'},
  241. # {'data': 'data2', 'rule': 'rule2'},
  242. {'data': 'data2', 'rule': 'rule4'},
  243. # {'data': 'data3', 'rule': 'rule4'},
  244. # {'data': 'data4', 'rule': 'rule4'},
  245. # {'data': 'data6', 'rule': 'rule4'},
  246. {'data': 'data7', 'rule': 'rule5'},
  247. # {'data': 'data1', 'rule': 'rule6'},
  248. # {'data': 'data1', 'rule': 'rule7'},
  249. # {'data': 'data8', 'rule': 'rule4'},
  250. # {'data': 'data9', 'rule': 'rule4'},
  251. {'data': 'data10', 'rule': 'rule4'},
  252. # {'data': 'data11', 'rule': 'rule4'},
  253. # {'data': 'data12', 'rule': 'rule4'},
  254. # {'data': 'data13', 'rule': 'rule4'},
  255. # {'data': 'data14', 'rule': 'rule4'},
  256. # {'data': 'data1', 'rule': 'rule8'},
  257. # {'data': 'data1', 'rule': 'rule9'},
  258. ]
  259. }
  260. # 地域分组小时级规则更新使用数据
  261. PROJECT_REGION_APP_TYPE = 'loghubods'
  262. TABLE_REGION_APP_TYPE = 'video_each_hour_update_province_apptype'
  263. # 地域分组小时级规则参数
  264. RULE_PARAMS_REGION_APP_TYPE = {
  265. 'rule_params': {
  266. # 'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
  267. # 'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  268. # 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule2'},
  269. 'rule4': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  270. 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3'},
  271. # 涉政视频过滤
  272. 'rule4-1': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  273. 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3', 'political_filter': True},
  274. # 'rule6': {'view_type': 'preview', 'platform_return_rate': 0.001,
  275. # 'region_24h_rule_key': 'rule3', '24h_rule_key': 'rule2'},
  276. 'rule7': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  277. 'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2},
  278. 'rule7-1': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  279. 'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
  280. 'political_filter': True},
  281. 'rule8': {'view_type': 'preview', 'platform_return_rate': 0.001,
  282. 'region_24h_rule_key': 'rule5', '24h_rule_key': 'rule4', 'merge_func': 2},
  283. # 'rule9': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  284. # 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3', '30day_rule_key': 'rule1'},
  285. # # 无回流人群
  286. # 'rule10': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  287. # 'region_24h_rule_key': 'rule6', '24h_rule_key': 'rule5', 'click_score_rate': 0.7},
  288. # 'rule13': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  289. # 'region_24h_rule_key': 'rule8', '24h_rule_key': 'rule7', 'click_score_rate': 0.8},
  290. # # 有回流人群
  291. # 'rule11': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  292. # 'region_24h_rule_key': 'rule7', '24h_rule_key': 'rule6', 'back_score_rate': 0.7},
  293. # 'rule14': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  294. # 'region_24h_rule_key': 'rule9', '24h_rule_key': 'rule8', 'back_score_rate': 0.8},
  295. # # 20点地域小时级列表中增加7点-19点地域小时级的优质视频
  296. # 'rule12': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  297. # 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3', 'add_videos_in_20h': True},
  298. # 地域小时级列表中增加 前6小时 地域小时级的优质视频
  299. 'rule15': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  300. 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3',
  301. 'add_videos_with_pre_h': True, 'hour_count': 6},
  302. # 地域小时级列表中增加 前3小时 地域小时级的优质视频
  303. 'rule16': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  304. 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3',
  305. 'add_videos_with_pre_h': True, 'hour_count': 3},
  306. # 地域小时级列表中增加 前47小时 地域小时级的优质视频
  307. 'rule17': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  308. 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3',
  309. 'add_videos_with_pre_h': True, 'hour_count': 47},
  310. # 地域小时级列表中增加 前3小时 地域小时级的优质视频,排序优化1:半小时级列表中有的视频以本小时的分数为准
  311. 'rule18': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  312. 'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3',
  313. 'add_videos_with_pre_h': True, 'hour_count': 3, 'add_func': 'func2'},
  314. },
  315. 'data_params': DATA_PARAMS,
  316. 'params_list': [
  317. {'data': 'data1', 'rule': 'rule4'}, # 095 vlog
  318. {'data': 'data1', 'rule': 'rule4-1'}, # 095-1
  319. # {'data': 'data2', 'rule': 'rule4'},
  320. {'data': 'data2', 'rule': 'rule7-1'}, # 121 内容精选
  321. # {'data': 'data3', 'rule': 'rule7'},
  322. # {'data': 'data4', 'rule': 'rule7'},
  323. # {'data': 'data6', 'rule': 'rule7'},
  324. {'data': 'data7', 'rule': 'rule8'}, # 票圈视频APP 10003.110156
  325. # {'data': 'data1', 'rule': 'rule9'},
  326. # {'data': 'data1', 'rule': 'rule10'},
  327. # {'data': 'data1', 'rule': 'rule11'},
  328. # {'data': 'data8', 'rule': 'rule7'},
  329. # {'data': 'data9', 'rule': 'rule7'},
  330. {'data': 'data10', 'rule': 'rule7'}, # 144 票圈视频
  331. # {'data': 'data11', 'rule': 'rule7'},
  332. # {'data': 'data12', 'rule': 'rule7'},
  333. # {'data': 'data13', 'rule': 'rule7'},
  334. # {'data': 'data1', 'rule': 'rule12'},
  335. # {'data': 'data14', 'rule': 'rule7'}, # 159
  336. # {'data': 'data1', 'rule': 'rule13'}, # 161
  337. # {'data': 'data1', 'rule': 'rule14'}, # 162
  338. {'data': 'data1', 'rule': 'rule15'}, # 200 vlog
  339. {'data': 'data1', 'rule': 'rule16'}, # 214 vlog
  340. {'data': 'data1', 'rule': 'rule17'}, # 215 vlog
  341. {'data': 'data1', 'rule': 'rule18'}, # 224 vlog
  342. ],
  343. }
  344. # 宗教视频更新使用数据
  345. RELIGION_VIDEOS = {
  346. 'catholicism': {
  347. 'project': 'loghubods',
  348. 'table': 'catholicism_videolist',
  349. # 视频列表更新结果存放 redis key 前缀,完整格式:'religion:catholicism:videos:item:{date}'
  350. 'key_name_prefix': 'religion:catholicism:videos:item:',
  351. }, # 天主教
  352. 'christianity': {
  353. 'project': 'loghubods',
  354. 'table': 'christianity_videolist',
  355. # 视频列表更新结果存放 redis key 前缀,完整格式:'religion:christianity:videos:item:{date}'
  356. 'key_name_prefix': 'religion:christianity:videos:item:',
  357. }, # 基督教
  358. }
  359. # 老好看宗教实验数据
  360. LHK_RULE_PARAMS = {
  361. 'rule_params': {
  362. 'lhk_rule1': {'initial_param': {'data': 'data1', 'rule': 'rule4-1'},
  363. 'religion_name': 'catholicism', 'rank_count': 2},
  364. 'lhk_rule2': {'initial_param': {'data': 'data1', 'rule': 'rule4-1'},
  365. 'religion_name': 'christianity', 'rank_count': 2},
  366. },
  367. 'params_list': [
  368. {'data': 'lhk_data', 'rule': 'lhk_rule1'}, # 天主教-2插1
  369. {'data': 'lhk_data', 'rule': 'lhk_rule2'}, # 基督教-2插1
  370. ]
  371. }
  372. # 不区分地域数据使用相对48h数据
  373. RULE_PARAMS_REGION_APP_TYPE_48H = {
  374. 'rule_params': {
  375. 'rule5': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
  376. 'region_24h_rule_key': 'rule2', '48h_rule_key': 'rule1'},
  377. },
  378. 'data_params': {
  379. 'data1': [APP_TYPE['VLOG'], ],
  380. },
  381. 'params_list': [
  382. {'data': 'data1', 'rule': 'rule5'},
  383. ],
  384. }
  385. # 老视频更新使用数据
  386. OLD_VIDEOS_PROJECT = 'loghubods'
  387. OLD_VIDEOS_TABLE = 'xcx_test_video'
  388. # 完整电影更新使用数据
  389. WHOLE_MOVIES_PROJECT = 'loghubods'
  390. WHOLE_MOVIES_TABLE = 'whole_movies'
  391. # 完整影视资源更新结果存放 redis key 前缀,完整格式:'com.weiqu.video.recall.whole.movies.item.{date}.{h}'
  392. RECALL_KEY_NAME_PREFIX_WHOLE_MOVIES = 'com.weiqu.video.recall.whole.movies.item.'
  393. # 小程序离线ROV模型结果存放 redis key前缀,完整格式:recall:item:score:rov:applet:{date}
  394. RECALL_KEY_NAME_PREFIX = 'recall:item:score:rov:applet:'
  395. # 小程序小时级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.h.{rule_key}.{date}.{h}
  396. RECALL_KEY_NAME_PREFIX_BY_H = 'com.weiqu.video.recall.item.score.h.'
  397. # 小程序相对24h数据更新结果与 小程序小时级更新结果 去重后 存放 redis key前缀,
  398. # 完整格式:com.weiqu.video.recall.hot.item.score.dup.24h.h.{rule_key}.{date}.{h}
  399. RECALL_KEY_NAME_PREFIX_DUP_24H_H = 'com.weiqu.video.recall.hot.item.score.dup.24h.h.'
  400. # 小程序离线ROV模型结果与 小程序小时级更新结果/小程序相对24h数据更新结果 去重后 存放 redis key前缀,
  401. # 完整格式:com.weiqu.video.recall.hot.item.score.dup.h.{rule_key}.{date}.{h}
  402. RECALL_KEY_NAME_PREFIX_DUP_H = 'com.weiqu.video.recall.hot.item.score.dup.h.'
  403. # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.h.item.{rule_key}
  404. H_VIDEO_FILER = 'com.weiqu.video.filter.h.item.'
  405. # 小程序天级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.day.{rule_key}.{date}
  406. RECALL_KEY_NAME_PREFIX_BY_DAY = 'com.weiqu.video.recall.item.score.day.'
  407. # 小程序离线ROV模型结果与小程序天级更新结果去重后 存放 redis key前缀,
  408. # 完整格式:com.weiqu.video.recall.hot.item.score.dup.day.now.{rule_key}.{date}
  409. RECALL_KEY_NAME_PREFIX_DUP_DAY_NOW = 'com.weiqu.video.recall.hot.item.score.dup.day.now.'
  410. # 使用前一天小程序离线ROV模型结果与小程序天级更新结果去重后 存放 redis key前缀,
  411. # 完整格式:com.weiqu.video.recall.hot.item.score.dup.day.pre.{rule_key}.{date}
  412. RECALL_KEY_NAME_PREFIX_DUP_DAY_PRE = 'com.weiqu.video.recall.hot.item.score.dup.day.pre.'
  413. # 小程序小时级48h数据更新结果存放 redis key前缀,
  414. # 完整格式:recall:item:score:48h:{data_key}:{rule_key}:{date}:{h}
  415. RECALL_KEY_NAME_PREFIX_BY_48H = 'recall:item:score:48h:'
  416. # 小程序小时级48h数据 筛选后的剩余数据 更新结果存放 redis key前缀,
  417. # 完整格式:recall:item:score:48h:other:{data_key}:{rule_key}:{date}:{h}
  418. RECALL_KEY_NAME_PREFIX_BY_48H_OTHER = 'recall:item:score:48h:other:'
  419. # 小程序小时级24h数据更新结果存放 redis key前缀,
  420. # 完整格式:recall:item:score:24h:{data_key}:{rule_key}:{date}:{h}
  421. RECALL_KEY_NAME_PREFIX_BY_24H = 'recall:item:score:24h:'
  422. # 小程序小时级24h数据 筛选后的剩余数据 更新结果存放 redis key前缀,
  423. # 完整格式:recall:item:score:24h:other:{data_key}:{rule_key}:{date}:{h}
  424. RECALL_KEY_NAME_PREFIX_BY_24H_OTHER = 'recall:item:score:24h:other:'
  425. # 小程序离线ROV模型结果与小程序小时级24h更新结果去重后 存放 redis key前缀,
  426. # 完整格式:com.weiqu.video.recall.hot.item.score.dup.24h.{rule_key}.{date}.{h}
  427. RECALL_KEY_NAME_PREFIX_DUP_24H = 'com.weiqu.video.recall.hot.item.score.dup.24h.'
  428. # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.apptype.h.item.24h.{appType}.{data_key}.{rule_key}
  429. H_VIDEO_FILER_24H = 'com.weiqu.video.filter.apptype.h.item.24h.'
  430. # 小程序相对30天数据天级更新结果存放 redis key前缀,
  431. # 完整格式:recall:item:score:30day:{data_key}:{rule_key}:{date}
  432. RECALL_KEY_NAME_PREFIX_30DAY = 'recall:item:score:30day:'
  433. # 小程序地域分组小时级更新结果存放 redis key前缀,
  434. # 完整格式:recall:item:score:region:h:{region}:{data_key}:{rule_key}:{date}:{h}
  435. RECALL_KEY_NAME_PREFIX_REGION_BY_H = 'recall:item:score:region:h:'
  436. # 小程序地域分组天级更新结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀,
  437. # 完整格式:com.weiqu.video.recall.hot.item.score.dup1.region.day.h.{region}.{rule_key}.{date}.{h}
  438. RECALL_KEY_NAME_PREFIX_DUP1_REGION_DAY_H = 'com.weiqu.video.recall.hot.item.score.dup1.region.day.h.'
  439. # 小程序地域分组小时级更新24h结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀,
  440. # 完整格式:recall:item:score:region:dup1:region24h:{region}:{data_key}:{rule_key}:{date}:{h}
  441. RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H = 'recall:item:score:region:dup1:region24h:'
  442. # 小程序天级更新结果与 小程序地域分组天级更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
  443. # 完整格式:com.weiqu.video.recall.hot.item.score.dup2.region.day.h.{region}.{rule_key}.{date}.{h}
  444. RECALL_KEY_NAME_PREFIX_DUP2_REGION_DAY_H = 'com.weiqu.video.recall.hot.item.score.dup2.region.day.h.'
  445. # 小程序24h更新结果与 小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
  446. # 完整格式:recall:item:score:region:dup2:24h:{region}:{data_key}:{rule_key}:{date}:{h}
  447. RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H = 'recall:item:score:region:dup2:24h:'
  448. # 小程序小时级24h数据 筛选后的剩余数据 更新结果 与 小程序24h更新结果/小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
  449. # 完整格式:recall:item:score:region:dup3:24h:{region}:{data_key}:{rule_key}:{date}:{h}
  450. RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H = 'recall:item:score:region:dup3:24h:'
  451. # 小程序48h更新结果与 小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
  452. # 完整格式:recall:item:score:region:dup2:48h:{region}:{data_key}:{rule_key}:{date}:{h}
  453. RECALL_KEY_NAME_PREFIX_DUP2_REGION_48H_H = 'recall:item:score:region:dup2:48h:'
  454. # 小程序小时级48h数据 筛选后的剩余数据 更新结果 与 小程序48h更新结果/小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
  455. # 完整格式:recall:item:score:region:dup3:48h:{region}:{data_key}:{rule_key}:{date}:{h}
  456. RECALL_KEY_NAME_PREFIX_DUP3_REGION_48H_H = 'recall:item:score:region:dup3:48h:'
  457. # 小程序离线ROV模型结果与 小程序天级更新结果/小程序地域分组天级更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
  458. # 完整格式:recall:item:score:region:dup4:rov:{region}:{data_key}:{rule_key}:{date}:{h}
  459. RECALL_KEY_NAME_PREFIX_DUP_REGION_H = 'recall:item:score:region:dup4:rov:'
  460. # 地域分组小时级视频状态不符合推荐要求的列表 redis key,
  461. # 完整格式:com.weiqu.video.filter.apptype.region.h.item.{region}.{appType}.{data_key}.{rule_key}
  462. REGION_H_VIDEO_FILER = 'com.weiqu.video.filter.apptype.region.h.item.'
  463. # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.h.item.24h.{region}.{rule_key}
  464. # H_VIDEO_FILER_24H = 'com.weiqu.video.filter.h.item.24h.'
  465. # 小程序地域分组天级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.region.day.{region}.{rule_key}.{date}
  466. RECALL_KEY_NAME_PREFIX_REGION_BY_DAY = 'com.weiqu.video.recall.item.score.region.day.'
  467. # 小程序地域分组小时级更新24h结果存放 redis key前缀,
  468. # 完整格式:recall:item:score:region:24h:{region}:{data_key}:{rule_key}:{date}:{h}
  469. RECALL_KEY_NAME_PREFIX_REGION_BY_24H = 'recall:item:score:region:24h:'
  470. # 小程序天级更新结果与 小程序地域分组小时级更新24h结果 去重后 存放 redis key前缀,
  471. # 完整格式:com.weiqu.video.recall.hot.item.score.dup.region.day.24h.{region}.{rule_key}.{date}.{h}
  472. RECALL_KEY_NAME_PREFIX_DUP_REGION_DAY_24H = 'com.weiqu.video.recall.hot.item.score.dup.region.day.24h.'
  473. # 小程序离线ROV模型结果与 小程序天级更新结果/小程序地域分组小时级更新24h结果 去重后 存放 redis key前缀,
  474. # 完整格式:com.weiqu.video.recall.hot.item.score.dup.region.24h.{region}.{rule_key}.{date}.{h}
  475. RECALL_KEY_NAME_PREFIX_DUP_REGION_24H = 'com.weiqu.video.recall.hot.item.score.dup.region.24h.'
  476. # 地域分组小时级更新24h视频状态不符合推荐要求的列表 redis key,
  477. # 完整格式:com.weiqu.video.filter.apptype.region.h.item.24h.{region}.{appType}.{data_key}.{rule_key}
  478. REGION_H_VIDEO_FILER_24H = 'com.weiqu.video.filter.apptype.region.h.item.24h.'
  479. # 小程序老视频更新结果存放 redis key 前缀,完整格式:'com.weiqu.video.recall.old.item.{date}'
  480. RECALL_KEY_NAME_PREFIX_OLD_VIDEOS = 'com.weiqu.video.recall.old.item.'
  481. # app应用 小程序离线ROV模型结果存放 redis key前缀,完整格式:recall:item:score:rov:app:{date}
  482. RECALL_KEY_NAME_PREFIX_APP = 'recall:item:score:rov:app:'
  483. # app应用 运营提供的小时级数据存放 redis key前缀,完整格式:com.weiqu.video.app.op.item.score.{date}.{h}
  484. APP_OP_VIDEOS_KEY_NAME_PREFIX = 'com.weiqu.video.app.op.item.score.'
  485. # app应用 小时级数据更新最终结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date}.{h}
  486. APP_FINAL_RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.app.'
  487. # appType:[18, 19]小程序离线ROV模型结果存放 redis key前缀,完整格式:recall:item:score:{appType}:{date}:{h}
  488. RECALL_KEY_NAME_PREFIX_APP_TYPE = 'recall:item:score:'
  489. # appType = 6, ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.apptype.h.item.score.{appType}.{h}
  490. # RECALL_KEY_NAME_PREFIX_APP_TYPE = 'com.weiqu.video.recall.hot.apptype.h.item.score.'
  491. # 流量池离线模型结果存放 redis key前缀,完整格式 flow:pool:item:score:{appType}
  492. FLOWPOOL_KEY_NAME_PREFIX = 'flow:pool:item:score:'
  493. # 快速曝光流量池数据存放 redis key前缀,完整格式 flow:pool:quick:item:score:{appType}:{flowPool_id}
  494. QUICK_FLOWPOOL_KEY_NAME_PREFIX = 'flow:pool:quick:item:score:'
  495. # 快速曝光流量池分发概率 redis key前缀,完整格式 flow:pool:quick:distribute:rate:{flowPool_id}
  496. QUICK_FLOWPOOL_DISTRIBUTE_RATE_KEY_NAME_PREFIX = 'flow:pool:quick:distribute:rate:'
  497. # 本地记录视频的可分发数,控制分发,完整key格式:flow:pool:local:distribute:count:{videoId}:{flowPool}
  498. LOCAL_DISTRIBUTE_COUNT_PREFIX = 'flow:pool:local:distribute:count:'
  499. # 兜底视频redis存储key
  500. BOTTOM_KEY_NAME = 'bottom:videos'
  501. # 兜底视频数量
  502. BOTTOM_NUM = 1000
  503. # 首页兜底视频json存储 redis-key
  504. BOTTOM_JSON_KEY_NAME = 'com.weiqu.video.homepage.bottom.info.json.item'
  505. # 兜底视频redis存储key-方案2:采用流量池视频作为兜底视频
  506. BOTTOM2_KEY_NAME = 'bottom2:videos'
  507. # 修改ROV的视频 redis key
  508. UPDATE_ROV_KEY_NAME = 'update:rov:item:score:applet'
  509. UPDATE_ROV_KEY_NAME_APP = 'update:rov:item:score:app'
  510. # 生效中的置顶视频列表 redis key
  511. TOP_VIDEO_LIST_KEY_NAME = 'top:item:score:area:applet'
  512. TOP_VIDEO_LIST_KEY_NAME_APP = 'top:item:score:area:app'
  513. # rovScore公差
  514. ROV_SCORE_D = 0.001
  515. # width : height > 1 的视频列表 redis key, zset存储,value为videoId,score为w_h_rate
  516. W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME = {
  517. 'rov_recall': 'com.weiqu.video.rov.w.h.rate.1.item', # rov召回池视频
  518. 'bottom_last': 'com.weiqu.video.bottom.last.w.h.rate.1.item' # 二次兜底视频
  519. }
  520. # 头部视频对应运营强插的相关视频 redis 存储 key 前缀, 完整key格式:com.weiqu.video.relevant.videos.item.{videoId}
  521. RELEVANT_VIDEOS_WITH_OP_KEY_NAME = 'com.weiqu.video.relevant.videos.item.'
  522. # 有设置运营强插相关视频的头部视频id redis存储key
  523. RELEVANT_TOP_VIDEOS_KEY_NAME = 'com.weiqu.video.relevant.top.video_ids'
  524. # 按位置排序redis存储key
  525. RECALL_POSITION1_KEY_NAME = 'com.weiqu.video.recall.hot.apptype.h.item.score.position.1'
  526. RECALL_POSITION2_KEY_NAME = 'com.weiqu.video.recall.hot.apptype.h.item.score.position.2'
  527. SIM_N_19 = 4
  528. # 最惊奇电影类视频相关推荐列表存放 redis key前缀,完整格式: com.weiqu.movie.relevant.list.item.{videoId}
  529. MOVIE_RELEVANT_LIST_KEY_NAME_PREFIX = 'com.weiqu.movie.relevant.list.item.'
  530. # 特殊mid 及 指定视频 数据
  531. SPECIAL_MID_VIDEOS_PROJECT = {
  532. 'mid': 'loghubods',
  533. 'videos': 'loghubods'
  534. }
  535. SPECIAL_MID_VIDEOS_TABLE = {
  536. 'mid': 'shielded_mid',
  537. 'videos': 'shielded_video_list'
  538. }
  539. # 特殊mid更新结果存放 redis key ,完整格式:'special:mid'
  540. KEY_NAME_SPECIAL_MID = 'special:mid'
  541. # 特殊mid对应指定视频列表更新结果存放 redis key 前缀,完整格式:'special:videos:item:{date}'
  542. KEY_NAME_PREFIX_SPECIAL_VIDEOS = 'special:videos:item:'
  543. # 限流视频集合存放 redis key前缀,完整格式:'limit:videos:{date}'
  544. KEY_NAME_PREFIX_LIMIT_VIDEO_SET = 'limit:videos:'
  545. # 限流视频最大分发数记录 redis key,完整格式:'limit:video:max:distribute:count'
  546. KEY_NAME_PREFIX_LIMIT_VIDEOS = 'limit:video:max:distribute:count'
  547. # 限流视频分发数记录 redis key前缀,完整格式:'limit:video:distribute:count:{videoId}'
  548. KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT = 'limit:video:distribute:count:'
  549. # 本山祝福视频列表,在北京+重庆+无地域划分表中屏蔽
  550. PROJECT_BENSHAN_ZHUFU = 'loghubods'
  551. TABLE_BENSHAN_ZHUFU = 'benshanzhufu_videolist'
  552. # 本山祝福视频redis存储key
  553. BENSHAN_ZHUFU_KEY_NAME = 'benshanzf:videos'
  554. # 小年糕视频列表,在北京+无地域划分表中屏蔽
  555. PROJECT_XNG = 'loghubods'
  556. TABLE_XNG = 'xng_videos'
  557. # 小年糕视频redis存储key
  558. XNG_KEY_NAME = 'xng:videos'
  559. # 特殊地区屏蔽危险视频列表,在广州+深圳+成都+无地域划分表中屏蔽
  560. PROJECT_SPECIAL_AREA_LIMIT = 'loghubods'
  561. TABLE_SPECIAL_AREA_LIMIT = 'special_area_recommend_limit'
  562. # 特殊地区屏蔽危险视频redis存储key
  563. SPECIAL_AREA_LIMIT_KEY_NAME = 'special:area:limit:videos'
  564. # 屏蔽视频配置 key:region_code, value:videos key list
  565. SHIELD_CONFIG = {
  566. REGION_CODE['北京']: [XNG_KEY_NAME, ],
  567. REGION_CODE['None']: [SPECIAL_AREA_LIMIT_KEY_NAME, XNG_KEY_NAME, ],
  568. CITY_CODE['广州']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
  569. CITY_CODE['深圳']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
  570. CITY_CODE['成都']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
  571. }
  572. # 涉政视频列表,除票圈vlog、票圈视频、票圈视频APP外其他端都屏蔽
  573. PROJECT_POLITICAL_VIDEOS = 'loghubods'
  574. TABLE_POLITICAL_VIDEOS = 'shielded_politics_videolist'
  575. # 涉政视频列表redis存储key
  576. POLITICAL_VIDEOS_KEY_NAME = 'political:videos'
  577. # 涉政视频可分发的端
  578. POLITICAL_RECOMMEND_APP_TYPE_LIST = [
  579. APP_TYPE['VLOG'], # vlog
  580. APP_TYPE['LOVE_LIVE'], # 票圈视频
  581. APP_TYPE['APP'], # 票圈视频APP
  582. ]
  583. # 宗教视频更新使用数据
  584. RELIGION_VIDEOS_PROJECT = 'loghubods'
  585. RELIGION_VIDEOS_TABLE = 'religion_video'
  586. # 宗教视频列表更新结果存放 redis key 前缀,完整格式:'religion:videos:item:{date}'
  587. KEY_NAME_PREFIX_RELIGION_VIDEOS = 'religion:videos:item:'
  588. # 广告模型数据
  589. ad_model_data = {
  590. 'user_group': {
  591. 'project': 'loghubods',
  592. 'table': 'user_share_return_admodel'
  593. },
  594. 'users_share_rate': {
  595. 'project': 'loghubods',
  596. 'table': 'usergroup_sharerate_admodel'
  597. },
  598. 'videos_share_rate': {
  599. 'project': 'loghubods',
  600. 'table': 'video_sharerate_admodel'
  601. },
  602. 'videos_share_rate_7days': {
  603. 'project': 'loghubods',
  604. 'table': 'video_sharerate_admodel_7days'
  605. },
  606. }
  607. # 自动调整广告模型阈值数据
  608. AD_THRESHOLD_AUTO_UPDATE_DATA = {
  609. 'project': 'loghubods',
  610. 'table': 'visit_uv_hh'
  611. }
  612. # 调用广告模型appType列表
  613. AD_APP_TYPE_LIST = [
  614. APP_TYPE['VLOG'], # 票圈vlog
  615. APP_TYPE['PIAO_QUAN_VIDEO_PLUS'], # 票圈视频+
  616. APP_TYPE['LOVE_LIVE'], # 票圈视频
  617. APP_TYPE['SHORT_VIDEO'], # 票圈短视频
  618. APP_TYPE['LONG_VIDEO'], # 内容精选
  619. APP_TYPE['LAO_HAO_KAN_VIDEO'], # 老好看视频
  620. APP_TYPE['ZUI_JING_QI'], # 票圈最惊奇
  621. ]
  622. # 广告模型视频数据
  623. AD_VIDEO_DATA_PARAMS = {
  624. 'videos_share_rate': {
  625. 'data1': APP_TYPE['VLOG'], # vlog
  626. 'data2': APP_TYPE['LOVE_LIVE'], # 票圈视频
  627. 'data3': APP_TYPE['LONG_VIDEO'], # 内容精选
  628. 'data4': APP_TYPE['SHORT_VIDEO'], # 票圈短视频
  629. 'data5': APP_TYPE['LAO_HAO_KAN_VIDEO'], # 老好看视频
  630. 'data6': APP_TYPE['ZUI_JING_QI'], # 票圈最惊奇
  631. },
  632. 'videos_share_rate_7days': {
  633. 'data1:7days': APP_TYPE['VLOG'], # vlog
  634. }
  635. }
  636. # 广告模型用户分组类别
  637. AD_MID_GROUP = {
  638. 'class1': [
  639. 'return1mids',
  640. 'return2_3mids',
  641. 'return4_8mids',
  642. 'return9_24mids',
  643. 'return25_nmids',
  644. 'return0share1mids',
  645. 'return0share2_nmids'],
  646. 'class2': [
  647. 'return1mids',
  648. 'return2_3mids',
  649. 'return4_8mids',
  650. 'return9_24mids',
  651. 'return25_29nmids',
  652. 'return30_nmids',
  653. 'return0share1mids',
  654. 'return0share2_nmids'
  655. ]
  656. }
  657. # 免广告用户组列表
  658. NO_AD_MID_GROUP_LIST = {
  659. 'class1': ['return25_nmids'],
  660. 'class2': ['return30_nmids'],
  661. }
  662. # 广告模型用户数据
  663. AD_USER_PARAMS = {
  664. 'data_params': {
  665. 'data1': APP_TYPE['VLOG'], # vlog
  666. 'data2': APP_TYPE['LOVE_LIVE'], # 票圈视频
  667. 'data3': APP_TYPE['LONG_VIDEO'], # 内容精选
  668. 'data4': APP_TYPE['SHORT_VIDEO'], # 票圈短视频
  669. 'data5': APP_TYPE['LAO_HAO_KAN_VIDEO'], # 老好看视频
  670. 'data6': APP_TYPE['ZUI_JING_QI'], # 票圈最惊奇
  671. },
  672. 'rule_params': {
  673. 'rule1': {
  674. 'group_list': AD_MID_GROUP['class1'],
  675. 'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'],
  676. },
  677. 'rule2': {
  678. 'group_list': AD_MID_GROUP['class1'],
  679. 'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'],
  680. 'remove_no_ad_group': True, # mean_group 预测&计算阈值时,去除不出广告的用户组
  681. }, # 优化1
  682. 'rule3': {
  683. 'group_list': AD_MID_GROUP['class2'],
  684. 'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class2'],
  685. 'remove_no_ad_group': True, # mean_group 预测&计算阈值时,去除不出广告的用户组
  686. }, # 优化1 + 优化2
  687. },
  688. 'params_list': [
  689. {'data': 'data1', 'rule': 'rule1'},
  690. {'data': 'data1', 'rule': 'rule2'},
  691. {'data': 'data4', 'rule': 'rule1'},
  692. {'data': 'data1', 'rule': 'rule3'},
  693. {'data': 'data4', 'rule': 'rule3'},
  694. {'data': 'data2', 'rule': 'rule1'},
  695. {'data': 'data3', 'rule': 'rule1'},
  696. {'data': 'data2', 'rule': 'rule2'},
  697. ]
  698. }
  699. # 广告模型abtest配置
  700. AD_ABTEST_CONFIG = {
  701. # 票圈vlog
  702. '173-a': {'video': {'data': 'data1'},
  703. 'user': {'data': 'data1', 'rule': 'rule1'},
  704. 'threshold': {
  705. 'ab0': {'group': 13 / 24, 'mean_group': 13 / 24},
  706. 'ab1': {'group': 13 / 24, 'mean_group': 13 / 24},
  707. 'ab2': {'group': 13 / 24, 'mean_group': 13 / 24},
  708. 'ab3': {'group': 13 / 24, 'mean_group': 13 / 24},
  709. 'ab4': {'group': 13 / 24, 'mean_group': 13 / 24},
  710. 'ab5': {'group': 13 / 24, 'mean_group': 13 / 24},
  711. 'ab6': {'group': 13 / 24, 'mean_group': 13 / 24},
  712. 'ab7': {'group': 13 / 24, 'mean_group': 13 / 24},
  713. 'ab8': {'group': 13 / 24, 'mean_group': 13 / 24},
  714. 'ab9': {'group': 13 / 24, 'mean_group': 13 / 24},
  715. }},
  716. '173-b': {'video': {'data': 'data1'},
  717. 'user': {'data': 'data1', 'rule': 'rule2'},
  718. 'threshold': {
  719. 'ab0': {'group': 5 / 12, 'mean_group': 5 / 12},
  720. 'ab1': {'group': 5 / 12, 'mean_group': 5 / 12},
  721. 'ab2': {'group': 5 / 12, 'mean_group': 5 / 12},
  722. 'ab3': {'group': 5 / 12, 'mean_group': 5 / 12},
  723. 'ab4': {'group': 5 / 12, 'mean_group': 5 / 12},
  724. 'ab5': {'group': 5 / 12, 'mean_group': 5 / 12},
  725. 'ab6': {'group': 5 / 12, 'mean_group': 5 / 12},
  726. 'ab7': {'group': 5 / 12, 'mean_group': 5 / 12},
  727. 'ab8': {'group': 5 / 12, 'mean_group': 5 / 12},
  728. 'ab9': {'group': 5 / 12, 'mean_group': 5 / 12},
  729. }},
  730. '173-c': {'video': {'data': 'data1'},
  731. 'user': {'data': 'data1', 'rule': 'rule3'},
  732. 'threshold': {
  733. 'ab0': {'group': 11 / 24, 'mean_group': 11 / 24},
  734. 'ab1': {'group': 11 / 24, 'mean_group': 11 / 24},
  735. 'ab2': {'group': 11 / 24, 'mean_group': 11 / 24},
  736. 'ab3': {'group': 11 / 24, 'mean_group': 11 / 24},
  737. 'ab4': {'group': 11 / 24, 'mean_group': 11 / 24},
  738. 'ab5': {'group': 11 / 24, 'mean_group': 11 / 24},
  739. 'ab6': {'group': 11 / 24, 'mean_group': 11 / 24},
  740. 'ab7': {'group': 11 / 24, 'mean_group': 11 / 24},
  741. 'ab8': {'group': 11 / 24, 'mean_group': 11 / 24},
  742. 'ab9': {'group': 11 / 24, 'mean_group': 11 / 24},
  743. }},
  744. '173-d': {'video': {'data': 'data1:7days'},
  745. 'user': {'data': 'data1', 'rule': 'rule1'},
  746. 'threshold': {
  747. 'ab0': {'group': 1 / 3, 'mean_group': 1 / 3},
  748. 'ab1': {'group': 1 / 3, 'mean_group': 1 / 3},
  749. 'ab2': {'group': 1 / 3, 'mean_group': 1 / 3},
  750. 'ab3': {'group': 1 / 3, 'mean_group': 1 / 3},
  751. 'ab4': {'group': 1 / 3, 'mean_group': 1 / 3},
  752. 'ab5': {'group': 1 / 3, 'mean_group': 1 / 3},
  753. 'ab6': {'group': 1 / 3, 'mean_group': 1 / 3},
  754. 'ab7': {'group': 1 / 3, 'mean_group': 1 / 3},
  755. 'ab8': {'group': 1 / 3, 'mean_group': 1 / 3},
  756. 'ab9': {'group': 1 / 3, 'mean_group': 1 / 3},
  757. }},
  758. # 票圈视频+
  759. '190-a': {'video': {'data': 'data1'},
  760. 'user': {'data': 'data1', 'rule': 'rule1'},
  761. 'threshold': {
  762. 'ab0': {'group': 7 / 12, 'mean_group': 7 / 12},
  763. 'ab1': {'group': 7 / 12, 'mean_group': 7 / 12},
  764. 'ab2': {'group': 7 / 12, 'mean_group': 7 / 12},
  765. 'ab3': {'group': 7 / 12, 'mean_group': 7 / 12},
  766. 'ab4': {'group': 7 / 12, 'mean_group': 7 / 12},
  767. 'ab5': {'group': 7 / 12, 'mean_group': 7 / 12},
  768. 'ab6': {'group': 7 / 12, 'mean_group': 7 / 12},
  769. 'ab7': {'group': 7 / 12, 'mean_group': 7 / 12},
  770. 'ab8': {'group': 7 / 12, 'mean_group': 7 / 12},
  771. 'ab9': {'group': 7 / 12, 'mean_group': 7 / 12},
  772. }},
  773. '190-b': {'video': {'data': 'data1'},
  774. 'user': {'data': 'data1', 'rule': 'rule2'},
  775. 'threshold': {
  776. 'ab0': {'group': 7 / 12, 'mean_group': 7 / 12},
  777. 'ab1': {'group': 7 / 12, 'mean_group': 7 / 12},
  778. 'ab2': {'group': 7 / 12, 'mean_group': 7 / 12},
  779. 'ab3': {'group': 7 / 12, 'mean_group': 7 / 12},
  780. 'ab4': {'group': 7 / 12, 'mean_group': 7 / 12},
  781. 'ab5': {'group': 7 / 12, 'mean_group': 7 / 12},
  782. 'ab6': {'group': 7 / 12, 'mean_group': 7 / 12},
  783. 'ab7': {'group': 7 / 12, 'mean_group': 7 / 12},
  784. 'ab8': {'group': 7 / 12, 'mean_group': 7 / 12},
  785. 'ab9': {'group': 7 / 12, 'mean_group': 7 / 12},
  786. }},
  787. # 票圈视频
  788. '194-a': {'video': {'data': 'data1'},
  789. 'user': {'data': 'data1', 'rule': 'rule1'},
  790. 'threshold': {
  791. 'ab0': {'group': 11 / 24, 'mean_group': 11 / 24},
  792. 'ab1': {'group': 11 / 24, 'mean_group': 11 / 24},
  793. 'ab2': {'group': 11 / 24, 'mean_group': 11 / 24},
  794. 'ab3': {'group': 11 / 24, 'mean_group': 11 / 24},
  795. 'ab4': {'group': 11 / 24, 'mean_group': 11 / 24},
  796. 'ab5': {'group': 11 / 24, 'mean_group': 11 / 24},
  797. 'ab6': {'group': 11 / 24, 'mean_group': 11 / 24},
  798. 'ab7': {'group': 11 / 24, 'mean_group': 11 / 24},
  799. 'ab8': {'group': 11 / 24, 'mean_group': 11 / 24},
  800. 'ab9': {'group': 11 / 24, 'mean_group': 11 / 24},
  801. }},
  802. '194-b': {'video': {'data': 'data1'},
  803. 'user': {'data': 'data1', 'rule': 'rule2'},
  804. 'threshold': {
  805. 'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
  806. 'ab1': {'group': 1 / 2, 'mean_group': 1 / 2},
  807. 'ab2': {'group': 1 / 2, 'mean_group': 1 / 2},
  808. 'ab3': {'group': 1 / 2, 'mean_group': 1 / 2},
  809. 'ab4': {'group': 1 / 2, 'mean_group': 1 / 2},
  810. 'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
  811. 'ab6': {'group': 1 / 2, 'mean_group': 1 / 2},
  812. 'ab7': {'group': 1 / 2, 'mean_group': 1 / 2},
  813. 'ab8': {'group': 1 / 2, 'mean_group': 1 / 2},
  814. 'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
  815. }},
  816. '194-c': {'video': {'data': 'data2'},
  817. 'user': {'data': 'data2', 'rule': 'rule1'},
  818. 'threshold': {
  819. 'ab0': {'group': 0.6667, 'mean_group': 0.6667},
  820. 'ab1': {'group': 0.6667, 'mean_group': 0.6667},
  821. 'ab2': {'group': 0.6667, 'mean_group': 0.6667},
  822. 'ab3': {'group': 0.6667, 'mean_group': 0.6667},
  823. 'ab4': {'group': 0.6667, 'mean_group': 0.6667},
  824. 'ab5': {'group': 0.6667, 'mean_group': 0.6667},
  825. 'ab6': {'group': 0.6667, 'mean_group': 0.6667},
  826. 'ab7': {'group': 0.6667, 'mean_group': 0.6667},
  827. 'ab8': {'group': 0.6667, 'mean_group': 0.6667},
  828. 'ab9': {'group': 0.6667, 'mean_group': 0.6667},
  829. }}, # 本端数据
  830. '194-d': {'video': {'data': 'data2'},
  831. 'user': {'data': 'data2', 'rule': 'rule2'},
  832. 'threshold': {
  833. 'ab0': {'group': 0.6771, 'mean_group': 0.6771},
  834. 'ab1': {'group': 0.6771, 'mean_group': 0.6771},
  835. 'ab2': {'group': 0.6771, 'mean_group': 0.6771},
  836. 'ab3': {'group': 0.6771, 'mean_group': 0.6771},
  837. 'ab4': {'group': 0.6771, 'mean_group': 0.6771},
  838. 'ab5': {'group': 0.6771, 'mean_group': 0.6771},
  839. 'ab6': {'group': 0.6771, 'mean_group': 0.6771},
  840. 'ab7': {'group': 0.6771, 'mean_group': 0.6771},
  841. 'ab8': {'group': 0.6771, 'mean_group': 0.6771},
  842. 'ab9': {'group': 0.6771, 'mean_group': 0.6771},
  843. }}, # 本端数据 + 优化1
  844. # 内容精选
  845. '195-a': {'video': {'data': 'data1'},
  846. 'user': {'data': 'data1', 'rule': 'rule1'},
  847. 'threshold': {
  848. 'ab0': {'group': 11 / 24, 'mean_group': 11 / 24},
  849. 'ab1': {'group': 11 / 24, 'mean_group': 11 / 24},
  850. 'ab2': {'group': 11 / 24, 'mean_group': 11 / 24},
  851. 'ab3': {'group': 11 / 24, 'mean_group': 11 / 24},
  852. 'ab4': {'group': 11 / 24, 'mean_group': 11 / 24},
  853. 'ab5': {'group': 11 / 24, 'mean_group': 11 / 24},
  854. 'ab6': {'group': 11 / 24, 'mean_group': 11 / 24},
  855. 'ab7': {'group': 11 / 24, 'mean_group': 11 / 24},
  856. 'ab8': {'group': 11 / 24, 'mean_group': 11 / 24},
  857. 'ab9': {'group': 11 / 24, 'mean_group': 11 / 24},
  858. }},
  859. '195-b': {'video': {'data': 'data1'},
  860. 'user': {'data': 'data1', 'rule': 'rule2'},
  861. 'threshold': {
  862. 'ab0': {'group': 23 / 48, 'mean_group': 23 / 48},
  863. 'ab1': {'group': 23 / 48, 'mean_group': 23 / 48},
  864. 'ab2': {'group': 23 / 48, 'mean_group': 23 / 48},
  865. 'ab3': {'group': 23 / 48, 'mean_group': 23 / 48},
  866. 'ab4': {'group': 23 / 48, 'mean_group': 23 / 48},
  867. 'ab5': {'group': 23 / 48, 'mean_group': 23 / 48},
  868. 'ab6': {'group': 23 / 48, 'mean_group': 23 / 48},
  869. 'ab7': {'group': 23 / 48, 'mean_group': 23 / 48},
  870. 'ab8': {'group': 23 / 48, 'mean_group': 23 / 48},
  871. 'ab9': {'group': 23 / 48, 'mean_group': 23 / 48},
  872. }},
  873. '195-c': {'video': {'data': 'data3'},
  874. 'user': {'data': 'data3', 'rule': 'rule1'},
  875. 'threshold': {
  876. 'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
  877. 'ab1': {'group': 1 / 2, 'mean_group': 1 / 2},
  878. 'ab2': {'group': 1 / 2, 'mean_group': 1 / 2},
  879. 'ab3': {'group': 1 / 2, 'mean_group': 1 / 2},
  880. 'ab4': {'group': 1 / 2, 'mean_group': 1 / 2},
  881. 'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
  882. 'ab6': {'group': 1 / 2, 'mean_group': 1 / 2},
  883. 'ab7': {'group': 1 / 2, 'mean_group': 1 / 2},
  884. 'ab8': {'group': 1 / 2, 'mean_group': 1 / 2},
  885. 'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
  886. }}, # 本端数据
  887. # 票圈短视频
  888. '196-a': {'video': {'data': 'data1'},
  889. 'user': {'data': 'data1', 'rule': 'rule1'},
  890. 'threshold': {
  891. 'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
  892. 'ab1': {'group': 1 / 2, 'mean_group': 1 / 2},
  893. 'ab2': {'group': 1 / 2, 'mean_group': 1 / 2},
  894. 'ab3': {'group': 1 / 2, 'mean_group': 1 / 2},
  895. 'ab4': {'group': 1 / 2, 'mean_group': 1 / 2},
  896. 'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
  897. 'ab6': {'group': 1 / 2, 'mean_group': 1 / 2},
  898. 'ab7': {'group': 1 / 2, 'mean_group': 1 / 2},
  899. 'ab8': {'group': 1 / 2, 'mean_group': 1 / 2},
  900. 'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
  901. }},
  902. '196-b': {'video': {'data': 'data4'},
  903. 'user': {'data': 'data4', 'rule': 'rule1'},
  904. 'threshold': {
  905. 'ab0': {'group': 23 / 48, 'mean_group': 23 / 48},
  906. 'ab1': {'group': 23 / 48, 'mean_group': 23 / 48},
  907. 'ab2': {'group': 23 / 48, 'mean_group': 23 / 48},
  908. 'ab3': {'group': 23 / 48, 'mean_group': 23 / 48},
  909. 'ab4': {'group': 23 / 48, 'mean_group': 23 / 48},
  910. 'ab5': {'group': 23 / 48, 'mean_group': 23 / 48},
  911. 'ab6': {'group': 23 / 48, 'mean_group': 23 / 48},
  912. 'ab7': {'group': 23 / 48, 'mean_group': 23 / 48},
  913. 'ab8': {'group': 23 / 48, 'mean_group': 23 / 48},
  914. 'ab9': {'group': 23 / 48, 'mean_group': 23 / 48},
  915. }},
  916. '196-c': {'video': {'data': 'data4'},
  917. 'user': {'data': 'data4', 'rule': 'rule3'},
  918. 'threshold': {
  919. 'ab0': {'group': 23 / 48, 'mean_group': 23 / 48},
  920. 'ab1': {'group': 23 / 48, 'mean_group': 23 / 48},
  921. 'ab2': {'group': 23 / 48, 'mean_group': 23 / 48},
  922. 'ab3': {'group': 23 / 48, 'mean_group': 23 / 48},
  923. 'ab4': {'group': 23 / 48, 'mean_group': 23 / 48},
  924. 'ab5': {'group': 23 / 48, 'mean_group': 23 / 48},
  925. 'ab6': {'group': 23 / 48, 'mean_group': 23 / 48},
  926. 'ab7': {'group': 23 / 48, 'mean_group': 23 / 48},
  927. 'ab8': {'group': 23 / 48, 'mean_group': 23 / 48},
  928. 'ab9': {'group': 23 / 48, 'mean_group': 23 / 48},
  929. }},
  930. # 老好看视频
  931. '197-a': {'video': {'data': 'data1'},
  932. 'user': {'data': 'data1', 'rule': 'rule1'},
  933. 'threshold': {
  934. 'ab0': {'group': 25 / 48, 'mean_group': 25 / 48},
  935. 'ab1': {'group': 25 / 48, 'mean_group': 25 / 48},
  936. 'ab2': {'group': 25 / 48, 'mean_group': 25 / 48},
  937. 'ab3': {'group': 25 / 48, 'mean_group': 25 / 48},
  938. 'ab4': {'group': 25 / 48, 'mean_group': 25 / 48},
  939. 'ab5': {'group': 25 / 48, 'mean_group': 25 / 48},
  940. 'ab6': {'group': 25 / 48, 'mean_group': 25 / 48},
  941. 'ab7': {'group': 25 / 48, 'mean_group': 25 / 48},
  942. 'ab8': {'group': 25 / 48, 'mean_group': 25 / 48},
  943. 'ab9': {'group': 25 / 48, 'mean_group': 25 / 48},
  944. }},
  945. '197-b': {'video': {'data': 'data1'},
  946. 'user': {'data': 'data1', 'rule': 'rule2'},
  947. 'threshold': {
  948. 'ab0': {'group': 25 / 48, 'mean_group': 25 / 48},
  949. 'ab1': {'group': 25 / 48, 'mean_group': 25 / 48},
  950. 'ab2': {'group': 25 / 48, 'mean_group': 25 / 48},
  951. 'ab3': {'group': 25 / 48, 'mean_group': 25 / 48},
  952. 'ab4': {'group': 25 / 48, 'mean_group': 25 / 48},
  953. 'ab5': {'group': 25 / 48, 'mean_group': 25 / 48},
  954. 'ab6': {'group': 25 / 48, 'mean_group': 25 / 48},
  955. 'ab7': {'group': 25 / 48, 'mean_group': 25 / 48},
  956. 'ab8': {'group': 25 / 48, 'mean_group': 25 / 48},
  957. 'ab9': {'group': 25 / 48, 'mean_group': 25 / 48},
  958. }},
  959. # 票圈最惊奇
  960. '198-a': {'video': {'data': 'data1'},
  961. 'user': {'data': 'data1', 'rule': 'rule1'},
  962. 'threshold': {
  963. 'ab0': {'group': 7 / 18, 'mean_group': 7 / 18},
  964. 'ab1': {'group': 7 / 18, 'mean_group': 7 / 18},
  965. 'ab2': {'group': 7 / 18, 'mean_group': 7 / 18},
  966. 'ab3': {'group': 7 / 18, 'mean_group': 7 / 18},
  967. 'ab4': {'group': 7 / 18, 'mean_group': 7 / 18},
  968. 'ab5': {'group': 7 / 18, 'mean_group': 7 / 18},
  969. 'ab6': {'group': 7 / 18, 'mean_group': 7 / 18},
  970. 'ab7': {'group': 7 / 18, 'mean_group': 7 / 18},
  971. 'ab8': {'group': 7 / 18, 'mean_group': 7 / 18},
  972. 'ab9': {'group': 7 / 18, 'mean_group': 7 / 18},
  973. }},
  974. '198-b': {'video': {'data': 'data1'},
  975. 'user': {'data': 'data1', 'rule': 'rule1'},
  976. 'threshold': {
  977. 'ab0': {'group': 7 / 18, 'mean_group': 7 / 18},
  978. 'ab1': {'group': 7 / 18, 'mean_group': 7 / 18},
  979. 'ab2': {'group': 7 / 18, 'mean_group': 7 / 18},
  980. 'ab3': {'group': 7 / 18, 'mean_group': 7 / 18},
  981. 'ab4': {'group': 7 / 18, 'mean_group': 7 / 18},
  982. 'ab5': {'group': 7 / 18, 'mean_group': 7 / 18},
  983. 'ab6': {'group': 7 / 18, 'mean_group': 7 / 18},
  984. 'ab7': {'group': 7 / 18, 'mean_group': 7 / 18},
  985. 'ab8': {'group': 7 / 18, 'mean_group': 7 / 18},
  986. 'ab9': {'group': 7 / 18, 'mean_group': 7 / 18},
  987. }},
  988. }
  989. # 广告模型abtest分组配置
  990. AD_ABTEST_ABCODE_CONFIG = {
  991. # 票圈vlog
  992. # APP_TYPE['VLOG']: {
  993. # 'ab_test_id': 173,
  994. # 'ab_test_config': {"a": ["ab1"], "b": ["ab3", "ab4", "ab6", "ab7", "ab8"], "c": [], "d": ["ab2"]},
  995. # 'threshold_update': 1/24,
  996. # },
  997. # 票圈视频+
  998. # APP_TYPE['PIAO_QUAN_VIDEO_PLUS']: {
  999. # 'ab_test_id': 190,
  1000. # 'ab_test_config': {"a": ["ab1"], "b": ["ab6", "ab7", "ab2", "ab3"]},
  1001. # 'threshold_update': 1 / 24,
  1002. # },
  1003. # 票圈视频
  1004. APP_TYPE['LOVE_LIVE']: {
  1005. 'ab_test_id': 194,
  1006. 'ab_test_config': {"a": ["ab6", "ab7", "ab8"], "b": ["ab3", "ab4"], "c": ["ab2"], "d": ["ab1"]},
  1007. 'up_threshold_update': {
  1008. 'a': {'gradient': 0.05, 'update_range': 1 / 24},
  1009. 'b': {'gradient': 0.05, 'update_range': 1 / 24},
  1010. 'c': {'gradient': 0.1, 'update_range': 1 / 192},
  1011. 'd': {'gradient': 0.1, 'update_range': 1 / 192},
  1012. },
  1013. 'down_threshold_update': {
  1014. 'a': {'gradient': 0.1, 'update_range': 1 / 12},
  1015. 'b': {'gradient': 0.1, 'update_range': 1 / 12},
  1016. 'c': {'gradient': 0.1, 'update_range': 1 / 12},
  1017. 'd': {'gradient': 0.1, 'update_range': 1 / 12},
  1018. },
  1019. },
  1020. # 内容精选
  1021. # APP_TYPE['LONG_VIDEO']: {
  1022. # 'ab_test_id': 195,
  1023. # 'ab_test_config': {"b": [], "c": ["ab1", "ab2"]},
  1024. # 'threshold_update': 1 / 24,
  1025. # },
  1026. # 票圈短视频
  1027. # APP_TYPE['SHORT_VIDEO']: {
  1028. # 'ab_test_id': 196,
  1029. # 'ab_test_config': {"a": [], "b": [], "c": ["ab2", "ab3", "ab1", "ab9"]},
  1030. # 'threshold_update': 1 / 24,
  1031. # },
  1032. # 老好看视频
  1033. # APP_TYPE['LAO_HAO_KAN_VIDEO']: {
  1034. # 'ab_test_id': 197,
  1035. # 'ab_test_config': {"a": ["ab0", "ab100", "ab6", "ab7", "ab8", "ab9"],
  1036. # "b": ["ab1", "ab2", "ab3", "ab4", "ab5"]},
  1037. # 'threshold_update': 1 / 24,
  1038. # },
  1039. # 票圈最惊奇
  1040. # APP_TYPE['ZUI_JING_QI']: {
  1041. # 'ab_test_id': 198,
  1042. # 'ab_test_config': {"a": ["ab3", "ab6", "ab7"], "b": ["ab8", "ab9"]},
  1043. # 'threshold_update': 1 / 24,
  1044. # },
  1045. }
  1046. # 用户组有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:users:group:predict:share:rate:{user_data_key}:{user_rule_key}:{date}
  1047. KEY_NAME_PREFIX_AD_GROUP = 'ad:users:group:predict:share:rate:'
  1048. # 视频有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:video:predict:share:rate:{video_data_key}:{date}
  1049. KEY_NAME_PREFIX_AD_VIDEO = 'ad:video:predict:share:rate:'
  1050. # 用户分组结果存放 redis key 前缀,完整格式:mid:group:{class_key}:{mid}
  1051. KEY_NAME_PREFIX_MID_GROUP = 'mid:group:'
  1052. # 广告推荐阈值结果存放 redis key 前缀,完整格式:ad:threshold:{abtestId}:{abtestConfigTag}:{abtestGroup}:{group}
  1053. KEY_NAME_PREFIX_AD_THRESHOLD = 'ad:threshold:'
  1054. # 广告推荐阈值计算记录存放 redis key,完整格式:ad:threshold:record
  1055. KEY_NAME_PREFIX_AD_THRESHOLD_RECORD = 'ad:threshold:record'
  1056. class DevelopmentConfig(BaseConfig):
  1057. """开发环境配置"""
  1058. # 报警内容 环境区分
  1059. ENV_TEXT = "开发环境"
  1060. # 项目存放目录
  1061. PROJECT_PATH = '/data2/rov-offline'
  1062. # 测试环境redis地址
  1063. REDIS_INFO = {
  1064. 'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com',
  1065. 'port': 6379,
  1066. 'password': 'Wqsd@2019',
  1067. }
  1068. # Hologres连接参数,本地使用
  1069. HOLOGRES_INFO = {
  1070. 'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou.hologres.aliyuncs.com',
  1071. 'port': 80,
  1072. 'dbname': 'dssm',
  1073. 'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
  1074. 'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
  1075. }
  1076. # 测试环境mysql地址
  1077. MYSQL_INFO = {
  1078. 'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
  1079. 'port': 3306,
  1080. 'user': 'wx2016_longvideo',
  1081. 'password': 'wx2016_longvideoP@assword1234',
  1082. 'db': 'longvideo',
  1083. 'charset': 'utf8'
  1084. }
  1085. # 测试环境 过滤用mysql地址
  1086. FILTER_MYSQL_INFO = {
  1087. 'host': 'am-bp1g3ys9u00u483uc131930.ads.aliyuncs.com',
  1088. 'port': 3306,
  1089. 'user': 'lv_manager',
  1090. 'password': 'lv_manager@2020',
  1091. 'db': 'longvideo',
  1092. 'charset': 'utf8'
  1093. }
  1094. # 日志服务配置
  1095. ALIYUN_LOG = {
  1096. 'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
  1097. 'ACCESSID': 'LTAIWYUujJAm7CbH',
  1098. 'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
  1099. 'PROJECT': 'rov-server-test',
  1100. }
  1101. # Hologres视频状态存储表名
  1102. VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat'
  1103. # 快速曝光流量池ID
  1104. QUICK_FLOW_POOL_ID = 3
  1105. # 获取流量池分发配置接口地址
  1106. GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getConfig'
  1107. # 从流量池获取视频接口地址
  1108. GET_VIDEOS_FROM_POOL_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
  1109. # 获取视频在流量池中的剩余可分发数接口地址
  1110. GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
  1111. # 计算完ROV通知后端接口地址
  1112. NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore'
  1113. # 获取置顶视频列表接口地址
  1114. TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList'
  1115. # 获取首页兜底视频json接口地址
  1116. BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list'
  1117. # 通知后端更新兜底视频接口地址
  1118. NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
  1119. # 获取限流视频接口地址
  1120. GET_VIDEO_LIMIT_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getVideoLimitList'
  1121. # logs 上传oss 目标Bucket指定目录
  1122. OSS_FOLDER_LOGS = 'rov-offline/dev/logs/'
  1123. # data 上传oss 目标Bucket指定目录
  1124. OSS_FOLDER_DATA = 'rov-offline/dev/data/'
  1125. class TestConfig(BaseConfig):
  1126. """测试环境配置"""
  1127. # 报警内容 环境区分
  1128. ENV_TEXT = "测试环境"
  1129. # 项目存放目录
  1130. PROJECT_PATH = '/data2/rov-offline'
  1131. # 测试环境redis地址
  1132. REDIS_INFO = {
  1133. 'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com',
  1134. 'port': 6379,
  1135. 'password': 'Wqsd@2019',
  1136. }
  1137. # Hologres连接参数,服务器使用
  1138. HOLOGRES_INFO = {
  1139. 'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
  1140. 'port': 80,
  1141. 'dbname': 'dssm',
  1142. 'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
  1143. 'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
  1144. }
  1145. # 测试环境mysql地址
  1146. MYSQL_INFO = {
  1147. 'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
  1148. 'port': 3306,
  1149. 'user': 'wx2016_longvideo',
  1150. 'password': 'wx2016_longvideoP@assword1234',
  1151. 'db': 'longvideo',
  1152. 'charset': 'utf8'
  1153. }
  1154. # 测试环境 过滤用mysql地址
  1155. FILTER_MYSQL_INFO = {
  1156. 'host': 'am-bp1g3ys9u00u483uc131930.ads.aliyuncs.com',
  1157. 'port': 3306,
  1158. 'user': 'lv_manager',
  1159. 'password': 'lv_manager@2020',
  1160. 'db': 'longvideo',
  1161. 'charset': 'utf8'
  1162. }
  1163. # 日志服务配置
  1164. ALIYUN_LOG = {
  1165. 'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
  1166. 'ACCESSID': 'LTAIWYUujJAm7CbH',
  1167. 'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
  1168. 'PROJECT': 'rov-server-test',
  1169. }
  1170. # Hologres视频状态存储表名
  1171. VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat'
  1172. # 快速曝光流量池ID
  1173. QUICK_FLOW_POOL_ID = 3
  1174. # 获取流量池分发配置接口地址
  1175. GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getConfig'
  1176. # 从流量池获取视频接口地址
  1177. GET_VIDEOS_FROM_POOL_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
  1178. # 获取视频在流量池中的剩余可分发数接口地址
  1179. GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
  1180. # 计算完ROV通知后端接口地址
  1181. NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore'
  1182. # 获取置顶视频列表接口地址
  1183. TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList'
  1184. # 获取首页兜底视频json接口地址
  1185. BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list'
  1186. # 通知后端更新兜底视频接口地址
  1187. NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
  1188. # 获取限流视频接口地址
  1189. GET_VIDEO_LIMIT_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getVideoLimitList'
  1190. # logs 上传oss 目标Bucket指定目录
  1191. OSS_FOLDER_LOGS = 'rov-offline/test/logs/'
  1192. # data 上传oss 目标Bucket指定目录
  1193. OSS_FOLDER_DATA = 'rov-offline/test/data/'
  1194. class PreProductionConfig(BaseConfig):
  1195. """预发布环境配置"""
  1196. # 报警内容 环境区分
  1197. ENV_TEXT = "预发布环境"
  1198. # 项目存放目录
  1199. PROJECT_PATH = '/data/rov-offline'
  1200. # redis地址
  1201. REDIS_INFO = {
  1202. 'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com',
  1203. 'port': 6379,
  1204. 'password': 'Wqsd@2019',
  1205. }
  1206. # Hologres连接参数,服务器使用
  1207. HOLOGRES_INFO = {
  1208. 'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
  1209. 'port': 80,
  1210. 'dbname': 'dssm',
  1211. 'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
  1212. 'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
  1213. }
  1214. # 生产环境mysql地址
  1215. MYSQL_INFO = {
  1216. 'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com',
  1217. 'port': 3306,
  1218. 'user': 'wx2016_longvideo',
  1219. 'password': 'wx2016_longvideoP@assword1234',
  1220. 'db': 'longvideo',
  1221. 'charset': 'utf8'
  1222. }
  1223. # 生产环境 过滤用mysql地址
  1224. FILTER_MYSQL_INFO = {
  1225. 'host': 'am-bp15tqt957i3b3sgi131950.ads.aliyuncs.com',
  1226. 'port': 3306,
  1227. 'user': 'lv_manager',
  1228. 'password': 'lv_manager@2020',
  1229. 'db': 'longvideo',
  1230. 'charset': 'utf8'
  1231. }
  1232. # 日志服务配置
  1233. ALIYUN_LOG = {
  1234. 'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
  1235. 'ACCESSID': 'LTAIWYUujJAm7CbH',
  1236. 'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
  1237. 'PROJECT': 'rov-server',
  1238. }
  1239. # Hologres视频状态存储表名
  1240. VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat'
  1241. # 快速曝光流量池ID
  1242. QUICK_FLOW_POOL_ID = 3
  1243. # 获取流量池分发配置接口地址
  1244. GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://prespeed-internal.piaoquantv.com/longvideoapi/openapi/recommend/getConfig'
  1245. # 从流量池获取视频接口地址
  1246. GET_VIDEOS_FROM_POOL_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
  1247. # 获取视频在流量池中的剩余可分发数接口地址
  1248. GET_REMAIN_VIEW_COUNT_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
  1249. # 计算完ROV通知后端接口地址
  1250. NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore'
  1251. # 获取置顶视频列表接口地址
  1252. TOP_VIDEO_LIST_URL = 'http://speedpre.wx.com/longvideoapi/openapi/recommend/topVideoList'
  1253. # 获取首页兜底视频json接口地址
  1254. BOTTOM_JSON_URL = 'http://speedpre.wx.com/longvideoapi/openapi/video/distribute/structure/video/list'
  1255. # 通知后端更新兜底视频接口地址
  1256. NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
  1257. # 获取限流视频接口地址
  1258. GET_VIDEO_LIMIT_LIST_URL = 'http://prespeed-internal.piaoquantv.com/longvideoapi/openapi/recommend/getVideoLimitList'
  1259. # logs 上传oss 目标Bucket指定目录
  1260. OSS_FOLDER_LOGS = 'rov-offline/pre/logs/'
  1261. # data 上传oss 目标Bucket指定目录
  1262. OSS_FOLDER_DATA = 'rov-offline/pre/data/'
  1263. class ProductionConfig(BaseConfig):
  1264. """生产环境配置"""
  1265. # 报警内容 环境区分
  1266. ENV_TEXT = "生产环境"
  1267. # 项目存放目录
  1268. PROJECT_PATH = '/data/rov-offline'
  1269. # 线上环境redis地址
  1270. REDIS_INFO = {
  1271. 'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com',
  1272. 'port': 6379,
  1273. 'password': 'Wqsd@2019',
  1274. }
  1275. # Hologres连接参数,服务器使用
  1276. HOLOGRES_INFO = {
  1277. 'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
  1278. 'port': 80,
  1279. 'dbname': 'dssm',
  1280. 'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
  1281. 'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
  1282. }
  1283. # 生产环境mysql地址
  1284. MYSQL_INFO = {
  1285. 'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com',
  1286. 'port': 3306,
  1287. 'user': 'wx2016_longvideo',
  1288. 'password': 'wx2016_longvideoP@assword1234',
  1289. 'db': 'longvideo',
  1290. 'charset': 'utf8'
  1291. }
  1292. # 生产环境 过滤用mysql地址
  1293. FILTER_MYSQL_INFO = {
  1294. 'host': 'am-bp15tqt957i3b3sgi131950.ads.aliyuncs.com',
  1295. 'port': 3306,
  1296. 'user': 'lv_manager',
  1297. 'password': 'lv_manager@2020',
  1298. 'db': 'longvideo',
  1299. 'charset': 'utf8'
  1300. }
  1301. # 日志服务配置
  1302. ALIYUN_LOG = {
  1303. 'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
  1304. 'ACCESSID': 'LTAIWYUujJAm7CbH',
  1305. 'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
  1306. 'PROJECT': 'rov-server',
  1307. }
  1308. # Hologres视频状态存储表名
  1309. VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat'
  1310. # 快速曝光流量池ID
  1311. QUICK_FLOW_POOL_ID = 3
  1312. # 获取流量池分发配置接口地址
  1313. GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/getConfig'
  1314. # 从流量池获取视频接口地址
  1315. GET_VIDEOS_FROM_POOL_URL = 'http://api-internal.piaoquantv.com/flowpool/video/getAllVideo'
  1316. # 获取视频在流量池中的剩余可分发数接口地址
  1317. GET_REMAIN_VIEW_COUNT_URL = 'http://api-internal.piaoquantv.com/flowpool/video/remainViewCount'
  1318. # 计算完ROV通知后端接口地址
  1319. NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore'
  1320. # 获取置顶视频列表接口地址
  1321. TOP_VIDEO_LIST_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/topVideoList'
  1322. # 获取首页兜底视频json接口地址
  1323. BOTTOM_JSON_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/video/distribute/structure/video/list'
  1324. # 通知后端更新兜底视频接口地址
  1325. NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
  1326. # 获取限流视频接口地址
  1327. GET_VIDEO_LIMIT_LIST_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/getVideoLimitList'
  1328. # logs 上传oss 目标Bucket指定目录
  1329. OSS_FOLDER_LOGS = 'rov-offline/pro/logs/'
  1330. # data 上传oss 目标Bucket指定目录
  1331. OSS_FOLDER_DATA = 'rov-offline/pro/data/'
  1332. def set_config():
  1333. # 获取环境变量 ROV_OFFLINE_ENV
  1334. env = os.environ.get('ROV_OFFLINE_ENV')
  1335. # env = 'dev'
  1336. if env is None:
  1337. # log_.error('ENV ERROR: is None!')
  1338. return
  1339. if env == 'dev':
  1340. return DevelopmentConfig(), env
  1341. elif env == 'test':
  1342. return TestConfig(), env
  1343. elif env == 'pre':
  1344. return PreProductionConfig(), env
  1345. elif env == 'pro':
  1346. return ProductionConfig(), env
  1347. else:
  1348. # log_.error('ENV ERROR: is {}'.format(env))
  1349. return