Giter Club home page Giter Club logo

qcloudapi-sdk-python's Introduction

pypi version Build Status Coverage Status

qcloudapi-sdk-python

qcloudapi-sdk-python是为了让Python开发者能够在自己的代码里更快捷方便的使用腾讯云的API而开发的SDK工具包。

资源

入门

  1. 申请安全凭证。 在第一次使用云API之前,用户首先需要在腾讯云网站上申请安全凭证,安全凭证包括 SecretId 和 SecretKey, SecretId 是用于标识 API 调用者的身份,SecretKey是用于加密签名字符串和服务器端验证签名字符串的密钥。SecretKey 必须严格保管,避免泄露。

安装

$ pip install qcloudapi-sdk-python

或者下载源码安装

$ git clone https://github.com/QcloudApi/qcloudapi-sdk-python
$ cd qcloudapi-sdk-python
$ python setup.py install

示例

# -*- coding: utf8 -*-
from QcloudApi.qcloudapi import QcloudApi

# 设置需要加载的模块
module = 'cvm'

# 对应接口的接口名,请参考wiki文档上对应接口的接口名
action = 'DescribeInstances'

# 云API的公共参数
config = {
    'Region': 'ap-guangzhou',
    'secretId': '您的secretId',
    'secretKey': '您的secretKey',
    'method': 'GET',
    'SignatureMethod': 'HmacSHA1',
    # 只有cvm需要填写version,其他产品不需要
    'Version': '2017-03-12'
}

# 接口参数,根据实际情况填写,支持json
# 例如数组可以 "ArrayExample": ["1","2","3"]
# 例如字典可以 "DictExample": {"key1": "value1", "key2": "values2"}
action_params = {
    'Limit':1,
}

try:
    service = QcloudApi(module, config)

    # 请求前可以通过下面几个方法重新设置请求的secretId/secretKey/Region/method/SignatureMethod参数
    # 重新设置请求的Region
    #service.setRegion('ap-shanghai')

    # 打印生成的请求URL,不发起请求
    print(service.generateUrl(action, action_params))
    # 调用接口,发起请求,并打印返回结果
    print(service.call(action, action_params))
except Exception as e:
    import traceback
    print('traceback.format_exc():\n%s' % traceback.format_exc())

模块对照表

每个产品都有自己的独立域名,例如云服务器对应的域名为 cvm.api.qcloud.com ,一般域名的第一段对应产品名的缩写(特殊情况会另行说明),此例中为 cvm 。在 SDK 中,产品名缩写对应为模块名,放置于 QcloudApi/modules 目录下(base.py 例外,它是基类),对于没有在 modules 目录列出的产品,依然可以使用。例如在 tests/integration/ckafka 目录下的测试文件 test_list_instance.py ,表明了调用未显式注册的产品也可以被正常使用,前提是使用产品名和域名首段一致,如果不一致,则以域名首段为准,在使用cmq的产品时将会发生这种情况。

以下列出目前已经显式支持或者可以动态支持的产品列表,顺序依照官网 API 文档的权重。有些产品已经支持或者部分支持 API 3.0 ,在表格中有注明,建议用户使用 API 3.0 对应的 SDK

请注意,并非所有腾讯云上的产品都支持腾讯云 API ,有部分产品例如对象存储服务( COS )有自己独立的 API 和 SDK ,详情请咨询对应产品的技术支持人员。

部分产品根据自身业务特点,拆分成多个服务,其调用域名根据功能而不同,此种情况下模块名会有多个,请配合官网文档进行使用,本文档不另作说明了。

以下信息更新于2018-09-25

