aliyun_oss.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # -*- coding: utf-8 -*-
  2. # @Time: 2023/12/26
  3. from datetime import datetime
  4. from typing import Dict, Any, Optional
  5. import oss2
  6. import requests
  7. # OSS_BUCKET_PATH = "douyin"
  8. OSS_ACCESS_KEY_ID = "LTAIP6x1l3DXfSxm"
  9. OSS_ACCESS_KEY_SECRET = "KbTaM9ars4OX3PMS6Xm7rtxGr1FLon"
  10. OSS_BUCKET_ENDPOINT = "oss-cn-hangzhou-internal.aliyuncs.com"# 内网地址
  11. # OSS_BUCKET_ENDPOINT = "oss-cn-hangzhou.aliyuncs.com" # 外网地址
  12. OSS_BUCKET_NAME = "art-crawler"
  13. class Oss():
  14. # 抓取视频上传到art-crawler
  15. @classmethod
  16. def video_sync_upload_oss(cls, src_url: str,
  17. video_id: str,
  18. account_id: str,
  19. OSS_BUCKET_PATH: str,
  20. referer: Optional[str] = None) -> Dict[str, Any]:
  21. headers = {
  22. 'Accept': '*/*',
  23. 'Accept-Language': 'zh-CN,zh;q=0.9',
  24. 'Cache-Control': 'no-cache',
  25. 'Pragma': 'no-cache',
  26. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) '
  27. 'Chrome/117.0.0.0 Safari/537.36',
  28. }
  29. if referer:
  30. headers.update({'Referer': referer})
  31. response = requests.request(url=src_url, method='GET', headers=headers)
  32. file_content = response.content
  33. content_type = response.headers.get('Content-Type', 'application/octet-stream')
  34. oss_object_key = f'{OSS_BUCKET_PATH}/{account_id}/{video_id}'
  35. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  36. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, OSS_BUCKET_NAME)
  37. response = bucket.put_object(oss_object_key, file_content, headers={'Content-Type': content_type})
  38. if 'Content-Length' in response.headers:
  39. return {
  40. 'status': response.status,
  41. 'oss_object_key': oss_object_key}
  42. raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}')
  43. """
  44. 视频发送到art-pubbucket
  45. """
  46. @classmethod
  47. def stitching_sync_upload_oss(cls, src_url: str,
  48. video_id: str) -> Dict[str, Any]:
  49. oss_object_key = f'guanggao/video/{video_id}'
  50. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  51. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-pubbucket")
  52. response = bucket.put_object_from_file(oss_object_key, src_url)
  53. if 'Content-Length' in response.headers:
  54. return {
  55. 'status': response.status,
  56. 'oss_object_key': oss_object_key,
  57. 'save_oss_timestamp': int(datetime.now().timestamp() * 1000),
  58. }
  59. raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}')
  60. # 获取视频链接 将视频链接有效时间设置为1天
  61. @classmethod
  62. def get_oss_url(cls, videos, video_path):
  63. auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
  64. bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, OSS_BUCKET_NAME)
  65. list = []
  66. for i in videos:
  67. try:
  68. # 获取指定路径下的对象列表
  69. filename = i[2].split("/")[-1]
  70. bucket.get_object_to_file(i[2], f'{video_path}{filename}.mp4')
  71. list.append([i[0], i[1], i[2], f'{video_path}{filename}.mp4'])
  72. except Exception:
  73. continue
  74. return list