python封装 阿里云api

最近用到阿里云的API和SDK ,用python封装了一下基础类,我只是用查询一下接口的信息,别的没有测试过,可以看看

内容如下:

#-*- coding: utf-8 -*-
# author: sunwei

import json
import uuid
from urllib import request
import hmac,base64
from hashlib import sha1
from datetime import datetime, timedelta, timezone,date
from urllib.parse import urlencode,quote
from abc import ABCMeta,abstractclassmethod

class BaseSignature(object):
    __metaclass__ = ABCMeta

def __init__(self,Access_Key_Id,Access_key_secret,Format='JSON'):

self.AccessKeyId = str(Access_Key_Id)
        self.AccessKeySecret = str(Access_key_secret)
        self.SignatureMethod = 'HMAC-SHA1'
        self.SignatureVersion = '1.0'
        self.SignatureNonce = str(uuid.uuid4())
        self.Format = Format
        self.Action = ''
        self.Version = ''

def params(self):
           self.D = {}
           self.D['Action'] = self.Action
           self.D.update(self.kv)
           self.kv.clear()
           self.D['SignatureMethod'] = self.SignatureMethod
           self.D['AccessKeyId'] = self.AccessKeyId
           self.D['SignatureVersion'] = self.SignatureVersion
           self.D['SignatureNonce'] = self.SignatureNonce
           self.D['Timestamp'] = self._UtcTimeStamp()
           self.D['Version'] = self.Version
           self.D['Format'] = self.Format

def _ToSign(self):

sortedD = sorted(self.D.items(), key=lambda x: x[0])
        canstring = ''
        for k, v in sortedD:
            #print(k,v)
            canstring += '&' + self.percentEncode(k) + '=' + self.percentEncode(v)
        stringToSign = 'GET&%2F&' + self.percentEncode(canstring[1:])
        return stringToSign.encode('utf-8')

def Signature(self):
        key = (self.AccessKeySecret + '&').encode('utf-8')
        v = self._ToSign()
        h = hmac.new(key , v, sha1)
        return  base64.encodebytes(h.digest()).strip().decode('utf-8')

def percentEncode(self,s):

res = quote(s,'')
        res = res.replace('+', '%20')
        res = res.replace('*', '%2A')
        res = res.replace('%7E', '~')
        return res

def _UtcTimeStamp(self):
        return (datetime.now() - timedelta(hours=8)).strftime('%Y-%m-%dT%XZ')

def urlencode(self):

self.params()
        self.D['Signature'] = self.Signature()
        print(self.D)
        return urlencode(self.D)

@abstractclassmethod
    def url(self): pass

class BaseApi(BaseSignature):

Version = ''
    Baseurl = ''

def __init__(self, Access_Key_Id, Access_key_secret,Format='JSON'):
        super(BaseApi,self).__init__(Access_Key_Id, Access_key_secret, Format)

def url(self,**kwargs):
        kv = kwargs
        self.Action = kv.pop('Action')
        self.kv = kv
        self.Version = self.__class__.__dict__.get('Version','')

return self.Baseurl + self.urlencode()

from urllib.error import URLError,HTTPError
class DecodeData(object):

def __call__(self,url):
        try:
            response = request.urlopen(request.Request(url)).read()
            #de = response.decode('utf-8')
            de = json.loads(response)
            ddd = json.dumps(de,indent=4)
        except HTTPError as e:

ddd = {'Data': e.msg}
        print(ddd)
        return ddd

class RegionApi(BaseApi):
    Version = '2014-05-26'
    Baseurl = "https://ecs.aliyuncs.com/?"

class DomainApi(BaseApi):
    """
    Usage :

r = BaseApi(accesskeys,accesskeys_secrey)
    r.url(Action='QueryDomainList',PageNum = '1',PageSize = '20')

"""

Version = '2018-01-29'
    Baseurl = 'https://domain.aliyuncs.com/?'

class RdsApi(BaseApi):
    Baseurl = 'https://rds.aliyuncs.com/?'
    Version = '2014-08-15'

class SlbApi(BaseApi):
    Baseurl = 'https://slb.aliyuncs.com/?'
    Version = '2014-05-15'

class VpcApi(BaseApi):
    Baseurl = 'https://vpc.aliyuncs.com/?'
    Version = '2016-04-28'

