X-Git-Url: https://jfr.im/git/z_archive/twitter.git/blobdiff_plain/9376cfa693173f3dea378c32c1d24668eece59ca..8df7be82b941c4b1c83bbfe9ed06a4026f3c08e2:/twitter/oauth.py diff --git a/twitter/oauth.py b/twitter/oauth.py index e9c790f..d2df7c1 100644 --- a/twitter/oauth.py +++ b/twitter/oauth.py @@ -1,13 +1,25 @@ +from __future__ import print_function + from twitter.auth import Auth from time import time from random import getrandbits -from time import time -import urllib.request, urllib.parse, urllib.error + +try: + import urllib.parse as urllib_parse + from urllib.parse import urlencode + PY3 = True +except ImportError: + import urllib2 as urllib_parse + from urllib import urlencode + PY3 = False + import hashlib import hmac import base64 + + def write_token_file(filename, oauth_token, oauth_token_secret): """ Write a token file to hold the oauth token and oauth token secret. @@ -54,15 +66,15 @@ class OAuth(Auth): enc_params = urlencode_noplus(sorted(params.items())) - key = self.consumer_secret + "&" + urllib.parse.quote(self.token_secret, '') + key = self.consumer_secret + "&" + urllib_parse.quote(self.token_secret, '') message = '&'.join( - urllib.parse.quote(i, '') for i in [method.upper(), base_url, enc_params]) + urllib_parse.quote(i, '') for i in [method.upper(), base_url, enc_params]) signature = (base64.b64encode(hmac.new( key.encode('ascii'), message.encode('ascii'), hashlib.sha1) .digest())) - return enc_params + "&" + "oauth_signature=" + urllib.parse.quote(signature, '') + return enc_params + "&" + "oauth_signature=" + urllib_parse.quote(signature, '') def generate_headers(self): return {} @@ -72,20 +84,11 @@ class OAuth(Auth): # also in the request itself.) # So here is a specialized version which does exactly that. def urlencode_noplus(query): - if hasattr(query,"items"): - # mapping objects - query = list(query.items()) - - encoded_bits = [] - for n, v in query: - # and do unicode here while we are at it... - if isinstance(n, str): - n = n.encode('utf-8') - else: - n = str(n) - if isinstance(v, str): - v = v.encode('utf-8') - else: - v = str(v) - encoded_bits.append("%s=%s" % (urllib.parse.quote(n, ""), urllib.parse.quote(v, ""))) - return "&".join(encoded_bits) + if not PY3: + new_query = [] + for k,v in query: + if type(k) is unicode: k = k.encode('utf-8') + if type(v) is unicode: v = v.encode('utf-8') + new_query.append((k, v)) + query = new_query + return urlencode(query).replace("+", "%20")