matchArticle_deal.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. # encoding: utf-8
  2. """
  3. @author: luojunhui
  4. """
  5. import json
  6. import time
  7. import requests
  8. from uuid import uuid4
  9. from applications.config import db_config
  10. from applications.functions import whisper
  11. class MatchArticlesTask(object):
  12. """
  13. 视频匹配文章流程
  14. 流程
  15. 1. 拿视频id,标题等信息匹配账号
  16. 2. 账号匹配成功后,使用 AI Search 获取文章的生产资料
  17. 3. 通过GPT4, 腾讯元宝等AI 优化文章
  18. 4. 生成一篇文章,包含标题,文本,封面, 插图, 以及匹配到到小程序
  19. """
  20. def __init__(self, mysql_client):
  21. """
  22. :param mysql_client mysql服务池
  23. """
  24. self.mysql_client = mysql_client
  25. async def whisper_task(self):
  26. """
  27. 执行定时任务,把库里面的视频转文本
  28. :return:
  29. """
  30. select_sql = f"""SELECT video_id FROM {db_config} WHERE status_code = 0 ORDER BY id ASC limit 10;"""
  31. video_list = await self.mysql_client.select(select_sql)
  32. print(video_list)
  33. async def whisper_and_update(video_id, mysql_client):
  34. """
  35. whisper处理视频并且把信息更新到mysql表中
  36. :param video_id:
  37. :param mysql_client:
  38. :return:
  39. """
  40. w_response = whisper(video_id)
  41. text = w_response['text']
  42. update_sql = f"""
  43. UPDATE {db_config}
  44. SET
  45. video_text = '{text}',
  46. status_code = 1
  47. WHERE video_id = {video_id};
  48. """
  49. await mysql_client.async_insert(sql=update_sql)
  50. for vid in video_list:
  51. await whisper_and_update(video_id=vid, mysql_client=self.mysql_client)
  52. async def materials_task(self):
  53. """
  54. 获取task的材料
  55. :return:
  56. """
  57. select_sql = f"""SELECT task_id, video_title, video_text FROM {db_config} WHERE status_code = 1 ORDER BY id ASC limit 10;"""
  58. task_list = await self.mysql_client.select(select_sql)
  59. async def find_material(task_tuple, mysql_client):
  60. task_id, title, text = task_tuple
  61. material_result = json.dumps({}, ensure_ascii=False)
  62. update_sql = f"""
  63. UPDATE {db_config}
  64. SET materials = '{material_result}', status_code = 2
  65. WHERE task_id = '{task_id}'
  66. """
  67. await mysql_client.async_insert(sql=update_sql)
  68. for task in task_list:
  69. await find_material(task, self.mysql_client)
  70. async def ai_task(self):
  71. """
  72. 通过ai工具和材料来生成文章
  73. :return:
  74. """
  75. select_sql = f"""SELECT task_id, video_title, materials FROM '{db_config}' WHERE status_code = 2 ORDER BY id ASC limit 10;"""
  76. task_list = await self.mysql_client.select(sql=select_sql)
  77. async def ai_generate_text(task_tuple, mysql_client):
  78. task_id, video_title, materials = task_tuple
  79. ai_text = "ai_text"
  80. ai_title = "ai_title"
  81. update_sql = f"""
  82. UPDATE {db_config}
  83. SET ai_text = '{ai_text}', ai_title = '{ai_title}', status_code = 3
  84. WHERE task_id = '{task_id}'
  85. """
  86. for task in task_list:
  87. await ai_generate_text(task, self.mysql_client)
  88. class MatchArticlesV1(object):
  89. """
  90. 接受请求,并且把数据存储到MySQL服务器中
  91. """
  92. def __init__(self, params, mysql_client):
  93. self.title = None
  94. self.video_id = None
  95. self.params = params
  96. self.mysql_client = mysql_client
  97. def check_params(self):
  98. """
  99. params check
  100. """
  101. try:
  102. self.video_id = self.params['videoId']
  103. self.title = self.params['title']
  104. return None
  105. except AttributeError as e:
  106. response = {
  107. "code": 0,
  108. "error": "Params Error",
  109. "msg": "Params: {} is not correct".format(e)
  110. }
  111. return response
  112. async def record(self):
  113. """
  114. 将数据存储到服务中
  115. :return:
  116. """
  117. request_id = "Article_{}_{}".format(uuid4(), int(time.time()))
  118. request_time = int(time.time())
  119. insert_sql = f"""
  120. INSERT INTO {db_config}
  121. (video_id, task_id, video_title, request_time)
  122. VALUES
  123. ({self.video_id}, '{request_id}', '{self.title}', {request_time})
  124. """
  125. await self.mysql_client.async_insert(sql=insert_sql)
  126. async def deal(self):
  127. """
  128. deal function
  129. :return:
  130. """
  131. params_error = self.check_params()
  132. if params_error:
  133. return params_error
  134. else:
  135. task_id = await self.record()
  136. res = {
  137. "status": "success",
  138. "task_id": task_id
  139. }
  140. return res
  141. class MatchArticlesV2(object):
  142. """
  143. 获取视频信息
  144. """
  145. def __init__(self, params, mysql_client):
  146. self.task_id = None
  147. self.params = params
  148. self.mysql_client = mysql_client
  149. def check_params(self):
  150. """
  151. params check
  152. """
  153. try:
  154. self.task_id = self.params['taskId']
  155. return None
  156. except AttributeError as e:
  157. response = {
  158. "code": 0,
  159. "error": "Params Error",
  160. "msg": "Params: {} is not correct".format(e)
  161. }
  162. return response
  163. @classmethod
  164. def get_basic_video_info(cls, video_id):
  165. """
  166. 获取视频信息
  167. :return:
  168. """
  169. url = "http://localhost:8888/singleVideo"
  170. body = {
  171. "videoId": video_id
  172. }
  173. headers = {
  174. "Content-Type": "application/json"
  175. }
  176. response = requests.post(url=url, json=body, headers=headers)
  177. return response.json()
  178. async def recall_articles(self):
  179. """
  180. 从表中召回视频
  181. :return:
  182. """
  183. select_sql = f"""
  184. SELECT video_id, cover, images, ai_text, ai_title, status_code
  185. FROM {db_config}
  186. WHERE task_id = '{self.task_id}';
  187. """
  188. result = await self.mysql_client.select(select_sql)
  189. video_id, cover, images, ai_text, ai_title, status_code = result[0]
  190. match status_code:
  191. case 0:
  192. return {
  193. "taskId": self.task_id,
  194. "code": 0,
  195. "msg": "未处理"
  196. }
  197. case 1:
  198. return {
  199. "taskId": self.task_id,
  200. "code": 1,
  201. "msg": "处理中, 已经用whisper生成视频文本"
  202. }
  203. case 2:
  204. return {
  205. "taskId": self.task_id,
  206. "code": 2,
  207. "msg": "处理中, 已经用AI搜索生成资料"
  208. }
  209. case 3:
  210. result = {
  211. "title": ai_title,
  212. "cover": cover,
  213. "content": ai_text,
  214. "images": images,
  215. "videos": [
  216. self.get_basic_video_info(video_id)
  217. ]
  218. }
  219. return result