RDB Cloudn API

NTT.comのクラウド、Cloudn のRDBpythonAPIアクセスするときの覚えがきです。

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