kuaishou_video.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import json
  2. import re
  3. import requests
  4. from bs4 import BeautifulSoup
  5. from common import Oss
  6. from common.pq_utility import PQ
  7. from common.url_manage import urlManage
  8. from common.userAgent import get_random_user_agent
  9. class kuaishouVideo():
  10. # 获取快手 标题+视频链接
  11. @classmethod
  12. def get_videoList(cls, vx_message, channel):
  13. try:
  14. data_link = vx_message[1]
  15. content_id = urlManage.url_manage(data_link, channel)
  16. if content_id:
  17. url = f"https://www.kuaishou.com/short-video/{content_id}"
  18. headers = {
  19. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  20. 'Accept-Language': 'zh-CN,zh;q=0.9',
  21. 'Cache-Control': 'no-cache',
  22. 'Connection': 'keep-alive',
  23. 'Cookie': 'kpf=PC_WEB; clientid=3; did=web_9c6a04a4004fdb7c95a658a56ed275b6; userId=1299331643; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqAB-mmmFeafQwQfZLqo6IV4sqTuqIs-bOdErRSFOm82rvJlBMe7mKsCpUL4ROkEaBb8GWLY7K5YD8ChJx1TH-hcY-GwVQCZzs3LS0RgD2-Kbu0VLoFK51YJ3FXI0Nj3kzmR3D15g3tqngkgxfMc58JnUcdQYr9ed8L0QIj2p3n3LT33M3MTdn_TYFTcQhQW9mwkTCSu8rg5APzZirdeUABfnRoSnIqSq99L0mk4jolsseGdcwiNIiDEUt4eoMq2rp70rCoXLaEZTI3KhjdlR8gZ_1Vc9CzhMygFMAE; kuaishou.server.web_ph=91777c1e75e3c21302c35753faccdbb28d85; kpn=KUAISHOU_VISION; did=web_9c6a04a4004fdb7c95a658a56ed275b6; clientid=3; kpf=PC_WEB; kpn=KUAISHOU_VISION',
  24. 'Pragma': 'no-cache',
  25. 'Sec-Fetch-Dest': 'document',
  26. 'Sec-Fetch-Mode': 'navigate',
  27. 'Sec-Fetch-User': '?1',
  28. 'Upgrade-Insecure-Requests': '1',
  29. 'User-Agent': get_random_user_agent(),
  30. }
  31. response = requests.get(url, headers=headers)
  32. if "VisionVideoDetailPhoto" not in response.text:
  33. return "cookie过期"
  34. status_code = response.status_code
  35. if status_code != 200:
  36. return "cookie过期"
  37. data = response.text
  38. soup = BeautifulSoup(data, 'html.parser')
  39. script_tags = soup.find_all('script', text=lambda x: x and "__APOLLO_STATE__" in x)
  40. pattern = re.compile(r'window\.__APOLLO_STATE__\s*=\s*({.*?});', re.DOTALL)
  41. for script in script_tags:
  42. # 获取<script>标签内容
  43. script_content = script.string
  44. # 在<script>标签内容中查找匹配的模式
  45. match = pattern.search(script_content)
  46. if match:
  47. # 提取JSON数据
  48. json_data = match.group(1)
  49. json_data = json.loads(json_data)
  50. data = json_data["defaultClient"][f"VisionVideoDetailPhoto:{content_id}"]
  51. caption = data["caption"]
  52. photoUrl = data["photoUrl"]
  53. photoUrl = bytes(photoUrl, "utf-8").decode("unicode_escape")
  54. print(f"标题:{caption},视频链接:{photoUrl}")
  55. # 随机生成视频oss_id
  56. video_id = urlManage.random_id()
  57. oss_object_key = Oss.video_url_upload_oss(photoUrl, video_id)
  58. status = oss_object_key.get("status")
  59. if status != 200:
  60. return "发送OSS失败"
  61. # 获取 oss 视频地址
  62. oss_object_key = oss_object_key.get("oss_object_key")
  63. piaoquantv = PQ.insert_piaoquantv(oss_object_key, caption, vx_message[3])
  64. if piaoquantv == False:
  65. return "发送账号失败"
  66. return
  67. else:
  68. return "无法获取视频ID"
  69. except Exception:
  70. return "URL处理失败"