我已经成功地遵循了rauth OAuth1示例来获取访问令牌,并因此从fatsecret API检索数据。我将access_token和access_token_secret存储在搁置数据库中。我的问题是,当我以后尝试使用存储的令牌检索更多数据时,我收到了一个“无效签名”错误。在
以下是获取令牌并检索exercise_entries.get
方法的原始脚本:
from rauth.service import OAuth1Service
import shelve
api_url = 'http://platform.fatsecret.com/rest/server.api'
shelf = shelve.open('token_shelf.db')
fatsecret = OAuth1Service(
consumer_key = 'xxxxxxxxxxxxx',
consumer_secret = 'xxxxxxxxxxxxx',
name = 'fatsecret',
request_token_url = 'http://www.fatsecret.com/oauth/request_token',
access_token_url = 'http://www.fatsecret.com/oauth/access_token',
authorize_url = 'http://www.fatsecret.com/oauth/authorize')
request_token, request_token_secret = fatsecret.get_request_token(
method = 'GET',
params = {'oauth_callback':'oob'})
authorize_url = fatsecret.get_authorize_url(request_token)
print 'Visit this URL in your browser: ' + authorize_url
pin = raw_input('Enter PIN from browser: ')
shelf['fatsecret_request_token'] = request_token
shelf['fatsecret_request_token_secret'] = request_token_secret
shelf['fatsecret_pin'] = pin
session = fatsecret.get_auth_session(
request_token,
request_token_secret,
params={'oauth_verifier': pin}
)
shelf['fatsecret_access_token'] = session.access_token
shelf['fatsecret_access_token_secret'] = session.access_token_secret
my_params = {'method': 'exercise_entries.get', 'format': 'json'}
r = session.get(api_url, params=my_params)
print r.json()
print r.content
shelf.close()
然后,我试图恢复我的access_token和access_token_secret,并打开一个新的会话,但我被告知我有一个无效的签名。在
^{pr2}$这将返回r.content
为:
{ "error": {"code": 8, "message": "Invalid signature: oauth_signature 'ccZpSYAPSn+umkTxcAVH7EChVvw='" }}
并且r.url
是:
http://platform.fatsecret.com/rest/server.api?oauth_nonce=604416f368159818e3ad8252a0da323be16319a3&format=json&oauth_consumer_key=xxxxxxxxxxxxx&oauth_timestamp=1390015877&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=xxxxxxxxxxxxx&oauth_signature=l4Ricqpbbwl%2BHPS2ItLLnvXQo%2FA%3D&method=exercise_entries.get
唯一吸引我注意的是r.url参数似乎没有按字母顺序排序,但我不知道这是否准确地反映了发送到fatsecret的内容,而且无论如何,它在第一个脚本中运行得很好。在
我尝试过类似的using OAuth1Session而不是OAuth1Service
,但是我得到的结果完全相同。在
如果能帮上忙我会很感激的。在
我检查了无数次这个代码,没有发现任何错误。在为调试添加额外的打印时,我注意到我在重用会话的第6行检索了两次access_token。毕竟这只是个打字错误。在
更改:
收件人:
^{pr2}$所以上面的代码实际上是用python验证fatsecretapi的一个很好的演示。在
相关问题 更多 >
编程相关推荐