· 7 years ago · Sep 02, 2018, 03:24 AM
1import time
2import base64
3import random
4import uuid
5import urllib
6import collections
7import urllib.parse
8import hmac
9import hashlib
10import binascii
11import requests
12
13def escape(s):
14 return urllib.parse.quote(s, safe='~')
15def get_nonce():
16 return uuid.uuid4().hex
17
18def stringify_parameters(parameters):
19 output = ''
20 ordered_parameters = {}
21 ordered_parameters =collections.OrderedDict(sorted(parameters.items()))
22
23 counter = 1
24 for k, v in ordered_parameters.items():
25 output += escape(str(k)) + '=' + escape(str(v))
26 if counter < len(ordered_parameters):
27 output += '&'
28 counter += 1
29
30 return output
31
32oauth_parameters={
33'oauth_timestamp': str(int(time.time())),
34'oauth_signature_method': "HMAC-SHA1",
35'oauth_version': "1.0",
36'oauth_nonce': get_nonce(),
37'oauth_consumer_key': 'xxxxx',
38'oauth_callback':'http://localhost'
39 }
40
41string_parameters=stringify_parameters(oauth_parameters)
42secret='3************f'
43
44### below portion of the code will return temp_token
45key = (escape(secret)+'&').encode()
46message = ('GET&' + escape('https://sandbox.evernote.com/oauth') + '&' + escape(string_parameters)).encode()
47signature = hmac.new(key, message, hashlib.sha1).digest()
48oauth_parameters['oauth_signature'] = base64.b64encode(signature).decode()
49
50print(stringify_parameters(oauth_parameters))
51
52res = requests.get('https://sandbox.evernote.com/oauth?' + stringify_parameters(oauth_parameters))
53print(res.text)
54####
55
56##login to the url below based on the temp_token from above
57##https://sandbox.evernote.com/OAuth.action?oauth_token=xxxxx.1652F9812D6.687474703A2F2F6C6F63616C686F7374.3A695C3760E6EFB92B3AB6033222E9D7
58
59## after successful authorization from user, page is redirected along with 'oauth_verifier' value
60##http://localhost/?oauth_token=xxxxx.1652F9812D6.687474703A2F2F6C6F63616C686F7374.3A695C3760E6EFB92B3AB6033222E9D7&oauth_verifier=1808C99D6868D17A89871E9290B334D6&sandbox_lnb=false
61
62###error part - below doesn't work while retrieving the access token.
63
64oauth_parameters={
65'oauth_consumer_key': 'xxxxx',
66'oauth_token': 'xxxxx.1652F9812D6.687474703A2F2F6C6F63616C686F7374.3A695C3760E6EFB92B3AB6033222E9D7',
67'oauth_verifier':'1808C99D6868D17A89871E9290B334D6',
68'oauth_nonce': get_nonce(),
69'oauth_signature_method':'HMAC-SHA1',
70'oauth_timestamp': str(int(time.time())),
71'oauth_version': '1.0'
72}
73
74string_parameters=stringify_parameters(oauth_parameters)
75
76key = (escape(secret)+'&').encode()
77message = ('GET&' + escape('https://sandbox.evernote.com/oauth') + '&' + escape(string_parameters)).encode()
78signature = hmac.new(key, message, hashlib.sha1).digest()
79
80oauth_parameters['oauth_signature'] =
81base64.b64encode(signature).decode()
82
83res = requests.get('https://sandbox.evernote.com/oauth?' +
84stringify_parameters(oauth_parameters))
85print(res.text)