产品中文名 模块名 显式支持 支持 API 3.0 备注
云服务器 cvm、image、dfw、eip
云硬盘 cbs、snapshot
黑石物理服务器 bm、bmlb、bmeip、bmvpc 部分
容器服务 ccs、ccr
弹性伸缩 scaling
负载均衡 lb
无服务器云函数 scf 部分
私有网络 vpc
批量计算 batch
API网关 apigateway
专线接入 dc
动态加速网络 dsa
消息队列 CKafka ckafka
消息队列 IoT MQ mqiot
消息队列 CMQ cmq-queue-{REGION} 产品域名不固定,和区域有关
数据库 MySQL cdb
数据库 MariaDB(TDSQL) tdsql
数据库 SQL Server sqlserver
内容分发网络 cdn
弹性缓存 Redis redis 部分
弹性缓存 Memcached cmem
文档数据库 MongoDB mongodb
云监控 monitor
TBaaS tbaas
访问管理 cam、sts 部分
大禹网络安全 bgpip、shield 部分
天御业务安全防护 sec 产品域名为 csec
云审计 cloudaudit
云解析 cns
SSL 证书 wss
云搜 yunsou
文智自然语言处理 wenzhi
点播 vod
云市场 market
直播 live 部分
腾讯机器翻译 tmt
物联网通信 iotcloud
弹性 Mapreduce emr
账号相关 trade、tag、account、feecenter 部分
渠道合作伙伴 partners
金融智能客服 athena

qcloudapi-sdk-python's People

Contributors

qcloudapi avatar zqfan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qcloudapi-sdk-python's Issues

Missing cmq module

User could not use QcloudApi SDK to use CMQ service, due to missing cmq module.

python 3.6 SSL: CERTIFICATE_VERIFY_FAILED

Traceback (most recent call last):
File "/Users/tony/self_file/paipai/DRF_practice/self_practice/tcent/cdn.py", line 36, in
print(service.call(action, params))
File "/Users/tony/self_file/paipai/paipaicmdb/paipaicmdb/lib/python3.6/site-packages/QcloudApi/qcloudapi.py", line 172, in call
return service.call(action, params)
File "/Users/tony/self_file/paipai/paipaicmdb/paipaicmdb/lib/python3.6/site-packages/QcloudApi/modules/base.py", line 158, in call
resp_inter = self.apiRequest.send_request(req_inter)
File "/Users/tony/self_file/paipai/paipaicmdb/paipaicmdb/lib/python3.6/site-packages/QcloudApi/common/request.py", line 109, in send_request
raise ApiClientNetworkException(str(e))
QcloudApi.common.api_exception.ApiClientNetworkException: ApiClientNetworkException Error Message: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)

调用 qcloudapi-sdk-python 的 DescribeInstances 返回结果中没有 InstanceType字段

查询Instance实例状态

API文档 里面返回结果是有 InstanceType字段的,为什么调用 qcloudapi-sdk-python 以及 qcloudcli cvm DescribeInstances是没有InstanceType字段的,怎么从 CPU 和 Memory 知道这个InstanceType啊?

 API文档里面的返回结果:
{
"Response": {
"TotalCount": 2,
"InstanceSet": [
{
"Placement": {
"Zone": "ap-guangzhou-1",
"HostId": "",
"ProjectId": 0
},
"InstanceId": "ins-r8hr2upy",
"InstanceType": "S1.SMALL2",
"CPU": 1,
"Memory": 2,
"InstanceName": "\u6d4b\u8bd5\u5b9e\u4f8b",
"InstanceChargeType": "PREPAID",
"SystemDisk": {
"DiskType": "CLOUD_BASIC",
"DiskId": "disk-4rnslbwq",
"DiskSize": 20
},
"DataDisks": [
{
"DiskType": "CLOUD_BASIC",
"DiskId": "disk-4rnslb35",
"DiskSize": 50
}
],
"PrivateIpAddresses": [
"10.104.37.58"
],
"PublicIpAddresses": [
"123.207.32.83"
],
"InternetAccessible": {
"InternetMaxBandwidthOut": 2,
"InternetChargeType": "BANDWIDTH_PREPAID",
"PublicIpAssigned": "TRUE"
},
"VirtualPrivateCloud": {
"VpcId": "vpc-4e78ea76",
"SubnetId": "subnet-6d7kj98i",
"AsVpcGateway": "TRUE"
},
"ImageId": "img-0vbqvzfn",
"RenewFlag": "NOTIFY_AND_AUTO_RENEW",
"CreatedTime": "2016-12-02T00:22:40Z",
"ExpiredTime": "2017-01-02T00:22:48Z"
}
],
"RequestId": "6EF60BEC-0242-43AF-BB20-270359FB54A7"
}
}

