aliyun_oss.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. # -*- coding: utf-8 -*-
  2. # @Time: 2023/12/26
  3. import time
  4. import uuid
  5. from datetime import datetime
  6. from typing import Dict, Any, Optional
  7. import oss2
  8. import requests
  9. OSS_ACCESS_KEY_ID = "LTAIP6x1l3DXfSxm"
  10. OSS_ACCESS_KEY_SECRET = "KbTaM9ars4OX3PMS6Xm7rtxGr1FLon"
  11. # OSS_BUCKET_ENDPOINT = "oss-cn-hangzhou-internal.aliyuncs.com"# 内网地址
  12. OSS_BUCKET_ENDPOINT = "oss-cn-hangzhou.aliyuncs.com" # 外网地址
  13. OSS_BUCKET_NAME = "art-crawler"
  14. class Oss:
  15. @classmethod
  16. def channel_upload_oss(cls, src_url: str,
  17. video_id: str,
  18. referer: Optional[str] = None) -> Dict[str, Any]:
  19. headers = {
  20. 'Accept': '*/*',
  21. 'Accept-Language': 'zh-CN,zh;q=0.9',
  22. 'Cache-Control': 'no-cache',
  23. 'Pragma': 'no-cache',
  24. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) '
  25. 'Chrome/117.0.0.0 Safari/537.36',
  26. }
  27. if referer:
  28. headers.update({'Referer': referer})
  29. response = requests.request(url=src_url, method='GET', headers=headers, timeout=30)
  30. file_content = response.content
  31. content_type = response.headers.get('Content-Type', 'application/octet-stream')
  32. oss_object_key = f'carry/video/{video_id}'
  33. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  34. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, OSS_BUCKET_NAME)
  35. response = bucket.put_object(oss_object_key, file_content, headers={'Content-Type': content_type})
  36. if 'Content-Length' in response.headers:
  37. return {
  38. 'status': response.status,
  39. 'oss_object_key': oss_object_key}
  40. raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}')
  41. """
  42. 视频发送到art-pubbucket
  43. """
  44. @classmethod
  45. def stitching_sync_upload_bytes_to_oss(cls, data: str, video_id: str) -> Dict[str, Any]:
  46. oss_object_key = f'carry/video/{video_id}'
  47. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  48. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-pubbucket")
  49. response = bucket.put_object(oss_object_key, data)
  50. if 'Content-Length' in response.headers:
  51. return {
  52. 'status': response.status,
  53. 'oss_object_key': oss_object_key,
  54. 'save_oss_timestamp': int(datetime.now().timestamp() * 1000),
  55. }
  56. raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}')
  57. """
  58. 视频发送到art-pubbucket
  59. """
  60. @classmethod
  61. def stitching_sync_upload_oss(cls, src_url: str,
  62. video_id: str) -> Dict[str, Any]:
  63. oss_object_key = f'carry/video/{video_id}'
  64. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  65. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-pubbucket")
  66. response = bucket.put_object_from_file(oss_object_key, src_url)
  67. if 'Content-Length' in response.headers:
  68. return {
  69. 'status': response.status,
  70. 'oss_object_key': oss_object_key,
  71. 'save_oss_timestamp': int(datetime.now().timestamp() * 1000),
  72. }
  73. raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}')
  74. """
  75. 封面发送到art-pubbucket
  76. """
  77. @classmethod
  78. def stitching_fm_upload_oss(cls, src_url: str,
  79. video_id: str) -> Dict[str, Any]:
  80. oss_object_key = f'jq_oss/jpg/{video_id}.jpg'
  81. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  82. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-pubbucket")
  83. response = bucket.put_object_from_file(oss_object_key, src_url)
  84. if 'Content-Length' in response.headers:
  85. return {
  86. 'status': response.status,
  87. 'oss_object_key': oss_object_key,
  88. 'save_oss_timestamp': int(datetime.now().timestamp() * 1000),
  89. }
  90. raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}')
  91. """
  92. 封面发送到art-pubbucket
  93. """
  94. @classmethod
  95. def mp3_upload_oss(cls, src_url: str,
  96. video_id: str) -> Dict[str, Any]:
  97. oss_object_key = f'jq_audio/audio/{video_id}.mp3'
  98. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  99. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-crawler")
  100. response = bucket.put_object_from_file(oss_object_key, src_url)
  101. if 'Content-Length' in response.headers:
  102. return {
  103. 'status': response.status,
  104. 'oss_object_key': oss_object_key,
  105. 'save_oss_timestamp': int(datetime.now().timestamp() * 1000),
  106. }
  107. raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}')
  108. @classmethod
  109. def download_video_oss(cls, url, file_path, add_suffix: bool = True):
  110. video_path = file_path + 'video.mp4' if add_suffix else file_path
  111. oss_object_key = cls.channel_upload_oss(url, str(uuid.uuid4()))
  112. time.sleep(2)
  113. oss_object = oss_object_key.get("oss_object_key")
  114. if oss_object:
  115. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  116. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, OSS_BUCKET_NAME)
  117. # 获取指定路径下的对象列表
  118. bucket.get_object_to_file(oss_object, video_path)
  119. time.sleep(5)
  120. return video_path
  121. else:
  122. return video_path
  123. @classmethod
  124. def download_sph_ls(cls, video_url, video_path_url, v_id):
  125. if "jpg" in video_url:
  126. video_path = video_path_url + str(v_id) + '.jpg'
  127. else:
  128. video_path = video_path_url + str(v_id) + '.mp4'
  129. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  130. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, OSS_BUCKET_NAME)
  131. # 获取指定路径下的对象列表
  132. bucket.get_object_to_file(video_url, video_path)
  133. time.sleep(5)
  134. return video_path
  135. @classmethod
  136. def generate_url(cls, oss_object_key: str) -> str:
  137. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  138. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, 'art-pubbucket')
  139. return bucket.sign_url(method='GET', key=oss_object_key, expires=3600, slash_safe=True)
  140. if __name__ == '__main__':
  141. Oss.download_sph_ls('channel/video/sph/14374775553517295881.jpg','asa','1')