使用SDK
#!/usr/bin/python
# -*- coding:utf-8 -*-
#获取每天腾讯云的实例数量,以及每个实例的价格,以月为单位存储到数据库,生成柱状图以方便查看
from QcloudApi.qcloudapi import QcloudApi
import json
import gevent.monkey
gevent.monkey.patch_os()
import gevent
data={}
class clould_q():
def __init__(self):
pass
def config(self):
''' 设置基本参数 '''
module = 'cvm'
action = 'DescribeInstances'
config = {
'Region': 'gz',
'secretId': 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
'secretKey': 'xxxxxxxxxxxxxxxxxxxxxxxxx',
'method': 'post'
}
return config
def instance_number(self):
''' 获取实例数量 '''
module = 'cvm'
action = 'DescribeInstances'
params = {
'SignatureMethod':'HmacSHA256',
'limit':'1',
'offset':'0'
}
try:
service = QcloudApi(module, self.config())
service.generateUrl(action, params)
info = json.loads(service.call(action, params)) #把字符串转成json字符串
return int(info['totalCount'])
except Exception, e:
print 'error:', e
def instance_id(self):
''' 获取所有实例的id,api只支持最多一次100个实例的查询 '''
num = self.instance_number()
ids = []
for count in range(0,(num/100)+1): #需要重新设置参数,我们有105台实例,105/100 = 1 , 1+1=2 ,需要2次循环
module = 'cvm'
action = 'DescribeInstances'
params = {
'SignatureMethod':'HmacSHA256',
'limit':'100',
'offset':100*int(count) #设置偏移量
}
try:
service = QcloudApi(module, self.config())
service.generateUrl(action, params)
info = json.loads(service.call(action, params)) #把字符串转成json字符串,获取了所有信息
for i in range(0,len(info['instanceSet'])):
ids.append(info['instanceSet'][i]['unInstanceId']) #内部循环获取实例的unInstanceId
except Exception, e:
print 'error:', e
return ids
def money(self,id):
'''获取每个实例一个月的费用,只是实例本身,没包括存储和带宽之类的'''
module = 'cvm'
action = 'InquiryInstancePrice'
params = {
'SignatureMethod':'HmacSHA256',
'instanceId':id,
'instanceType':'1',
'period':'1'
}
try:
service = QcloudApi(module, self.config())
service.generateUrl(action, params)
info = json.loads(service.call(action, params)) #把字符串转成json字符串
d[id] = info['price']
except Exception, e:
print 'error:', e
gevent.sleep(1) #由于腾讯云的限制,我们切换协程的时间要稍微大点,以免腾讯云API无法访问
if __name__ == '__main__':
threads=[]
instance_id = clould_q().instance_id()
for id in instance_id:
threads.append(gevent.spawn(clould_q().money,id))
gevent.joinall(threads)
print data
最后的data就是我们的数据