oath v1.0a์์ oath์ธ์ฆ๊ณผ ๊ด๋ จํด์ request token ๊ณผ ์ฌ์ฉ์๋ก๋ถํฐ ๋ฆฌ์์ค ์ฌ์ฉํ๋ฝ์ ๊ดํ verifier์ ๋ชจ๋ ํ๋ ํ์์ผ๋ ๋จ์ ์ผ์ request token ๊ณผ verifier์ ๊ฐ์ง๊ณ ์ค์ง์ ์ผ๋ก ๋ฆฌ์์ค์ ์ ๊ทผ์ ํ ์ ์๋ access token์ ์ป์ด ์ค๋ ์ผ๋ง ๋จ์๋ค. ์ด access token์ ์ฌ์ฉ์์ ๋ฆฌ์์ค์ ์ ๊ทผ์์ ํ์ํ ์ฝ๋์ด๋ ๋ณ๋๋ก ์ ์ฅํด์ผ ํ๋ฉฐ ๋ํ ํ๋์ ํ์๋ค๊ณ ํด๋ ์ผ์ ์ฃผ๊ธฐ๋ก ์ญ์ ๊ฐ ๋์ด๋ฒ๋ฆฐ ์ฌ์ฉ์ ์ ์ ํจํ token์ธ์ง ํ์ธํด์ผ ํ๋ค.
def timestamp(): return int(time.time()) def _generate_nonce(): random_number = ''.join(str(random.randint(0,9)) for i in range(40)) m = md5.new(str(time.time())+ str(random_number)) return m.hexdigest() def _rfc3986(param): return urllib.quote(param, safe="~") def queryStringtoRfc3986(params, sep="&"): convertedString = '' for param in params: param = param.split('=') convertedString += _rfc3986(param[0])+'='+_rfc3986(param[1])+sep return convertedString[0:len(convertedString)-1] def stringToRfc3986(params): convertedString = '' for param in params: convertedString += _rfc3986(param)+'&' return convertedString[0:len(convertedString)-1] def genSignature(baseString,key): return base64.b64encode(hmac.new(key,baseString,sha).digest()) def genAuthHeader(nonce, signature, timestamp): queryList = [] queryList.append("oauth_version="+version) queryList.append('oauth_nonce='+nonce) queryList.append('oauth_timestamp='+timestamp) queryList.append('oauth_consumer_key='+consumer_key) queryList.append('oauth_signature_method='+signatureMethod) return queryStringtoRfc3986(queryList,sep=",") def getAccessToken(req_token,verifier,req_token_secret): oauth_nonce = _generate_nonce() time = str(timestamp()) queryList = [] queryList.append('oauth_consumer_key='+consumer_key) queryList.append('oauth_nonce='+oauth_nonce) queryList.append('oauth_signature_method='+signatureMethod) queryList.append('oauth_timestamp='+time) queryList.append('oauth_token='+req_token.split('=')[1]) queryList.append('oauth_verifier='+verifier) queryList.append('oauth_version='+version) queryStr_rfc3986 = queryStringtoRfc3986(queryList) queryList[:] = [] queryList.append('POST') queryList.append(accessTokenUrl) queryList.append(queryStr_rfc3986) baseString = stringToRfc3986(queryList) queryList[:] = [] queryList.append(consumer_secret) queryList.append(req_token_secret.split('=')[1]) keyForSigning = stringToRfc3986(queryList) signature = genSignature(baseString,keyForSigning) authHeader = 'OAuth '+genAuthHeader(oauth_nonce,signature, time)+',oauth_signature='+_rfc3986(signature)+',oauth_verifier='+_rfc3986(verifier)+','+req_token httplib2.debuglevel=4 h = httplib2.Http() resp, content = h.request(accessTokenUrl,"POST",headers={"Authorization":authHeader, "Content-Type":"application/x-www-form-urlencoded"}) return content