kuaishou_video.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import json
  2. import re
  3. import requests
  4. from bs4 import BeautifulSoup
  5. from common import Oss, Common
  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. data_link = vx_message[1]
  14. content_id = ''
  15. for i in range(3):
  16. content_id = urlManage.url_manage(data_link, channel)
  17. if content_id:
  18. break
  19. if content_id == '':
  20. return "无法获取到视频ID"
  21. Common.logger().info(f'渠道:{channel},视频ID:{content_id}')
  22. for i in range(3):
  23. try:
  24. url = f"https://www.kuaishou.com/short-video/{content_id}"
  25. headers = {
  26. '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',
  27. 'Accept-Language': 'zh-CN,zh;q=0.9',
  28. 'Cache-Control': 'no-cache',
  29. 'Connection': 'keep-alive',
  30. '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',
  31. 'Pragma': 'no-cache',
  32. 'Sec-Fetch-Dest': 'document',
  33. 'Sec-Fetch-Mode': 'navigate',
  34. 'Sec-Fetch-User': '?1',
  35. 'Upgrade-Insecure-Requests': '1',
  36. 'User-Agent': get_random_user_agent(),
  37. }
  38. response = requests.get(url, headers=headers)
  39. if "VisionVideoDetailPhoto" not in response.text:
  40. return "cookie过期"
  41. status_code = response.status_code
  42. if status_code != 200:
  43. return "cookie过期"
  44. data = response.text
  45. soup = BeautifulSoup(data, 'html.parser')
  46. script_tags = soup.find_all('script', text=lambda x: x and "__APOLLO_STATE__" in x)
  47. pattern = re.compile(r'window\.__APOLLO_STATE__\s*=\s*({.*?});', re.DOTALL)
  48. for script in script_tags:
  49. # 获取<script>标签内容
  50. script_content = script.string
  51. # 在<script>标签内容中查找匹配的模式
  52. match = pattern.search(script_content)
  53. if match:
  54. # 提取JSON数据
  55. json_data = match.group(1)
  56. json_data = json.loads(json_data)
  57. data = json_data["defaultClient"][f"VisionVideoDetailPhoto:{content_id}"]
  58. caption = data["caption"]
  59. photoUrl = data["photoUrl"]
  60. photoUrl = bytes(photoUrl, "utf-8").decode("unicode_escape")
  61. print(f"标题:{caption},视频链接:{photoUrl}")
  62. # 随机生成视频oss_id
  63. video_id = urlManage.random_id()
  64. oss_object_key = Oss.video_url_upload_oss(photoUrl, video_id)
  65. # 获取 oss 视频地址
  66. oss_object_key = oss_object_key.get("oss_object_key")
  67. Common.logger().info(f'准备发送站内参数:{oss_object_key},{caption},{vx_message[3]}')
  68. piaoquantv = PQ.insert_piaoquantv(oss_object_key, caption, vx_message[3])
  69. if piaoquantv == False:
  70. return "视频发送到站内失败"
  71. except Exception as e:
  72. Common.logger().info(f'报错信息:{e}')