Skip to content

Commit f84b0a3

Browse files
authored
Merge pull request #208 from degangliu/master
增加文档转码相关的api
2 parents ae70df6 + eacfb5c commit f84b0a3

File tree

2 files changed

+360
-4
lines changed

2 files changed

+360
-4
lines changed

qcloud_cos/cos_client.py

Lines changed: 302 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6052,6 +6052,308 @@ def get_snapshot(self, Bucket, Key, Time, Width=None, Height=None, Format='jpg',
60526052

60536053
return response
60546054

6055+
def ci_get_doc_queue(self, Bucket, **kwargs):
6056+
"""查询文档转码处理队列接口 https://cloud.tencent.com/document/product/460/46946
6057+
6058+
:param Bucket(string): 存储桶名称.
6059+
:param kwargs(dict): 设置请求的headers.
6060+
:return(dict): 查询成功返回的结果,dict类型.
6061+
6062+
.. code-block:: python
6063+
6064+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
6065+
client = CosS3Client(config)
6066+
# 查询文档转码处理队列接口
6067+
response = client.ci_get_doc_queue(
6068+
Bucket='bucket'
6069+
)
6070+
print response
6071+
"""
6072+
headers = mapped(kwargs)
6073+
final_headers = {}
6074+
params = {}
6075+
for key in headers:
6076+
if key.startswith("response"):
6077+
params[key] = headers[key]
6078+
else:
6079+
final_headers[key] = headers[key]
6080+
headers = final_headers
6081+
6082+
params = format_values(params)
6083+
6084+
path = "/docqueue"
6085+
url = self._conf.uri(bucket=Bucket, path=path, endpoint=self._conf._endpoint_ci)
6086+
logger.info("get_doc_queue result, url=:{url} ,headers=:{headers}, params=:{params}".format(
6087+
url=url,
6088+
headers=headers,
6089+
params=params))
6090+
rt = self.send_request(
6091+
method='GET',
6092+
url=url,
6093+
bucket=Bucket,
6094+
auth=CosS3Auth(self._conf, path, params=params),
6095+
params=params,
6096+
headers=headers)
6097+
6098+
data = xml_to_dict(rt.content)
6099+
# 单个元素时将dict转为list
6100+
format_dict(data, ['QueueList'])
6101+
return data
6102+
6103+
def ci_create_doc_job(self, Bucket, QueueId, InputObject, OutputBucket, OutputRegion, OutputObject, SrcType=None, TgtType=None,
6104+
StartPage=None, EndPage=None, SheetId=None, PaperDirection=None, PaperSize=None, DocPassword=None, Comments=None, PageRanges=None,
6105+
ImageParams=None, Quality=None, Zoom=None, ImageDpi=None, PicPagination=None, **kwargs):
6106+
""" 创建任务接口 https://cloud.tencent.com/document/product/460/46942
6107+
6108+
:param Bucket(string): 存储桶名称.
6109+
:param QueueId(string): 任务所在的队列 ID.
6110+
:param InputObject(string): 文件在 COS 上的文件路径,Bucket 由 Host 指定.
6111+
:param OutputBucket(string): 存储结果的存储桶.
6112+
:param OutputRegion(string): 存储结果的存储桶的地域.
6113+
:param OutputObject(string): 输出文件路径。
6114+
非表格文件输出文件名需包含 ${Number} 或 ${Page} 参数。多个输出文件,${Number} 表示序号从1开始,${Page} 表示序号与预览页码一致。
6115+
${Number} 表示多个输出文件,序号从1开始,例如输入 abc_${Number}.jpg,预览某文件5 - 6页,则输出文件名为 abc_1.jpg,abc_2.jpg
6116+
${Page} 表示多个输出文件,序号与预览页码一致,例如输入 abc_${Page}.jpg,预览某文件5-6页,则输出文件名为 abc_5.jpg,abc_6.jpg
6117+
表格文件输出路径需包含 ${SheetID} 占位符,输出文件名必须包含 ${Number} 参数。
6118+
例如 /${SheetID}/abc_${Number}.jpg,先根据 excel 转换的表格数,生成对应数量的文件夹,再在对应的文件夹下,生成对应数量的图片文件.
6119+
:param SrcType(string): 源数据的后缀类型,当前文档转换根据 cos 对象的后缀名来确定源数据类型,当 cos 对象没有后缀名时,可以设置该值.
6120+
:param TgtType(string): 转换输出目标文件类型:
6121+
jpg,转成 jpg 格式的图片文件;如果传入的格式未能识别,默认使用 jpg 格式
6122+
png,转成 png 格式的图片文件
6123+
pdf,转成 pdf 格式文件(暂不支持指定页数).
6124+
:param StartPage(int): 从第 X 页开始转换;在表格文件中,一张表可能分割为多页转换,生成多张图片。StartPage 表示从指定 SheetId 的第 X 页开始转换。默认为1.
6125+
:param EndPage(int): 转换至第 X 页;在表格文件中,一张表可能分割为多页转换,生成多张图片。EndPage 表示转换至指定 SheetId 的第 X 页。默认为-1,即转换全部页
6126+
:param SheetId(int): 表格文件参数,转换第 X 个表,默认为0;设置 SheetId 为0,即转换文档中全部表
6127+
:param PaperDirection(int): 表格文件转换纸张方向,0代表垂直方向,非0代表水平方向,默认为0
6128+
:param PaperSize(int): 设置纸张(画布)大小,对应信息为: 0 → A4 、 1 → A2 、 2 → A0 ,默认 A4 纸张
6129+
:param DocPassword(string): Office 文档的打开密码,如果需要转换有密码的文档,请设置该字段
6130+
:param Comments(int): 是否隐藏批注和应用修订,默认为 0;0:隐藏批注,应用修订;1:显示批注和修订
6131+
:param ImageParams(string): 转换后的图片处理参数,支持 基础图片处理 所有处理参数,多个处理参数可通过 管道操作符 分隔,从而实现在一次访问中按顺序对图片进行不同处理
6132+
:param Quality(int): 生成预览图的图片质量,取值范围 [1-100],默认值100。 例:值为100,代表生成图片质量为100%
6133+
:param Zoom(int): 预览图片的缩放参数,取值范围[10-200], 默认值100。 例:值为200,代表图片缩放比例为200% 即放大两倍
6134+
:param ImageDpi(int): 按指定 dpi 渲染图片,该参数与 Zoom 共同作用,取值范围 96-600 ,默认值为 96 。转码后的图片单边宽度需小于65500像素
6135+
:param PicPagination(int): 是否转换成单张长图,设置为 1 时,最多仅支持将 20 标准页面合成单张长图,超过可能会报错,分页范围可以通过 StartPage、EndPage 控制。默认值为 0 ,按页导出图片,TgtType="png"/"jpg" 时生效
6136+
:param PageRanges(string): 自定义需要转换的分页范围,例如: "1,2-4,7" ,则表示转换文档的 1、2、3、4、7 页面
6137+
:param kwargs(dict): 设置请求的headers.
6138+
:return(dict): 查询成功返回的结果,dict类型.
6139+
6140+
.. code-block:: python
6141+
6142+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
6143+
client = CosS3Client(config)
6144+
# 创建任务接口
6145+
response = client.ci_create_doc_job(
6146+
Bucket='bucket'
6147+
QueueId='p532fdead78444e649e1a4467c1cd19d3',
6148+
InputObject='test.doc',
6149+
OutputBucket='outputbucket',
6150+
OutputRegion='outputregion',
6151+
OutputObject='/${SheetID}/abc_${Number}.jpg',
6152+
)
6153+
print response
6154+
"""
6155+
headers = mapped(kwargs)
6156+
final_headers = {}
6157+
params = {}
6158+
for key in headers:
6159+
if key.startswith("response"):
6160+
params[key] = headers[key]
6161+
else:
6162+
final_headers[key] = headers[key]
6163+
headers = final_headers
6164+
if 'Content-Type' not in headers:
6165+
headers['Content-Type'] = 'application/xml'
6166+
6167+
params = format_values(params)
6168+
body = {
6169+
'Input': {
6170+
'Object': InputObject,
6171+
},
6172+
'QueueId': QueueId,
6173+
'Tag': 'DocProcess',
6174+
'Operation': {
6175+
'Output': {'Bucket': OutputBucket, 'Region': OutputRegion, 'Object': OutputObject},
6176+
'DocProcess': {
6177+
}
6178+
}
6179+
}
6180+
if SrcType:
6181+
body['Operation']['DocProcess']['SrcType'] = SrcType
6182+
if TgtType:
6183+
body['Operation']['DocProcess']['TgtType'] = TgtType
6184+
if ImageParams:
6185+
body['Operation']['DocProcess']['ImageParams'] = ImageParams
6186+
if DocPassword:
6187+
body['Operation']['DocProcess']['DocPassword'] = DocPassword
6188+
if PageRanges:
6189+
body['Operation']['DocProcess']['PageRanges'] = PageRanges
6190+
if StartPage:
6191+
body['Operation']['DocProcess']['StartPage'] = StartPage
6192+
if EndPage:
6193+
body['Operation']['DocProcess']['EndPage'] = EndPage
6194+
if SheetId:
6195+
body['Operation']['DocProcess']['SheetId'] = SheetId
6196+
if PaperDirection:
6197+
body['Operation']['DocProcess']['PaperDirection'] = PaperDirection
6198+
if PaperSize:
6199+
body['Operation']['DocProcess']['PaperSize'] = PaperSize
6200+
if Quality:
6201+
body['Operation']['DocProcess']['Quality'] = Quality
6202+
if Zoom:
6203+
body['Operation']['DocProcess']['Zoom'] = Zoom
6204+
if PicPagination:
6205+
body['Operation']['DocProcess']['PicPagination'] = PicPagination
6206+
if ImageDpi:
6207+
body['Operation']['DocProcess']['ImageDpi'] = ImageDpi
6208+
if Comments:
6209+
body['Operation']['DocProcess']['Comments'] = Comments
6210+
6211+
xml_config = format_xml(data=body, root='Request')
6212+
path = "/doc_jobs"
6213+
url = self._conf.uri(bucket=Bucket, path=path, endpoint=self._conf._endpoint_ci)
6214+
logger.info("create_doc_jobs result, url=:{url} ,headers=:{headers}, params=:{params}, xml_config=:{xml_config}".format(
6215+
url=url,
6216+
headers=headers,
6217+
params=params,
6218+
xml_config=xml_config))
6219+
rt = self.send_request(
6220+
method='POST',
6221+
url=url,
6222+
bucket=Bucket,
6223+
data=xml_config,
6224+
auth=CosS3Auth(self._conf, path, params=params),
6225+
params=params,
6226+
headers=headers)
6227+
6228+
data = xml_to_dict(rt.content)
6229+
return data
6230+
6231+
def ci_get_doc_job(self, Bucket, JobID, **kwargs):
6232+
""" 查询任务接口 https://cloud.tencent.com/document/product/460/46943
6233+
6234+
:param Bucket(string): 存储桶名称.
6235+
:param JobID(string): 任务ID.
6236+
:param kwargs(dict): 设置请求的headers.
6237+
:return(dict): 查询成功返回的结果,dict类型.
6238+
6239+
.. code-block:: python
6240+
6241+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
6242+
client = CosS3Client(config)
6243+
# 查询任务接口
6244+
response = client.ci_get_doc_job(
6245+
Bucket='bucket'
6246+
JobID='jobid'
6247+
)
6248+
print response
6249+
"""
6250+
headers = mapped(kwargs)
6251+
final_headers = {}
6252+
params = {}
6253+
for key in headers:
6254+
if key.startswith("response"):
6255+
params[key] = headers[key]
6256+
else:
6257+
final_headers[key] = headers[key]
6258+
headers = final_headers
6259+
if 'Content-Type' not in headers:
6260+
headers['Content-Type'] = 'application/xml'
6261+
6262+
params = format_values(params)
6263+
path = "/doc_jobs/" + JobID
6264+
url = self._conf.uri(bucket=Bucket, path=path, endpoint=self._conf._endpoint_ci)
6265+
logger.info("get_doc_jobs result, url=:{url} ,headers=:{headers}, params=:{params}".format(
6266+
url=url,
6267+
headers=headers,
6268+
params=params))
6269+
rt = self.send_request(
6270+
method='GET',
6271+
url=url,
6272+
bucket=Bucket,
6273+
auth=CosS3Auth(self._conf, path, params=params),
6274+
params=params,
6275+
headers=headers)
6276+
logger.debug("ci_get_doc_jobs result, url=:{url} ,content=:{content}".format(
6277+
url=url,
6278+
content=rt.content))
6279+
6280+
data = xml_to_dict(rt.content)
6281+
# 单个元素时将dict转为list
6282+
format_dict(data, ['JobsDetail'])
6283+
return data
6284+
6285+
def ci_list_doc_jobs(self, Bucket, QueueId, StartCreationTime=None, EndCreationTime=None, OrderByTime='Desc', States='All', Size=10, NextToken='', **kwargs):
6286+
""" 拉取文档预览任务列表接口 https://cloud.tencent.com/document/product/460/46944
6287+
6288+
:param Bucket(string): 存储桶名称.
6289+
:param QueueId(string): 队列ID.
6290+
:param StartCreationTime(string): 开始时间.
6291+
:param EndCreationTime(string): 结束时间.
6292+
:param OrderByTime(string): 排序方式.Desc 或者 Asc。默认为 Desc
6293+
:param States(string): 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All
6294+
:param Size(string): 拉取的最大任务数。默认为10。最大为100.
6295+
:param NextToken(string): 请求的上下文,用于翻页.
6296+
:param kwargs(dict): 设置请求的headers.
6297+
:return(dict): 查询成功返回的结果,dict类型.
6298+
6299+
.. code-block:: python
6300+
6301+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
6302+
client = CosS3Client(config)
6303+
# 创建任务接口
6304+
response = client.ci_list_doc_jobs(
6305+
Bucket='bucket'
6306+
QueueId='',
6307+
)
6308+
print response
6309+
"""
6310+
headers = mapped(kwargs)
6311+
final_headers = {}
6312+
params = {}
6313+
for key in headers:
6314+
if key.startswith("response"):
6315+
params[key] = headers[key]
6316+
else:
6317+
final_headers[key] = headers[key]
6318+
headers = final_headers
6319+
if 'Content-Type' not in headers:
6320+
headers['Content-Type'] = 'application/xml'
6321+
6322+
params = format_values(params)
6323+
path = "/doc_jobs"
6324+
url = self._conf.uri(bucket=Bucket, path=path, endpoint=self._conf._endpoint_ci)
6325+
url = u"{url}?{QueueId}&{Tag}&{OrderByTime}&{States}&{Size}&{NextToken}".format(
6326+
url=to_unicode(url),
6327+
QueueId=to_unicode('queueId='+QueueId),
6328+
Tag=to_unicode('tag=DocProcess'),
6329+
OrderByTime=to_unicode('orderByTime='+OrderByTime),
6330+
States=to_unicode('states='+States),
6331+
Size=to_unicode('size='+str(Size)),
6332+
NextToken=to_unicode('nextToken='+NextToken)
6333+
)
6334+
if StartCreationTime is not None:
6335+
url = u"{url}&{StartCreationTime}".format(StartCreationTime=to_unicode('startCreationTime='+StartCreationTime))
6336+
if EndCreationTime is not None:
6337+
url = u"{url}&{EndCreationTime}".format(EndCreationTime=to_unicode('endCreationTime='+EndCreationTime))
6338+
logger.info("list_doc_jobs result, url=:{url} ,headers=:{headers}, params=:{params}".format(
6339+
url=url,
6340+
headers=headers,
6341+
params=params))
6342+
rt = self.send_request(
6343+
method='GET',
6344+
url=url,
6345+
bucket=Bucket,
6346+
auth=CosS3Auth(self._conf, path, params=params),
6347+
params=params,
6348+
headers=headers)
6349+
logger.debug("list_doc_jobs result, url=:{url} ,content=:{content}".format(
6350+
url=url,
6351+
content=rt.content))
6352+
data = xml_to_dict(rt.content)
6353+
# 单个元素时将dict转为list
6354+
format_dict(data, ['JobsDetail'])
6355+
return data
6356+
60556357

60566358
if __name__ == "__main__":
60576359
pass

0 commit comments

Comments
 (0)