123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- """
- @author: luojunhui
- """
- import time
- import asyncio
- from uuid import uuid4
- from applications.functions.log import logging
- from applications.static.config import db_article
- from applications.schedule import search_videos
- class SearchDeal(object):
- """
- 搜索接口处理逻辑
- """
- def __init__(self, params, mysql_client):
- self.content_id = None
- self.account_name = None
- self.contents = None
- self.title = None
- self.gh_id = None
- self.params = params
- self.mysql_client = mysql_client
- self.trace_id = "search-{}-{}".format(str(uuid4()), str(int(time.time())))
- def check_params(self):
- """
- 检查请求params
- :return:
- """
- try:
- self.gh_id = self.params['ghId']
- self.title = self.params['title'].split("@@")[-1].replace("'", "")
- self.contents = self.params['content'].replace("'", "")
- self.account_name = self.params['accountName'].replace("'", "")
- self.content_id = self.params['articleId']
- logging(
- code="1001",
- info="搜索视频内容接口请求成功, 参数校验成功",
- port="title_to_search",
- trace_id=self.trace_id,
- data=self.params
- )
- return None
- except Exception as e:
- result = {
- "status": "fail",
- "code": 1,
- "message": str(e),
- "info": "params check error"
- }
- logging(
- code="4001",
- info="搜索视频内容接口请求成功, 参数校验失败",
- port="title_to_search",
- trace_id=self.trace_id,
- data=self.params
- )
- return result
- async def record(self):
- """
- 把数据插入
- :return:
- """
- insert_sql = f"""
- INSERT INTO {db_article}
- (trace_id, gh_id, article_title, article_text, account_name, content_id)
- VALUES
- (%s, %s, %s, %s, %s, %s);
- """
- await self.mysql_client.async_insert(
- sql=insert_sql,
- params=(self.trace_id, self.gh_id, self.title, self.contents, self.account_name, self.content_id)
- )
- logging(
- code="1002",
- info="成功记录请求数据到mysql中",
- trace_id=self.trace_id
- )
- async def process_video_id(self):
- """
- 如果video_id在标题中,则做特殊处理
- :return:
- """
- video_id = self.title.split("video_id=")[-1]
- update_sql = f"""
- UPDATE
- {db_article}
- SET
- recall_video_id1 = %s
- WHERE
- trace_id = %s;"""
- await self.mysql_client.async_insert(
- sql=update_sql,
- params=(video_id, self.trace_id)
- )
- res = {
- "status": "success",
- "code": 0,
- "traceId": self.trace_id
- }
- logging(
- code="1003",
- info="视频生成文本服务请求,video_id = {}".format(video_id),
- trace_id=self.trace_id
- )
- return res
- async def insert_history_contents_videos(self, vid1, vid2, vid3, kimi_title):
- """
- 插入历史视频id
- :return:
- """
- update_sql = f"""
- UPDATE {db_article}
- SET
- kimi_title=%s,
- recall_video_id1=%s,
- recall_video_id2=%s,
- recall_video_id3=%s
- WHERE trace_id = %s
- """
- print(update_sql)
- await self.mysql_client.async_insert(
- sql=update_sql,
- params=(
- kimi_title,
- vid1,
- {"NULL" if vid2 is None else vid2},
- {"NULL" if vid3 is None else vid3},
- self.trace_id
- )
- )
- async def get_history_contents(self):
- """
- check whether the content id exists
- :return:
- """
- select_sql = f"""
- SELECT recall_video_id1, recall_video_id2, recall_video_id3, kimi_title
- FROM {db_article}
- WHERE content_id = '{self.content_id}' and trace_id != '{self.trace_id}'
- ORDER BY id DESC;
- """
- result = await self.mysql_client.async_select(select_sql)
- if result:
- for item in result:
- video_1, video_2, video_3, kimi_title = item
- if video_1 and kimi_title:
- return [video_1, video_2, video_3, kimi_title]
- else:
- continue
- return None
- else:
- return None
- async def deal(self):
- """
- deal
- :return:
- """
- params_error = self.check_params()
- if params_error:
- return params_error
- else:
- # 记录
- await self.record()
- if "video_id=" in self.title:
- return await self.process_video_id()
- else:
- video_ids = await self.get_history_contents()
- if video_ids:
- logging(
- code="1004",
- info="获取历史到文章视频",
- data=video_ids,
- trace_id=self.trace_id
- )
- await self.insert_history_contents_videos(
- video_ids[0],
- video_ids[1],
- video_ids[2],
- video_ids[3]
- )
- return {"status": "success", "code": 0, "traceId": self.trace_id}
- else:
- # search from the Internet
- try:
- asyncio.ensure_future(
- search_videos(
- params={"title": self.title, "content": self.contents, "trace_id": self.trace_id},
- trace_id=self.trace_id,
- gh_id=self.gh_id,
- mysql_client=self.mysql_client
- )
- )
- res = {
- "status": "success",
- "code": 0,
- "traceId": self.trace_id
- }
- return res
- except Exception as e:
- res = {
- "status": "fail",
- "code": 1,
- "message": str(e)
- }
- return res
|