search_schedule.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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 ab_0(cls):
  35. """
  36. 默认搜索逻辑
  37. :return:
  38. """
  39. wx_result = wx_search(keys=cls.ori_title)
  40. if wx_result:
  41. return {"platform": "wx_search", "result": wx_result[0]}
  42. else:
  43. logging(
  44. code="7001",
  45. info="通过微信搜索失败---{}".format(cls.ori_title),
  46. trace_id=cls.trace_id,
  47. )
  48. # 微信搜不到的话,采用好看视频搜索
  49. baidu_result = hksp_search(key=cls.ori_title)
  50. if baidu_result:
  51. return {"platform": "baidu_search", "result": baidu_result[0]}
  52. else:
  53. # 若好看视频未搜到,则采用西瓜搜索
  54. logging(
  55. code="7001",
  56. info="通过baidu搜索失败---{}".format(cls.ori_title),
  57. trace_id=cls.trace_id,
  58. )
  59. xigua_result = xigua_search(keyword=cls.ori_title)
  60. if xigua_result:
  61. return {"platform": "xg_search", "result": xigua_result[0]}
  62. else:
  63. logging(
  64. code="7001",
  65. info="通过西瓜搜索失败---{}".format(cls.ori_title),
  66. trace_id=cls.trace_id,
  67. )
  68. return None
  69. @classmethod
  70. def ab_1(cls):
  71. """
  72. :return:
  73. """
  74. wx_result = wx_search(keys=cls.article_summary)
  75. if wx_result:
  76. return {"platform": "wx_search", "result": wx_result[0]}
  77. else:
  78. logging(
  79. code="7001",
  80. info="通过微信搜索失败---{}".format(cls.article_summary),
  81. trace_id=cls.trace_id,
  82. )
  83. # 微信搜不到的话,采用好看视频搜索
  84. baidu_result = hksp_search(key=cls.article_summary)
  85. if baidu_result:
  86. return {"platform": "baidu_search", "result": baidu_result[0]}
  87. else:
  88. # 若好看视频未搜到,则采用西瓜搜索
  89. logging(
  90. code="7001",
  91. info="通过baidu搜索失败---{}".format(cls.article_summary),
  92. trace_id=cls.trace_id,
  93. )
  94. xigua_result = xigua_search(keyword=cls.article_summary)
  95. if xigua_result:
  96. return {"platform": "xg_search", "result": xigua_result[0]}
  97. else:
  98. logging(
  99. code="7001",
  100. info="通过西瓜搜索失败---{}".format(cls.article_summary),
  101. trace_id=cls.trace_id,
  102. )
  103. return None
  104. @classmethod
  105. def ab_2(cls):
  106. """
  107. ori_title + wx
  108. :return:
  109. """
  110. wx_result = wx_search(keys=",".join(cls.article_keys))
  111. if wx_result:
  112. return {"platform": "wx_search", "result": wx_result[0]}
  113. else:
  114. logging(
  115. code="7001",
  116. info="通过微信搜索失败---{}".format(",".join(cls.article_keys)),
  117. trace_id=cls.trace_id,
  118. )
  119. # 微信搜不到的话,采用好看视频搜索
  120. baidu_result = hksp_search(key=",".join(cls.article_keys))
  121. if baidu_result:
  122. return {"platform": "baidu_search", "result": baidu_result[0]}
  123. else:
  124. # 若好看视频未搜到,则采用西瓜搜索
  125. logging(
  126. code="7001",
  127. info="通过baidu搜索失败---{}".format(",".join(cls.article_keys)),
  128. trace_id=cls.trace_id,
  129. )
  130. xigua_result = xigua_search(keyword=",".join(cls.article_keys))
  131. if xigua_result:
  132. return {"platform": "xg_search", "result": xigua_result[0]}
  133. else:
  134. logging(
  135. code="7001",
  136. info="通过西瓜搜索失败---{}".format(",".join(cls.article_keys)),
  137. trace_id=cls.trace_id,
  138. )
  139. return None
  140. @classmethod
  141. def ab_3(cls):
  142. """
  143. article_summary + baidu
  144. :return:
  145. """
  146. result = hksp_search(key=cls.article_summary)
  147. return {"platform": "baidu_search", "result": result[0] if result else []}
  148. @classmethod
  149. def ab_4(cls):
  150. """
  151. article_summary + weixin
  152. :return:
  153. """
  154. result = wx_search(keys=cls.article_summary)
  155. return {"platform": "wx_search", "result": result[0] if result else []}
  156. @classmethod
  157. def ab_5(cls):
  158. """
  159. article_keys + weixin
  160. :return:
  161. """
  162. result = wx_search(keys=",".join(cls.article_keys))
  163. return {"platform": "wx_search", "result": result[0] if result else []}
  164. @classmethod
  165. def ab_6(cls):
  166. """
  167. article_keys + baidu
  168. :return:
  169. """
  170. result = hksp_search(key=",".join(cls.article_keys))
  171. return {"platform": "baidu_search", "result": result[0] if result else []}
  172. async def search_videos(kimi_info, trace_id, gh_id):
  173. """
  174. search and send msg to ETL
  175. :param kimi_info:
  176. :param gh_id: 通过账号 id 来控制实验策略
  177. :param trace_id:
  178. :return:
  179. """
  180. kimi_info["trace_id"] = trace_id
  181. SearchAB = SearchABTest(info=kimi_info, gh_id=gh_id)
  182. if ab_test_config.get(gh_id):
  183. test_id = ab_test_config[gh_id]
  184. if test_id == 0:
  185. recall_obj = SearchAB.ab_0()
  186. elif test_id == 1:
  187. recall_obj = SearchAB.ab_1()
  188. elif test_id == 2:
  189. recall_obj = SearchAB.ab_2()
  190. # elif test_id == 3:
  191. # recall_obj = SearchAB.ab_3()
  192. # elif test_id == 4:
  193. # recall_obj = SearchAB.ab_4()
  194. # elif test_id == 5:
  195. # recall_obj = SearchAB.ab_5()
  196. # elif test_id == 6:
  197. # recall_obj = SearchAB.ab_6()
  198. else:
  199. recall_obj = {}
  200. else:
  201. recall_obj = SearchAB.ab_0()
  202. if recall_obj:
  203. platform = recall_obj["platform"]
  204. recall_video = recall_obj["result"]
  205. if recall_video:
  206. logging(
  207. code="7002",
  208. info="视频搜索成功, 搜索平台为--{}".format(platform),
  209. trace_id=trace_id,
  210. data=recall_video,
  211. )
  212. await video_mq_sender(
  213. video_obj=recall_video,
  214. user=gh_id_dict.get(gh_id),
  215. trace_id=trace_id,
  216. platform=platform,
  217. )
  218. else:
  219. logging(code="7003", info="视频搜索失败", trace_id=trace_id)