search_schedule.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. """
  2. @author: luojunhui
  3. 调用接口在微信内搜索视频
  4. """
  5. from applications.search import *
  6. from applications.static.config import gh_id_dict, ab_test_config
  7. from applications.functions.log import logging
  8. from applications.functions.video_item import video_mq_sender
  9. class SearchABTest(object):
  10. """
  11. 搜索策略实验方案
  12. """
  13. ori_title = None
  14. article_summary = None
  15. article_keys = None
  16. gh_id = None
  17. trace_id = None
  18. def __init__(self, info, gh_id):
  19. SearchABTest.set_class_properties(info, gh_id)
  20. @classmethod
  21. def set_class_properties(cls, info, gh_id):
  22. """
  23. 初始化搜索策略实验类
  24. :param info: kimi 挖掘的基本信息
  25. :param gh_id: 公众号账号 id
  26. :return:
  27. """
  28. cls.ori_title = info["ori_title"]
  29. cls.article_summary = info["content_title"]
  30. cls.article_keys = info["content_keys"]
  31. cls.trace_id = info["trace_id"]
  32. cls.gh_id = gh_id
  33. @classmethod
  34. def dd(cls):
  35. """
  36. 兜底
  37. :return:
  38. """
  39. wx_result_ = wx_search(keys=cls.article_keys[0])
  40. if wx_result_:
  41. logging(
  42. code="7011",
  43. info="微信兜底搜索成功",
  44. trace_id=cls.trace_id,
  45. )
  46. return {"platform": "wx_search", "result": wx_result_[0]}
  47. else:
  48. baidu_result_ = hksp_search(key=cls.article_keys[0])
  49. if baidu_result_:
  50. logging(
  51. code="7011",
  52. info="百度兜底搜索成功",
  53. trace_id=cls.trace_id,
  54. )
  55. return {"platform": "baidu_search", "result": baidu_result_[0]}
  56. else:
  57. return None
  58. @classmethod
  59. def ab_0(cls):
  60. """
  61. 默认搜索逻辑
  62. :return:
  63. """
  64. wx_result = wx_search(keys=cls.ori_title)
  65. if wx_result:
  66. return {"platform": "wx_search", "result": wx_result[0]}
  67. else:
  68. logging(
  69. code="7001",
  70. info="通过微信搜索失败---{}".format(cls.ori_title),
  71. trace_id=cls.trace_id,
  72. )
  73. # 微信搜不到的话,采用好看视频搜索
  74. baidu_result = hksp_search(key=cls.ori_title)
  75. if baidu_result:
  76. return {"platform": "baidu_search", "result": baidu_result[0]}
  77. else:
  78. # 若好看视频未搜到,则采用西瓜搜索
  79. logging(
  80. code="7001",
  81. info="通过baidu搜索失败---{}".format(cls.ori_title),
  82. trace_id=cls.trace_id,
  83. )
  84. xigua_result = xigua_search(keyword=cls.ori_title)
  85. if xigua_result:
  86. return {"platform": "xg_search", "result": xigua_result[0]}
  87. else:
  88. logging(
  89. code="7001",
  90. info="通过西瓜搜索失败---{}, 启用兜底方式".format(cls.ori_title),
  91. trace_id=cls.trace_id,
  92. )
  93. return cls.dd()
  94. @classmethod
  95. def ab_1(cls):
  96. """
  97. :return:
  98. """
  99. wx_result = wx_search(keys=cls.article_summary)
  100. if wx_result:
  101. return {"platform": "wx_search", "result": wx_result[0]}
  102. else:
  103. logging(
  104. code="7001",
  105. info="通过微信搜索失败---{}".format(cls.article_summary),
  106. trace_id=cls.trace_id,
  107. )
  108. # 微信搜不到的话,采用好看视频搜索
  109. baidu_result = hksp_search(key=cls.article_summary)
  110. if baidu_result:
  111. return {"platform": "baidu_search", "result": baidu_result[0]}
  112. else:
  113. # 若好看视频未搜到,则采用西瓜搜索
  114. logging(
  115. code="7001",
  116. info="通过baidu搜索失败---{}".format(cls.article_summary),
  117. trace_id=cls.trace_id,
  118. )
  119. xigua_result = xigua_search(keyword=cls.article_summary)
  120. if xigua_result:
  121. return {"platform": "xg_search", "result": xigua_result[0]}
  122. else:
  123. logging(
  124. code="7001",
  125. info="通过西瓜搜索失败---{},启用兜底方式".format(cls.article_summary),
  126. trace_id=cls.trace_id,
  127. )
  128. return cls.dd()
  129. @classmethod
  130. def ab_2(cls):
  131. """
  132. ori_title + wx
  133. :return:
  134. """
  135. wx_result = wx_search(keys=",".join(cls.article_keys))
  136. if wx_result:
  137. return {"platform": "wx_search", "result": wx_result[0]}
  138. else:
  139. logging(
  140. code="7001",
  141. info="通过微信搜索失败---{}".format(",".join(cls.article_keys)),
  142. trace_id=cls.trace_id,
  143. )
  144. # 微信搜不到的话,采用好看视频搜索
  145. baidu_result = hksp_search(key=",".join(cls.article_keys))
  146. if baidu_result:
  147. return {"platform": "baidu_search", "result": baidu_result[0]}
  148. else:
  149. # 若好看视频未搜到,则采用西瓜搜索
  150. logging(
  151. code="7001",
  152. info="通过baidu搜索失败---{}".format(",".join(cls.article_keys)),
  153. trace_id=cls.trace_id,
  154. )
  155. xigua_result = xigua_search(keyword=",".join(cls.article_keys))
  156. if xigua_result:
  157. return {"platform": "xg_search", "result": xigua_result[0]}
  158. else:
  159. logging(
  160. code="7001",
  161. info="通过西瓜搜索失败---{},启用兜底".format(",".join(cls.article_keys)),
  162. trace_id=cls.trace_id,
  163. )
  164. return cls.dd()
  165. @classmethod
  166. def ab_3(cls):
  167. """
  168. article_summary + baidu
  169. :return:
  170. """
  171. result = hksp_search(key=cls.article_summary)
  172. return {"platform": "baidu_search", "result": result[0] if result else []}
  173. @classmethod
  174. def ab_4(cls):
  175. """
  176. article_summary + weixin
  177. :return:
  178. """
  179. result = wx_search(keys=cls.article_summary)
  180. return {"platform": "wx_search", "result": result[0] if result else []}
  181. @classmethod
  182. def ab_5(cls):
  183. """
  184. article_keys + weixin
  185. :return:
  186. """
  187. result = wx_search(keys=",".join(cls.article_keys))
  188. return {"platform": "wx_search", "result": result[0] if result else []}
  189. @classmethod
  190. def ab_6(cls):
  191. """
  192. article_keys + baidu
  193. :return:
  194. """
  195. result = hksp_search(key=",".join(cls.article_keys))
  196. return {"platform": "baidu_search", "result": result[0] if result else []}
  197. async def search_videos(kimi_info, trace_id, gh_id):
  198. """
  199. search and send msg to ETL
  200. :param kimi_info:
  201. :param gh_id: 通过账号 id 来控制实验策略
  202. :param trace_id:
  203. :return:
  204. """
  205. kimi_info["trace_id"] = trace_id
  206. SearchAB = SearchABTest(info=kimi_info, gh_id=gh_id)
  207. if ab_test_config.get(gh_id):
  208. test_id = ab_test_config[gh_id]
  209. if test_id == 0:
  210. recall_obj = SearchAB.ab_0()
  211. elif test_id == 1:
  212. recall_obj = SearchAB.ab_1()
  213. elif test_id == 2:
  214. recall_obj = SearchAB.ab_2()
  215. # elif test_id == 3:
  216. # recall_obj = SearchAB.ab_3()
  217. # elif test_id == 4:
  218. # recall_obj = SearchAB.ab_4()
  219. # elif test_id == 5:
  220. # recall_obj = SearchAB.ab_5()
  221. # elif test_id == 6:
  222. # recall_obj = SearchAB.ab_6()
  223. else:
  224. recall_obj = {}
  225. else:
  226. recall_obj = SearchAB.ab_0()
  227. if recall_obj:
  228. platform = recall_obj["platform"]
  229. recall_video = recall_obj["result"]
  230. if recall_video:
  231. logging(
  232. code="7002",
  233. info="视频搜索成功, 搜索平台为--{}".format(platform),
  234. trace_id=trace_id,
  235. data=recall_video,
  236. )
  237. video_id, video_url = await video_mq_sender(
  238. video_obj=recall_video,
  239. user=gh_id_dict.get(gh_id),
  240. trace_id=trace_id,
  241. platform=platform,
  242. )
  243. return video_id, video_url
  244. else:
  245. logging(code="7003", info="视频搜索失败", trace_id=trace_id)
  246. return None