common.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. """
  2. @author: luojunhui
  3. """
  4. import os
  5. import json
  6. import time
  7. import uuid
  8. import requests
  9. import urllib.parse
  10. from concurrent.futures import ThreadPoolExecutor
  11. from applications.functions.auto_white import auto_white
  12. from applications.functions.mysql import select
  13. from applications.functions.ask_kimi import ask_kimi
  14. from applications.log import logging
  15. def ask_kimi_and_save_to_local(info_tuple):
  16. """
  17. save file to local
  18. :return:
  19. """
  20. title, trace_id, save_path = info_tuple[0], info_tuple[1], info_tuple[2]
  21. if os.path.exists(save_path):
  22. logging(
  23. code="1002",
  24. info="该 video 信息已经挖掘完成---{}".format(title),
  25. function="ask_kimi_and_save_to_local",
  26. trace_id=trace_id,
  27. )
  28. else:
  29. os.makedirs(os.path.dirname(save_path), exist_ok=True)
  30. if not title:
  31. result = {}
  32. else:
  33. result = ask_kimi(title)
  34. logging(
  35. code="1002",
  36. info="kimi-result",
  37. data=result,
  38. trace_id=trace_id,
  39. function="ask_kimi_and_save_to_local"
  40. )
  41. with open(save_path, "w", encoding="utf-8") as f:
  42. f.write(json.dumps(result, ensure_ascii=False))
  43. def create_gzh_path(video_id, shared_uid):
  44. """
  45. :param video_id: 视频 id
  46. :param shared_uid: 分享 id
  47. """
  48. root_share_id = str(uuid.uuid4())
  49. url = f"pages/user-videos?id={video_id}&su={shared_uid}&fromGzh=1&rootShareId={root_share_id}&shareId={root_share_id}"
  50. # 自动把 root_share_id 加入到白名单
  51. auto_white(root_share_id)
  52. return root_share_id, f"pages/category?jumpPage={urllib.parse.quote(url, safe='')}"
  53. def request_for_info(video_id):
  54. """
  55. 请求数据
  56. :param video_id:
  57. :return:
  58. """
  59. url = "https://longvideoapi.piaoquantv.com/longvideoapi/openapi/video/batchSelectVideoInfo"
  60. data = {
  61. "videoIdList": [video_id]
  62. }
  63. header = {
  64. "Content-Type": "application/json",
  65. }
  66. response = requests.post(url, headers=header, data=json.dumps(data))
  67. return response.json()
  68. def choose_video(result):
  69. """
  70. :param result: 计算出来的结果
  71. :return: uid, video_id
  72. """
  73. score1 = result['s1_score']
  74. if score1 > 0:
  75. return result['s1_uid'], result['s1_vid']
  76. else:
  77. return None, None
  78. def find_videos_in_mysql(trace_id):
  79. """
  80. 通过 trace_id去 pq_spider_mysql 搜索视频
  81. :param trace_id:
  82. :return:
  83. """
  84. sql = "select video_id, video_title from crawler_video where out_user_id = '{}' limit 10;".format(trace_id)
  85. out_video_list = select(sql=sql)
  86. if len(out_video_list) > 0:
  87. vid_list = [i[0] for i in out_video_list if i[0] != 0]
  88. vid_list = vid_list[:2]
  89. dir_path = os.path.join(os.getcwd(), 'applications', 'static', "out_videos")
  90. os.makedirs(os.path.dirname(dir_path), exist_ok=True)
  91. done_list = os.listdir(dir_path)
  92. process_list = [
  93. (
  94. i[1],
  95. trace_id,
  96. os.path.join(dir_path, "{}.json".format(i[0]))
  97. ) for i in out_video_list if not "{}.json".format(i[0]) in done_list
  98. ]
  99. with ThreadPoolExecutor(max_workers=2) as pool:
  100. pool.map(ask_kimi_and_save_to_local, process_list)
  101. # time.sleep(5)
  102. return {
  103. "search_videos": "success",
  104. "trace_id": trace_id,
  105. "video_list": vid_list
  106. }
  107. else:
  108. return {
  109. "search_videos": "failed",
  110. "trace_id": trace_id,
  111. "video_list": []
  112. }