OAuth署名生成 python実装サンプル
OAuth署名生成 python実装サンプル
OAuth署名生成のpythonによる実装サンプルを以下に示します。
# -*- coding: utf-8 -*- # ### OAuth HMAC-SHA1方式の署名を作成する. # make_signature_hmac(http_method, parameter, uri, secret) # @param string http_method HTTPメソッドを指定 # @param dict parameter クエリパラメータとOAuthパラメータをマージしたもの # @param string uri 実際にリクエストするURI(リクエストパラメータは含めない) # @param string secret 秘密鍵 # ### oauthパラメータ一覧 # oauth_consumer_key ZDCから発行されたクライアントIDを設定します # oauth_signature_method” HMAC-SHA1” 固定 # oauth_signature リクエストURIより生成したOAuth署名 # oauth_timestamp 現在時刻のUNIXタイムスタンプを設定してください # oauth_nonce リクエスト毎に一意なランダム値を設定してください # oauth_version ”1.0” 固定 import time import urlparse import urllib import hmac import hashlib # 動作確認用 http_method = 'get' parameter = { 'if_clientid' :キー, 'if_auth_type' :'oauth', 'word' :任意の検索語句 'oauth_consumer_key' :キー, 'oauth_signature_method':'HMAC-SHA1', 'oauth_timestamp' :int(time.time()), 'oauth_nonce' :任意の文字列, 'oauth_version' :'1.0', 'oauth_signature' :'' } uri = 'http://core.its-mo.com/zmaps/api/apicore/core/v1_0/address/word' secret = '' # キーに紐づく秘密鍵 def make_signature_hmac(http_method, parameter, uri, secret): # http_method http_method = http_method.upper() # print('\n' + '***http_method***' + '\n' +http_method) # params if 'oauth_signature' in parameter: del parameter['oauth_signature'] params = urllib.urlencode(sorted(parameter.items(),key=lambda x:x[0])) # print('\n' + '***params***' + '\n' +params) # uri parts = urlparse.urlparse(uri) scheme = parts.scheme if parts.scheme else 'http' port = '443' if scheme == 'https' else '80' host = parts.netloc path = parts.path uri = scheme + '://' + host + path # print('\n' + '***uri***' + '\n' +uri) # secret secret += '&' # print('\n' + '***secretKey***' + '\n' + secret) # base_string base_string = http_method + '&' + urllib.quote(uri,'') + '&' + urllib.quote(params,'') # print('\n' + '***basestring***' + '\n' + base_string) # oauth_signature signature = (hmac.new(secret,base_string,hashlib.sha1).digest()).encode('base64') parameter['oauth_signature'] = signature.strip() # print('\n' + '***oauth_signature***' + '\n' + parameter['oauth_signature']) # 動作確認 make_signature_hmac(http_method, parameter, uri, secret) url = uri + '?' + urllib.urlencode(parameter) print('\n' + '***URL***' + '\n' + url) result = None try : result = urllib.urlopen( url ).read() print '\n' + result except ValueError : print "アクセスに失敗しました。" except IOError : print "認証に失敗しました。"