upload.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """
  2. @author: luojunhui
  3. """
  4. import oss2
  5. import requests
  6. import urllib.parse
  7. OSS_ACCESS_KEY_ID = "LTAIP6x1l3DXfSxm"
  8. OSS_ACCESS_KEY_SECRET = "KbTaM9ars4OX3PMS6Xm7rtxGr1FLon"
  9. # OSS_BUCKET_ENDPOINT = "oss-cn-hangzhou-internal.aliyuncs.com" # 内网地址
  10. OSS_BUCKET_ENDPOINT = "oss-cn-hangzhou.aliyuncs.com" # 外网地址
  11. import aiohttp
  12. import aiofiles
  13. async def download_video(video_url, output_filename):
  14. """
  15. Asynchronously download a video from a given URL and save it to a specified file.
  16. :param video_url: The URL of the video to download
  17. :param output_filename: The file path where the video should be saved
  18. """
  19. async with aiohttp.ClientSession() as session:
  20. async with session.get(video_url) as response:
  21. if response.status == 200:
  22. async with aiofiles.open(output_filename, mode='wb') as file:
  23. while True:
  24. chunk = await response.content.read(1024)
  25. if not chunk:
  26. break
  27. await file.write(chunk)
  28. print("Download completed successfully.")
  29. else:
  30. print(f"Failed to download video. HTTP status: {response.status}")
  31. async def upload_to_oss(video_id, video_url):
  32. """
  33. Uploads video file to OSS
  34. :param video_id:
  35. :param video_url:
  36. :return:
  37. """
  38. print("start download video...")
  39. await download_video(video_url, "temp.mp4")
  40. print("video download successfully done")
  41. with open("temp.mp4", "rb") as file:
  42. file_content = file.read()
  43. print("读取完成")
  44. content_type = 'application/octet-stream'
  45. oss_object_key = f'single_video/{video_id}'
  46. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  47. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-pubbucket")
  48. response = bucket.put_object(oss_object_key, file_content, headers={'Content-Type': content_type})
  49. print(response.status)
  50. if 'Content-Length' in response.headers:
  51. return {
  52. 'status': response.status,
  53. 'oss_object_key': oss_object_key}
  54. raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}')
  55. def upload_to_pq(oss_object_key, title, user_id="69611689"):
  56. """
  57. Uploads video files to PQ
  58. :param oss_object_key:
  59. :param title:
  60. :param user_id:
  61. :return:
  62. """
  63. url = "https://vlogapi.piaoquantv.com/longvideoapi/crawler/video/send"
  64. payload = dict(
  65. pageSource='vlog-pages/post/post-video-post',
  66. videoPath=oss_object_key,
  67. width='720',
  68. height='1280',
  69. fileExtensions='mp4',
  70. viewStatus='1',
  71. title=title,
  72. careModelStatus='1',
  73. token='f04f58d6e664cbc9902660a1e8d20ce6cd7fdb0f',
  74. loginUid=user_id,
  75. versionCode='719',
  76. machineCode='weixin_openid_o0w175aZ4FJtqVsA1tcozJDJHdDU',
  77. appId='wx89e7eb06478361d7',
  78. clientTimestamp='1703337579331',
  79. machineInfo='{"sdkVersion":"3.2.5","brand":"iPhone","language":"zh_CN","model":"iPhone 12 Pro<iPhone13,3>","platform":"ios","system":"iOS 15.6.1","weChatVersion":"8.0.44","screenHeight":844,"screenWidth":390,"pixelRatio":3,"windowHeight":762,"windowWidth":390,"softVersion":"4.1.719"}',
  80. sessionId='1703337560040-27bfe208-a389-f476-db1d-840681e04b32',
  81. subSessionId='1703337569952-8f56d53c-b36d-760e-8abe-0b4a027cd5bd',
  82. senceType='1089',
  83. hotSenceType='1089',
  84. id='1050',
  85. channel='pq'
  86. )
  87. payload['videoPath'] = oss_object_key
  88. payload['title'] = title
  89. data = urllib.parse.urlencode(payload)
  90. headers = {
  91. 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.44(0x18002c2d) NetType/WIFI Language/zh_CN',
  92. 'Accept-Encoding': 'gzip,compress,br,deflate',
  93. 'Referer': 'https://servicewechat.com/wx89e7eb06478361d7/726/page-frame.html',
  94. 'Content-Type': 'application/x-www-form-urlencoded',
  95. 'Cookie': 'JSESSIONID=A60D96E7A300A25EA05425B069C8B459'
  96. }
  97. response = requests.post(url, data=data, headers=headers)
  98. data = response.json()
  99. code = data["code"]
  100. return code