原文地址:http://blog.51cto.com/5766902/2131322

时间: 2024-08-03 18:58:39

python封装 阿里云api的相关文章

Python 调用阿里云 API 收集 ECS 数据

#!/usr/bin/env python # coding: utf-8 # author: Wang XiaoQiang ''' 功能介绍: 1.调用阿里云API,收集所有区域 ECS 信息 2.将需要的数据整理.生成 Excel 文档 3.关于阿里 sdk 的安装,api 的调用请参考阿里云官网 4.xlsxwriter 请参考这里:http://xlsxwriter.readthedocs.org/ ''' import json, sys try: from termcolor imp

阿里云api调用做简单的cmdb

阿里云api调用做简单的cmdb 1 步骤 事实上就是调用阿里api.获取可用区,比方cn-hangzhou啊等等.然后在每一个区调用api 取ecs的状态信息,最好写到一个excel里面去.方便排序排版. 2 示意图 3 源代码 https://github.com/gqdw/cmdb/tree/master

Python使用阿里云OSS服务

Python使用阿里云OSS服务 前言: 在远程搭建了一个平台,通过改远程平台进行数据的采集,需要将数据内容传送至本地进行处理:为了实现该功能,考虑了阿里云的OSS对象储存的服务. 40G包月只需1元:-) 甚至还有客服致电给你,说有问题可直接通过电话联系对方,15星好评 OSS安装 关于账号注册,开通服务等等功能直接去阿里云的官方进行相应操作即可 安装python-devel win:此过程不需要,在安装Python时已经包含了: Debian/Ubuntu:apt-get install p

python使用阿里云oss-sdk

python使用阿里云oss-python-sdk 请访问github获取源码 安装 pip install oss2 安装验证 >>> import oss2 >>> oss2.__version__ ''2.8.0'' 上面的输出表明您已经成功安装了Python SDK 2.8.0. 创建存储空间 import oss2 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>'

浅析阿里云API网关的产品架构和常见应用场景

自上世纪60年代计算机网络发展开始,API(Application Programming Interface )随之诞生,API即应用程序接口,是实现系统间衔接的桥梁.时至今日,API市场已经形成了一个庞大的生态体系,在拥抱API经济的过程当中,API网关这一个组件起到了至关重要的作用. 什么是API网关 API 网关提供完整的 API 托管服务,辅助用户将能力.服务.数据以 API 的形式开放给合作伙伴,也可以发布到 API 市场供更多的开发者采购使用. 1.提供防攻击.防重放.请求加密.身

调用阿里云api获取阿里云数据同步服务(DTS)并且作图发送邮件的整个流程

前言 在https://rorschachchan.github.io/2018/02/24/阿里云获取DTS服务延迟的脚本/ 文章里已经写过,领导现在要求"每天查看阿里云dts同步的延迟情况和同步速率情况",并且在https://rorschachchan.github.io/2018/02/27/使用matplotlib画图的一个脚本/ 里面也放了一个使用python matplotlib画图的demo,这篇文章的目的就是把整个过程实现,并且把dts图形以每日邮件的形式发送给领导的

Java和Python对阿里云OCS的读写联调情况

目前项目用到了阿里云的OCS服务,芳姐用的OCS之Java客户端,另外一个团队用的是OCS的python客户端,因为开发语言不同,OCS的客户端对不同语言的兼容性还不太好,为此我们进行了多次协商,让我们能够互相读写OCS中的数据,过程如下: 1.  Java将JavaBean对象序列化后写入OCS的数据,Java读写没有问题,而且效率很高,但Python不能读.因此这个方案废除. 2.  JAVA将JavaBean对象用toString()转换成key=value数据对的字符串写入OCS,发现当

python3.6 通过调用 阿里云 API (非SDK方式) 查询 可用区 例子

#!/usr/bin/env python3.5 # -*- coding:utf8 -*- try: import httplib except ImportError: import http.client as httplib import sys, datetime import urllib import urllib.request import urllib.error import urllib.parse import time import json import base6

阿里云api调用

# coding: utf-8"""This module be able to manage ecs instances on the aliyun cloud. We choosesome helper functions from salt.cloud.clouds.aliyun since DRY principle.Full documentations about the Aliyun APIs are located at"https://help.a