gongzhonghao_video.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import configparser
  2. import re
  3. import os
  4. import sys
  5. import requests
  6. import json
  7. import urllib.parse
  8. from urllib.parse import urlparse
  9. from common import Oss
  10. from common.pq_utility import PQ
  11. from common.url_manage import urlManage
  12. from common.userAgent import get_random_user_agent
  13. sys.path.append(os.getcwd())
  14. config = configparser.ConfigParser()
  15. config.read('/Users/tzld/Desktop/single_video_crawler/config.ini') # 替换为您的配置文件路径
  16. class gongzhonghaoVdieo():
  17. @classmethod
  18. def download_video(cls, video_url, video_path_url):
  19. for i in range(3):
  20. headers = {
  21. 'Accept': '*/*',
  22. 'Accept-Encoding': 'identity;q=1, *;q=0',
  23. 'Accept-Language': 'zh-CN,zh;q=0.9',
  24. 'Cache-Control': 'no-cache',
  25. 'Connection': 'keep-alive',
  26. 'Host': urlparse(video_url).netloc,
  27. 'Origin': 'https://mp.weixin.qq.com',
  28. 'Pragma': 'no-cache',
  29. 'Range': 'bytes=0-',
  30. 'Referer': 'https://mp.weixin.qq.com/',
  31. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
  32. }
  33. response = requests.request("GET", video_url, headers=headers)
  34. # 检查响应状态码是否为200
  35. if response.status_code == 206:
  36. # 以二进制写入模式打开文件
  37. with open(f"{video_path_url}", "wb") as file:
  38. # 将响应内容写入文件
  39. file.write(response.content)
  40. return True
  41. return False
  42. @classmethod
  43. def get_url(cls, link):
  44. payload = {}
  45. headers = {
  46. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
  47. }
  48. response = requests.request("GET", link, headers=headers, data=payload)
  49. js_code = response.content.decode()
  50. if js_code:
  51. pattern = re.compile(r"url: \('(.*?)'\)")
  52. urls = pattern.findall(js_code)
  53. if urls:
  54. return urls[0]
  55. else:
  56. return None
  57. else:
  58. return None
  59. @classmethod
  60. def get_videoList(cls, vx_message, channel):
  61. try:
  62. data_link = vx_message[1]
  63. data = json.loads(data_link)
  64. url = data.get('url', '')
  65. mp4_link = cls.get_url(url)
  66. mp4_link = mp4_link.replace("\\x26amp;", "&")
  67. if mp4_link:
  68. title = data.get('title', '')
  69. # 随机生成视频oss_id
  70. video_id = urlManage.random_id()
  71. video_path_url = config['PATHS']['VIDEO_OSS_PATH'] + video_id + ".mp4"
  72. status = cls.download_video(mp4_link, video_path_url)
  73. if status == False:
  74. return "视频下载失败"
  75. oss_object_key = Oss.video_sync_upload_oss(video_path_url, video_id)
  76. status = oss_object_key.get("status")
  77. if status != 200:
  78. return "发送OSS失败"
  79. # 获取 oss 视频地址
  80. oss_object_key = oss_object_key.get("oss_object_key")
  81. piaoquantv = PQ.insert_piaoquantv(oss_object_key, title, vx_message[3])
  82. if piaoquantv == False:
  83. return "发送账号失败"
  84. if os.path.isfile(video_path_url):
  85. os.remove(video_path_url)
  86. return
  87. else:
  88. return "无法获取视频链接"
  89. except Exception:
  90. return "URL处理失败"