RDB Cloudn API
NTT.comのクラウド、Cloudn のRDB にpython でAPIアクセスするときの覚えがきです。
URLベースでいくので大体以下のようなコードで大丈夫
endpoint=<RDBのエンドポイント> akey=<アクセスキー> skey=<ひみつキー> sigbase ="""GET rdb-api.jp-e1.cloudn-service.com / %s""" import hmac import hashlib from base64 import b64encode, urlsafe_b64encode from datetime import datetime, timedelta from urllib import quote_plus, urlopen from time import sleep from sys import argv, exit def createURL(params): timeback = timedelta(0, 9*3600+1) # JST to GMT baseparam = dict(AWSAccessKeyId=akey, SignatureMethod = 'HmacSHA256', SignatureVersion = '2', Version = '2012-04-23', ) baseparam.update(params) signature, signatureS = 1, 2 while signature != signatureS: if signature != 1: sleep(1) timeStamp = (datetime.now()-timeback).isoformat().split('.')[0] baseparam.update(dict(Timestamp = timeStamp)) data = '%s'%('&'.join(['%s=%s'%(x, quote_plus(baseparam[x])) for x in sorted (baseparam.keys())])) sigdata = sigbase%data sigbin = hmac.new(skey, sigdata, hashlib.sha256).digest() signature = b64encode(sigbin) signatureS = urlsafe_b64encode(sigbin) uri = '%s&Signature=%s'%(data, signatureS) url = '%s/?%s'%(endpoint, uri) print "!!!!You will perform followings!!!!" for k,v in params.iteritems(): print "Param:",k, "\nValue:", v, "\n" ans = '' while (not (ans in ['y', 'n'])): ans = raw_input("\nDo you perform this request? (y/n)") if ans == 'n': exit(0) response = urlopen(url) html = response.read() return html