common.py 3.5 KB

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