search_deal.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. """
  2. @author: luojunhui
  3. """
  4. import time
  5. import asyncio
  6. from uuid import uuid4
  7. from applications.functions.log import logging
  8. from applications.static.config import db_article
  9. from applications.schedule import search_videos
  10. class SearchDeal(object):
  11. """
  12. 搜索接口处理逻辑
  13. """
  14. def __init__(self, params, mysql_client):
  15. self.content_id = None
  16. self.account_name = None
  17. self.contents = None
  18. self.title = None
  19. self.gh_id = None
  20. self.params = params
  21. self.mysql_client = mysql_client
  22. self.trace_id = "search-{}-{}".format(str(uuid4()), str(int(time.time())))
  23. def check_params(self):
  24. """
  25. 检查请求params
  26. :return:
  27. """
  28. try:
  29. self.gh_id = self.params['ghId']
  30. self.title = self.params['title'].split("@@")[-1].replace("'", "")
  31. self.contents = self.params['content'].replace("'", "")
  32. self.account_name = self.params['accountName'].replace("'", "")
  33. self.content_id = self.params['articleId']
  34. logging(
  35. code="1001",
  36. info="搜索视频内容接口请求成功, 参数校验成功",
  37. port="title_to_search",
  38. trace_id=self.trace_id,
  39. data=self.params
  40. )
  41. return None
  42. except Exception as e:
  43. result = {
  44. "status": "fail",
  45. "code": 1,
  46. "message": str(e),
  47. "info": "params check error"
  48. }
  49. logging(
  50. code="4001",
  51. info="搜索视频内容接口请求成功, 参数校验失败",
  52. port="title_to_search",
  53. trace_id=self.trace_id,
  54. data=self.params
  55. )
  56. return result
  57. async def record(self):
  58. """
  59. 把数据插入
  60. :return:
  61. """
  62. insert_sql = f"""
  63. INSERT INTO {db_article}
  64. (trace_id, gh_id, article_title, article_text, account_name, content_id)
  65. VALUES
  66. (%s, %s, %s, %s, %s, %s);
  67. """
  68. await self.mysql_client.async_insert(
  69. sql=insert_sql,
  70. params=(self.trace_id, self.gh_id, self.title, self.contents, self.account_name, self.content_id)
  71. )
  72. logging(
  73. code="1002",
  74. info="成功记录请求数据到mysql中",
  75. trace_id=self.trace_id
  76. )
  77. async def process_video_id(self):
  78. """
  79. 如果video_id在标题中,则做特殊处理
  80. :return:
  81. """
  82. video_id = self.title.split("video_id=")[-1]
  83. update_sql = f"""
  84. UPDATE
  85. {db_article}
  86. SET
  87. recall_video_id1 = %s
  88. WHERE
  89. trace_id = %s;"""
  90. await self.mysql_client.async_insert(
  91. sql=update_sql,
  92. params=(video_id, self.trace_id)
  93. )
  94. res = {
  95. "status": "success",
  96. "code": 0,
  97. "traceId": self.trace_id
  98. }
  99. logging(
  100. code="1003",
  101. info="视频生成文本服务请求,video_id = {}".format(video_id),
  102. trace_id=self.trace_id
  103. )
  104. return res
  105. async def insert_history_contents_videos(self, vid1, vid2, vid3, kimi_title):
  106. """
  107. 插入历史视频id
  108. :return:
  109. """
  110. update_sql = f"""
  111. UPDATE {db_article}
  112. SET
  113. kimi_title=%s,
  114. recall_video_id1=%s,
  115. recall_video_id2=%s,
  116. recall_video_id3=%s
  117. WHERE trace_id = %s
  118. """
  119. print(update_sql)
  120. await self.mysql_client.async_insert(
  121. sql=update_sql,
  122. params=(
  123. kimi_title,
  124. vid1,
  125. {"NULL" if vid2 is None else vid2},
  126. {"NULL" if vid3 is None else vid3},
  127. self.trace_id
  128. )
  129. )
  130. async def get_history_contents(self):
  131. """
  132. check whether the content id exists
  133. :return:
  134. """
  135. select_sql = f"""
  136. SELECT recall_video_id1, recall_video_id2, recall_video_id3, kimi_title
  137. FROM {db_article}
  138. WHERE content_id = '{self.content_id}' and trace_id != '{self.trace_id}'
  139. ORDER BY id DESC;
  140. """
  141. result = await self.mysql_client.async_select(select_sql)
  142. if result:
  143. for item in result:
  144. video_1, video_2, video_3, kimi_title = item
  145. if video_1 and kimi_title:
  146. return [video_1, video_2, video_3, kimi_title]
  147. else:
  148. continue
  149. return None
  150. else:
  151. return None
  152. async def deal(self):
  153. """
  154. deal
  155. :return:
  156. """
  157. params_error = self.check_params()
  158. if params_error:
  159. return params_error
  160. else:
  161. # 记录
  162. await self.record()
  163. if "video_id=" in self.title:
  164. return await self.process_video_id()
  165. else:
  166. video_ids = await self.get_history_contents()
  167. if video_ids:
  168. logging(
  169. code="1004",
  170. info="获取历史到文章视频",
  171. data=video_ids,
  172. trace_id=self.trace_id
  173. )
  174. await self.insert_history_contents_videos(
  175. video_ids[0],
  176. video_ids[1],
  177. video_ids[2],
  178. video_ids[3]
  179. )
  180. return {"status": "success", "code": 0, "traceId": self.trace_id}
  181. else:
  182. # search from the Internet
  183. try:
  184. asyncio.ensure_future(
  185. search_videos(
  186. params={"title": self.title, "content": self.contents, "trace_id": self.trace_id},
  187. trace_id=self.trace_id,
  188. gh_id=self.gh_id,
  189. mysql_client=self.mysql_client
  190. )
  191. )
  192. res = {
  193. "status": "success",
  194. "code": 0,
  195. "traceId": self.trace_id
  196. }
  197. return res
  198. except Exception as e:
  199. res = {
  200. "status": "fail",
  201. "code": 1,
  202. "message": str(e)
  203. }
  204. return res