123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- """
- @author: luojunhui
- 调用接口在微信内搜索视频
- """
- from applications.search import *
- from applications.static.config import gh_id_dict, ab_test_config
- from applications.functions.log import logging
- from applications.functions.video_item import video_mq_sender
- class SearchABTest(object):
- """
- 搜索策略实验方案
- """
- ori_title = None
- article_summary = None
- article_keys = None
- gh_id = None
- trace_id = None
- def __init__(self, info, gh_id):
- SearchABTest.set_class_properties(info, gh_id)
- @classmethod
- def set_class_properties(cls, info, gh_id):
- """
- 初始化搜索策略实验类
- :param info: kimi 挖掘的基本信息
- :param gh_id: 公众号账号 id
- :return:
- """
- cls.ori_title = info["ori_title"]
- cls.article_summary = info["content_title"]
- cls.article_keys = info["content_keys"]
- cls.trace_id = info["trace_id"]
- cls.gh_id = gh_id
- @classmethod
- def dd(cls):
- """
- 兜底
- :return:
- """
- wx_result_ = wx_search(keys=cls.article_keys[0])
- if wx_result_:
- logging(
- code="7011",
- info="微信兜底搜索成功",
- trace_id=cls.trace_id,
- )
- return {"platform": "wx_search", "result": wx_result_[0]}
- else:
- baidu_result_ = hksp_search(key=cls.article_keys[0])
- if baidu_result_:
- logging(
- code="7011",
- info="百度兜底搜索成功",
- trace_id=cls.trace_id,
- )
- return {"platform": "baidu_search", "result": baidu_result_[0]}
- else:
- return None
- @classmethod
- def ab_0(cls):
- """
- 默认搜索逻辑
- :return:
- """
- wx_result = wx_search(keys=cls.ori_title)
- if wx_result:
- return {"platform": "wx_search", "result": wx_result[0]}
- else:
- logging(
- code="7001",
- info="通过微信搜索失败---{}".format(cls.ori_title),
- trace_id=cls.trace_id,
- )
- # 微信搜不到的话,采用好看视频搜索
- baidu_result = hksp_search(key=cls.ori_title)
- if baidu_result:
- return {"platform": "baidu_search", "result": baidu_result[0]}
- else:
- # 若好看视频未搜到,则采用西瓜搜索
- logging(
- code="7001",
- info="通过baidu搜索失败---{}".format(cls.ori_title),
- trace_id=cls.trace_id,
- )
- xigua_result = xigua_search(keyword=cls.ori_title)
- if xigua_result:
- return {"platform": "xg_search", "result": xigua_result[0]}
- else:
- logging(
- code="7001",
- info="通过西瓜搜索失败---{}, 启用兜底方式".format(cls.ori_title),
- trace_id=cls.trace_id,
- )
- return cls.dd()
- @classmethod
- def ab_1(cls):
- """
- :return:
- """
- wx_result = wx_search(keys=cls.article_summary)
- if wx_result:
- return {"platform": "wx_search", "result": wx_result[0]}
- else:
- logging(
- code="7001",
- info="通过微信搜索失败---{}".format(cls.article_summary),
- trace_id=cls.trace_id,
- )
- # 微信搜不到的话,采用好看视频搜索
- baidu_result = hksp_search(key=cls.article_summary)
- if baidu_result:
- return {"platform": "baidu_search", "result": baidu_result[0]}
- else:
- # 若好看视频未搜到,则采用西瓜搜索
- logging(
- code="7001",
- info="通过baidu搜索失败---{}".format(cls.article_summary),
- trace_id=cls.trace_id,
- )
- xigua_result = xigua_search(keyword=cls.article_summary)
- if xigua_result:
- return {"platform": "xg_search", "result": xigua_result[0]}
- else:
- logging(
- code="7001",
- info="通过西瓜搜索失败---{},启用兜底方式".format(cls.article_summary),
- trace_id=cls.trace_id,
- )
- return cls.dd()
- @classmethod
- def ab_2(cls):
- """
- ori_title + wx
- :return:
- """
- wx_result = wx_search(keys=",".join(cls.article_keys))
- if wx_result:
- return {"platform": "wx_search", "result": wx_result[0]}
- else:
- logging(
- code="7001",
- info="通过微信搜索失败---{}".format(",".join(cls.article_keys)),
- trace_id=cls.trace_id,
- )
- # 微信搜不到的话,采用好看视频搜索
- baidu_result = hksp_search(key=",".join(cls.article_keys))
- if baidu_result:
- return {"platform": "baidu_search", "result": baidu_result[0]}
- else:
- # 若好看视频未搜到,则采用西瓜搜索
- logging(
- code="7001",
- info="通过baidu搜索失败---{}".format(",".join(cls.article_keys)),
- trace_id=cls.trace_id,
- )
- xigua_result = xigua_search(keyword=",".join(cls.article_keys))
- if xigua_result:
- return {"platform": "xg_search", "result": xigua_result[0]}
- else:
- logging(
- code="7001",
- info="通过西瓜搜索失败---{},启用兜底".format(",".join(cls.article_keys)),
- trace_id=cls.trace_id,
- )
- return cls.dd()
- @classmethod
- def ab_3(cls):
- """
- article_summary + baidu
- :return:
- """
- result = hksp_search(key=cls.article_summary)
- return {"platform": "baidu_search", "result": result[0] if result else []}
- @classmethod
- def ab_4(cls):
- """
- article_summary + weixin
- :return:
- """
- result = wx_search(keys=cls.article_summary)
- return {"platform": "wx_search", "result": result[0] if result else []}
- @classmethod
- def ab_5(cls):
- """
- article_keys + weixin
- :return:
- """
- result = wx_search(keys=",".join(cls.article_keys))
- return {"platform": "wx_search", "result": result[0] if result else []}
- @classmethod
- def ab_6(cls):
- """
- article_keys + baidu
- :return:
- """
- result = hksp_search(key=",".join(cls.article_keys))
- return {"platform": "baidu_search", "result": result[0] if result else []}
- async def search_videos(kimi_info, trace_id, gh_id):
- """
- search and send msg to ETL
- :param kimi_info:
- :param gh_id: 通过账号 id 来控制实验策略
- :param trace_id:
- :return:
- """
- kimi_info["trace_id"] = trace_id
- SearchAB = SearchABTest(info=kimi_info, gh_id=gh_id)
- if ab_test_config.get(gh_id):
- test_id = ab_test_config[gh_id]
- if test_id == 0:
- recall_obj = SearchAB.ab_0()
- elif test_id == 1:
- recall_obj = SearchAB.ab_1()
- elif test_id == 2:
- recall_obj = SearchAB.ab_2()
- # elif test_id == 3:
- # recall_obj = SearchAB.ab_3()
- # elif test_id == 4:
- # recall_obj = SearchAB.ab_4()
- # elif test_id == 5:
- # recall_obj = SearchAB.ab_5()
- # elif test_id == 6:
- # recall_obj = SearchAB.ab_6()
- else:
- recall_obj = {}
- else:
- recall_obj = SearchAB.ab_0()
- if recall_obj:
- platform = recall_obj["platform"]
- recall_video = recall_obj["result"]
- if recall_video:
- logging(
- code="7002",
- info="视频搜索成功, 搜索平台为--{}".format(platform),
- trace_id=trace_id,
- data=recall_video,
- )
- video_id, video_url = await video_mq_sender(
- video_obj=recall_video,
- user=gh_id_dict.get(gh_id),
- trace_id=trace_id,
- platform=platform,
- )
- return video_id, video_url
- else:
- logging(code="7003", info="视频搜索失败", trace_id=trace_id)
- return None
|