单独跑sdk没有问题,集成进django项目出现TypeError: character mapping must return integer, None or unicode

D:\Python\Pyenv27\Scripts\python.exe D:/Workspace/framework/tests/tt.py
traceback.format_exc():
Traceback (most recent call last):
File "D:/Workspace/framework/tests/tt.py", line 70, in
qcloud_manage(account)
File "D:/Workspace/framework/tests/tt.py", line 49, in qcloud_manage
regions = get_regions(account)
File "D:/Workspace/framework/tests/tt.py", line 42, in get_regions
regions_res = json.loads(service.call('DescribeRegions', {'offset': 0, 'limit': 100, }))
File "D:\Workspace\framework\QcloudApi\qcloudapi.py", line 175, in call
return service.call(action, params)
File "D:\Workspace\framework\QcloudApi\modules\base.py", line 157, in call
self._build_req_inter(action, params, req_inter)
File "D:\Workspace\framework\QcloudApi\modules\base.py", line 134, in _build_req_inter
req_inter.method, self.sign_method)
File "D:\Workspace\framework\QcloudApi\common\sign.py", line 37, in make
hashed = hmac.new(self.secretKey, msg, digestmod)
File "D:\Python\Python27\Lib\hmac.py", line 136, in new
return HMAC(key, msg, digestmod)
File "D:\Python\Python27\Lib\hmac.py", line 75, in init
self.outer.update(key.translate(trans_5C))
TypeError: character mapping must return integer, None or unicode
Uploading image.png…


111

不被信任的证书

InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised

请求时有个证书警告。
requests==2.9.1

在windows下貌似有大小写的bug

Win10 Anaconda 4.5的环境

pip install qcloudapi-sdk-python

package安装在:$\Anaconda3\Lib\site-packages\qcloudapi 目录下,但是程序中的package name是大写的QcloudApi,譬如wenzhi.py的

from QcloudApi.modules import base

这样运行时就会报错:

  File "$\Anaconda3\lib\site-packages\qcloudapi\modules\wenzhi.py", line 15, in <module>
    from QcloudApi.modules import base
ImportError: No module named 'QcloudApi'

我的解决方法是手动把qcloudapi目录名改为了大写的QcloudApi,然后就正常了

Wenzhi module doesn't exist

`from QcloudApi.qcloudapi import QcloudApi

module = 'wenzhi.api.qcloud.com'
action = 'TextSentiment'

config = {
'Region': 'gz',
'secretId': 'abcd',
'secretKey': 'abcd',
'method': 'GET',
'SignatureMethod': 'HmacSHA256'
}

action_params = {
'content':'李亚鹏挺王菲:加油!孩儿他娘。',
}

try:
service = QcloudApi(module, config)
secretId = 'abcd'
service.setSecretId(secretId)
secretKey = 'abcd'
service.setSecretKey(secretKey)
region = 'gz'
service.setRegion(region)
method = 'GET'
service.setRequestMethod(method)
SignatureMethod = 'HmacSHA256'
service.setSignatureMethod(SignatureMethod)
print(service.generateUrl(action, action_params))
print(service.call(action, action_params))
except Exception as e:
import traceback
print('traceback.format_exc():\n%s' % traceback.format_exc())`

traceback.format_exc():
Traceback (most recent call last):
File "", line 48, in
print(service.generateUrl(action, action_params))
File "/usr/local/lib/python3.4/dist-packages/QcloudApi/qcloudapi.py", line 143, in generateUrl
service = self._factory(self.module, self.config)
File "/usr/local/lib/python3.4/dist-packages/QcloudApi/qcloudapi.py", line 123, in _factory
raise ValueError('module not exists')
ValueError: module not exists

签名计算问题

计算签名里面的一句中
srcStr = method.upper() + requestHost + requestUri + '?' + "&".join(k.replace("_",".") + "=" + str(list[k]) for k in sorted(list.keys()))

为什么要把"_" 替换成 "."?

emr module not exists

