# -*- coding: utf-8 -*- # @Time: 2023/12/26 import time import uuid from datetime import datetime from typing import Dict, Any, Optional import oss2 import requests OSS_ACCESS_KEY_ID = "LTAIP6x1l3DXfSxm" OSS_ACCESS_KEY_SECRET = "KbTaM9ars4OX3PMS6Xm7rtxGr1FLon" # OSS_BUCKET_ENDPOINT = "oss-cn-hangzhou-internal.aliyuncs.com"# 内网地址 OSS_BUCKET_ENDPOINT = "oss-cn-hangzhou.aliyuncs.com" # 外网地址 OSS_BUCKET_NAME = "art-crawler" class Oss(): @classmethod def channel_upload_oss(cls, src_url: str, video_id: str, referer: Optional[str] = None) -> Dict[str, Any]: headers = { 'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/117.0.0.0 Safari/537.36', } if referer: headers.update({'Referer': referer}) response = requests.request(url=src_url, method='GET', headers=headers, timeout=30) file_content = response.content content_type = response.headers.get('Content-Type', 'application/octet-stream') oss_object_key = f'carry/video/{video_id}' auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, OSS_BUCKET_NAME) response = bucket.put_object(oss_object_key, file_content, headers={'Content-Type': content_type}) if 'Content-Length' in response.headers: return { 'status': response.status, 'oss_object_key': oss_object_key} raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}') """ 视频发送到art-pubbucket """ @classmethod def stitching_sync_upload_oss(cls, src_url: str, video_id: str) -> Dict[str, Any]: oss_object_key = f'carry/video/{video_id}' auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-pubbucket") response = bucket.put_object_from_file(oss_object_key, src_url) if 'Content-Length' in response.headers: return { 'status': response.status, 'oss_object_key': oss_object_key, 'save_oss_timestamp': int(datetime.now().timestamp() * 1000), } raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}') """ 封面发送到art-pubbucket """ @classmethod def stitching_fm_upload_oss(cls, src_url: str, video_id: str) -> Dict[str, Any]: oss_object_key = f'jq_oss/jpg/{video_id}.jpg' auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-pubbucket") response = bucket.put_object_from_file(oss_object_key, src_url) if 'Content-Length' in response.headers: return { 'status': response.status, 'oss_object_key': oss_object_key, 'save_oss_timestamp': int(datetime.now().timestamp() * 1000), } raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}') """ 封面发送到art-pubbucket """ @classmethod def mp3_upload_oss(cls, src_url: str, video_id: str) -> Dict[str, Any]: oss_object_key = f'jq_audio/audio/{video_id}.mp3' auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, "art-crawler") response = bucket.put_object_from_file(oss_object_key, src_url) if 'Content-Length' in response.headers: return { 'status': response.status, 'oss_object_key': oss_object_key, 'save_oss_timestamp': int(datetime.now().timestamp() * 1000), } raise AssertionError(f'OSS上传失败,请求ID: \n{response.headers["x-oss-request-id"]}') @classmethod def download_video_oss(cls, url, file_path): video_path = file_path + 'video.mp4' oss_object_key = cls.channel_upload_oss(url, str(uuid.uuid4())) time.sleep(2) oss_object = oss_object_key.get("oss_object_key") if oss_object: auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, OSS_BUCKET_NAME) # 获取指定路径下的对象列表 bucket.get_object_to_file(oss_object, video_path) time.sleep(5) return video_path else: return video_path @classmethod def download_sph_ls(cls, video_url, video_path_url, v_id): if "jpg" in video_url: video_path = video_path_url + str(v_id) + '.jpg' else: video_path = video_path_url + str(v_id) + '.mp4' auth = oss2.Auth(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, OSS_BUCKET_NAME) # 获取指定路径下的对象列表 bucket.get_object_to_file(video_url, video_path) time.sleep(5) return video_path if __name__ == '__main__': Oss.download_sph_ls('channel/video/sph/14374775553517295881.jpg','asa','1')