Evernote - Токен доступа OAuth - Python - PullRequest
0 голосов
/ 02 сентября 2018

Я изучаю документацию Evernote OAuth . Не удалось получить временный токен. Это было решено после получения помощи здесь . Теперь поражен на последнем шаге этого потока при получении токена доступа. Не могли бы вы, кто-нибудь, дайте мне знать, что может быть потенциальной проблемой здесь?

Это похоже на приведенный ниже первый для получения токена доступа. Не уверен, что мне что-то не хватает.

import time
import base64
import random
import uuid
import urllib
import collections
import urllib.parse
import hmac
import hashlib
import binascii
import requests

def escape(s):
    return urllib.parse.quote(s, safe='~')
def get_nonce():
    return uuid.uuid4().hex

def stringify_parameters(parameters):
    output = ''
    ordered_parameters = {}
    ordered_parameters =collections.OrderedDict(sorted(parameters.items()))

    counter = 1
    for k, v in ordered_parameters.items():
        output += escape(str(k)) + '=' + escape(str(v))
        if counter < len(ordered_parameters):
            output += '&'
            counter += 1

    return output

oauth_parameters={
'oauth_timestamp': str(int(time.time())),
'oauth_signature_method': "HMAC-SHA1",
'oauth_version': "1.0",
'oauth_nonce': get_nonce(),
'oauth_consumer_key': 'xxxxx',
'oauth_callback':'http://localhost'
 }

string_parameters=stringify_parameters(oauth_parameters)
secret='3************f'

### below portion of the code will return temp_token
key = (escape(secret)+'&').encode()
message = ('GET&' + escape('https://sandbox.evernote.com/oauth') + '&' + escape(string_parameters)).encode()
signature = hmac.new(key, message, hashlib.sha1).digest()
oauth_parameters['oauth_signature'] = base64.b64encode(signature).decode()

print(stringify_parameters(oauth_parameters))

res = requests.get('https://sandbox.evernote.com/oauth?' + stringify_parameters(oauth_parameters))
print(res.text)
####

##login to the url below based on the temp_token from above
##https://sandbox.evernote.com/OAuth.action?oauth_token=xxxxx.1652F9812D6.687474703A2F2F6C6F63616C686F7374.3A695C3760E6EFB92B3AB6033222E9D7

## after successful authorization from user, page is redirected along with 'oauth_verifier' value
##http://localhost/?oauth_token=xxxxx.1652F9812D6.687474703A2F2F6C6F63616C686F7374.3A695C3760E6EFB92B3AB6033222E9D7&oauth_verifier=1808C99D6868D17A89871E9290B334D6&sandbox_lnb=false

###error part - below doesn't work while retrieving the access token.

oauth_parameters={
'oauth_consumer_key': 'xxxxx',
'oauth_token': 'xxxxx.1652F9812D6.687474703A2F2F6C6F63616C686F7374.3A695C3760E6EFB92B3AB6033222E9D7',
'oauth_verifier':'1808C99D6868D17A89871E9290B334D6',
'oauth_nonce': get_nonce(),
'oauth_signature_method':'HMAC-SHA1',
'oauth_timestamp': str(int(time.time())),
'oauth_version': '1.0'
}

string_parameters=stringify_parameters(oauth_parameters)

key = (escape(secret)+'&').encode()
message = ('GET&' + escape('https://sandbox.evernote.com/oauth') + '&' + escape(string_parameters)).encode()
signature = hmac.new(key, message, hashlib.sha1).digest()

oauth_parameters['oauth_signature'] = 
base64.b64encode(signature).decode()

res = requests.get('https://sandbox.evernote.com/oauth?' + 
stringify_parameters(oauth_parameters))
print(res.text)

1 Ответ

0 голосов
/ 03 сентября 2018

Единственное, о чем я могу думать, не зная, что это за сообщение об ошибке (если оно есть), - правильно ли скопирован oauth_verifier. Все остальное выглядит так, как будто должно работать нормально.

...