基于emr API https://cloud.tencent.com/document/product/589/10216 创建emr集群
API网关为emr.api.qcloud.com,但利用SDK执行
service = QcloudApi('emr', {'Region':'bj', 'secretId':'...', 'secretKey':'...'})
service.call('EmrCreateCluster', param)
提示ValueError: module not exists,请问python sdk能够支持emr 集群创建吗?

代码能规范下吗?

  1. 需要打包发布,不发布到 pip, 至少应该包含 setup.py 吧?
  2. 代码规范能稍微约束下吗?

感觉实在是很难使用啊,能找个懂点 python 的 人来重构下吗?或者至少可以借鉴下 aliyun sdk。

README.md 例子中的错误

>>> from QcloudApi.qcloudapi import QcloudApi
>>> module = 'cvm'
>>> action = 'DescribeInstances'
>>> config = {'Region':'ap-guangzhou', 'secretId':'xxxx', 'secretKey':'xxxx', 'Version':'2017-03-20'}
>>> params = {'Limit':1}
>>> service = QcloudApi(module, config)
>>> service.call(action, params)

这里Limit参数区分大小写的应该用limit吧?

qcloudapi-sdk-python

Django==1.11.1
djangorestframework==3.7.3
python27

django 引入 qcloudapi-sdk-python 报错。
Unhandled exception in thread started by <function wrapper at 0x030A2FB0>
Traceback (most recent call last):
File "D:\Python27\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
fn(*args, **kwargs)
File "D:\Python27\lib\site-packages\django\core\management\commands\runserver.py", line 125, in inner_run
self.check(display_num_errors=True)
File "D:\Python27\lib\site-packages\django\core\management\base.py", line 359, in check
include_deployment_checks=include_deployment_checks,
File "D:\Python27\lib\site-packages\django\core\management\base.py", line 346, in run_checks
return checks.run_checks(**kwargs)
File "D:\Python27\lib\site-packages\django\core\checks\registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "D:\Python27\lib\site-packages\django\core\checks\urls.py", line 16, in check_url_config
return check_resolver(resolver)
File "D:\Python27\lib\site-packages\django\core\checks\urls.py", line 26, in check_resolver
return check_method()
File "D:\Python27\lib\site-packages\django\urls\resolvers.py", line 254, in check
for pattern in self.url_patterns:
File "D:\Python27\lib\site-packages\django\utils\functional.py", line 35, in get
res = instance.dict[self.name] = self.func(instance)
File "D:\Python27\lib\site-packages\django\urls\resolvers.py", line 405, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "D:\Python27\lib\site-packages\django\utils\functional.py", line 35, in get
res = instance.dict[self.name] = self.func(instance)
File "D:\Python27\lib\site-packages\django\urls\resolvers.py", line 398, in urlconf_module
return import_module(self.urlconf_name)
File "D:\Python27\lib\importlib_init
.py", line 37, in import_module
import(name)
File "E:\yohoqcloud\yohoqcloud\urls.py", line 20, in
from qcloud.views import Userinfo
File "E:\yohoqcloud\qcloud\views.py", line 19, in
class obtainid(generics.ListAPIView):
File "E:\yohoqcloud\qcloud\views.py", line 28, in obtainid
value = service.call(action, params)
File "build\bdist.win32\egg\QcloudApi\qcloudapi.py", line 169, in call
File "build\bdist.win32\egg\QcloudApi\modules\base.py", line 157, in call
File "build\bdist.win32\egg\QcloudApi\modules\base.py", line 134, in _build_req_inter
File "build\bdist.win32\egg\QcloudApi\common\sign.py", line 37, in make
File "D:\Python27\lib\hmac.py", line 136, in new
return HMAC(key, msg, digestmod)
File "D:\Python27\lib\hmac.py", line 75, in init
self.outer.update(key.translate(trans_5C))
TypeError: character mapping must return integer, None or unicode

README.md 例子中的错误

例子

# 重新设置请求的SignatureMethod
SignatureMethod = 'HmacSHA256'
service.setRequestMethod(SignatureMethod)

这里的 setRequestMethod 应该为 setSignatureMethod 吧?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.