@@ -114,7 +114,7 @@ def __init__(self, Appid=None, Region=None, SecretId=None, SecretKey=None, Token
114114 else :
115115 raise CosClientError ('SecretId and SecretKey is Required!' )
116116
117- def uri (self , bucket , path = None , endpoint = None , domain = None ):
117+ def uri (self , bucket = None , path = None , endpoint = None , domain = None ):
118118 """拼接url
119119
120120 :param bucket(string): 存储桶名称.
@@ -130,11 +130,14 @@ def uri(self, bucket, path=None, endpoint=None, domain=None):
130130 if domain is not None :
131131 url = domain
132132 else :
133- bucket = format_bucket (bucket , self ._appid )
134133 if endpoint is None :
135134 endpoint = self ._endpoint
136135
137- url = u"{bucket}.{endpoint}" .format (bucket = bucket , endpoint = endpoint )
136+ if bucket is not None :
137+ bucket = format_bucket (bucket , self ._appid )
138+ url = u"{bucket}.{endpoint}" .format (bucket = bucket , endpoint = endpoint )
139+ else :
140+ url = u"{endpoint}" .format (endpoint = endpoint )
138141 if self ._ip is not None :
139142 url = self ._ip
140143 if self ._port is not None :
@@ -5529,6 +5532,70 @@ def ci_auditing_virus_query(self, Bucket, JobID, **kwargs):
55295532
55305533 return data
55315534
5535+ def ci_get_media_bucket (self , Regions = '' , BucketName = '' , BucketNames = '' , PageNumber = '' , PageSize = '' , ** kwargs ):
5536+ """查询媒体处理开通状态接口 https://cloud.tencent.com/document/product/436/48988
5537+
5538+ :param Regions(string): 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串
5539+ :param BucketName(string): 存储桶名称前缀,前缀搜索
5540+ :param BucketNames(string): 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索
5541+ :param PageNumber(string): 第几页
5542+ :param PageSize(string): 每页个数
5543+ :param kwargs(dict): 设置请求的headers.
5544+ :return(dict): 查询成功返回的结果,dict类型.
5545+
5546+ .. code-block:: python
5547+
5548+ config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
5549+ client = CosS3Client(config)
5550+ # 查询媒体处理队列接口
5551+ response = client.ci_get_media_bucket(
5552+ Regions='ap-chongqing,ap-shanghai',
5553+ BucketName='demo',
5554+ BucketNames='demo-1253960454,demo1-1253960454',
5555+ PageNumber='2',
5556+ PageSize='3',
5557+ )
5558+ print response
5559+ """
5560+ headers = mapped (kwargs )
5561+ final_headers = {}
5562+ params = {}
5563+ for key in headers :
5564+ if key .startswith ("response" ):
5565+ params [key ] = headers [key ]
5566+ else :
5567+ final_headers [key ] = headers [key ]
5568+ headers = final_headers
5569+
5570+ params = format_values (params )
5571+
5572+ path = "/mediabucket"
5573+ url = self ._conf .uri (bucket = None , path = path , endpoint = self ._conf ._endpoint_ci )
5574+ url = u"{url}?{regions}&{bucketNames}&{bucketName}&{pageNumber}&{pageSize}" .format (
5575+ url = to_unicode (url ),
5576+ regions = to_unicode ('regions=' + Regions ),
5577+ bucketNames = to_unicode ('bucketNames=' + BucketNames ),
5578+ bucketName = to_unicode ('bucketName=' + BucketName ),
5579+ pageNumber = to_unicode ('pageNumber=' + PageNumber ),
5580+ pageSize = to_unicode ('pageSize=' + PageSize ),
5581+ )
5582+ logger .info ("get_media_bucket result, url=:{url} ,headers=:{headers}, params=:{params}" .format (
5583+ url = url ,
5584+ headers = headers ,
5585+ params = params ))
5586+ rt = self .send_request (
5587+ method = 'GET' ,
5588+ url = url ,
5589+ bucket = None ,
5590+ auth = CosS3Auth (self ._conf , path , params = params ),
5591+ params = params ,
5592+ headers = headers )
5593+
5594+ data = xml_to_dict (rt .content )
5595+ # 单个元素时将dict转为list
5596+ format_dict (data , ['MediaBucketList' ])
5597+ return data
5598+
55325599 def ci_get_media_queue (self , Bucket , ** kwargs ):
55335600 """查询媒体处理队列接口 https://cloud.tencent.com/document/product/436/54045
55345601
@@ -6052,6 +6119,59 @@ def get_snapshot(self, Bucket, Key, Time, Width=None, Height=None, Format='jpg',
60526119
60536120 return response
60546121
6122+ def get_pm3u8 (self , Bucket , Key , Expires , ** kwargs ):
6123+ """获取私有 M3U8 ts 资源的下载授权 https://cloud.tencent.com/document/product/436/63740
6124+
6125+ :param Bucket(string): 存储桶名称.
6126+ :param Key(string): COS路径.
6127+ :param Expires(string): 私有 ts 资源 url 下载凭证的相对有效期.
6128+ :param kwargs(dict): 设置请求的headers.
6129+ :return(dict): 下载成功返回的结果,包含Body对应的StreamBody,可以获取文件流或下载文件到本地.
6130+
6131+ .. code-block:: python
6132+
6133+ config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
6134+ client = CosS3Client(config)
6135+ # 用于获取COS文件某个时间的截图
6136+ response = client.get_snapshot(
6137+ Bucket='bucket',
6138+ Key='test.mp4',
6139+ Expires='3600',
6140+ )
6141+ response['Body'].get_stream_to_file('pm3u8.m3u8')
6142+ """
6143+ headers = mapped (kwargs )
6144+ final_headers = {}
6145+ params = {'ci-process' : 'pm3u8' }
6146+ for key in headers :
6147+ if key .startswith ("response" ):
6148+ params [key ] = headers [key ]
6149+ else :
6150+ final_headers [key ] = headers [key ]
6151+ headers = final_headers
6152+
6153+ params ['expires' ] = Expires
6154+ params = format_values (params )
6155+
6156+ url = self ._conf .uri (bucket = Bucket , path = Key )
6157+ logger .info ("get_pm3u8, url=:{url} ,headers=:{headers}, params=:{params}" .format (
6158+ url = url ,
6159+ headers = headers ,
6160+ params = params ))
6161+ rt = self .send_request (
6162+ method = 'GET' ,
6163+ url = url ,
6164+ bucket = Bucket ,
6165+ stream = True ,
6166+ auth = CosS3Auth (self ._conf , Key , params = params ),
6167+ params = params ,
6168+ headers = headers )
6169+
6170+ response = dict (** rt .headers )
6171+ response ['Body' ] = StreamBody (rt )
6172+
6173+ return response
6174+
60556175 def ci_get_doc_queue (self , Bucket , ** kwargs ):
60566176 """查询文档转码处理队列接口 https://cloud.tencent.com/document/product/460/46946
60576177
0 commit comments