Yahoo!から連絡先インポーターを開発しています。PythonとDJangoを使用して実行しているWebアプリにGMailを送信すると、Yahoo!で次の問題が発生します。
承認トークンとoauthベリファイアをリクエストすることはできますが、YahooのAPIに署名付きの呼び出しを行うことができるように、アクセストークンと交換しようとすると、次の応答が返されます。
'oauth_problem=timestamp_refused&oauth_acceptable_timestamps=1338401179-1338402379'
そして、これが私が生成したタイムスタンプです:
oauth_timestamp=1338401803
ご覧のとおり、私のタイムスタンプは、要求されている許容可能なタイムスタンプの範囲内にあります。
これが私が書いた関数で、アクセストークンを取得するためのAPI呼び出しを生成します。
def _yahoo_access_url(request, token, verifier):
plain_url = settings.YAHOO_GET_ACCESS_URL
signature = '&'.join((settings.YAHOO_SECRET + '%26', request.session['oauth_data']['oauth_token_secret']))
nonce_charset = string.ascii_lowercase + string.ascii_uppercase + string.digits
nonce = ''.join(random.sample(nonce_charset, 6))
parameters = {
'oauth_consumer_key': settings.YAHOO_KEY,
'oauth_signature_method': 'PLAINTEXT',
'oauth_version': '1.0',
'oauth_verifier': verifier,
'oauth_token': token,
'oauth_timestamp': int(time.time()),
'oauth_nonce': nonce,
'oauth_signature': signature,
}
return settings.YAHOO_GET_ACCESS_URL % urllib.urlencode(parameters)
それから、私は自分の問題を解決するためにいくつかの調査をしていました、そしてLinkedIn開発者フォーラムで、私が持っていたのと同じ問題を抱えている誰かを見つけました、彼らが彼に与えた答えは彼のサーバー時間が間違っていてそれが悪いタイムスタンプを生成していたということでした、私はYahoo! タイムスタンプを取得するWebサービスなので、関数を次のように変更しました。
def _yahoo_access_url(request, token, verifier):
plain_url = settings.YAHOO_GET_ACCESS_URL
signature = '&'.join((settings.YAHOO_SECRET + '%26', request.session['oauth_data']['oauth_token_secret']))
nonce_charset = string.ascii_lowercase + string.ascii_uppercase + string.digits
nonce = ''.join(random.sample(nonce_charset, 6))
timestamp = eval(urllib2.urlopen(settings.YAHOO_GET_TIME_URL, 'GET').read())
parameters = {
'oauth_consumer_key': settings.YAHOO_KEY,
'oauth_signature_method': 'PLAINTEXT',
'oauth_version': '1.0',
'oauth_verifier': verifier,
'oauth_token': token,
'oauth_timestamp': timestamp['Result']['Timestamp'],
'oauth_nonce': nonce,
'oauth_signature': signature,
}
return settings.YAHOO_GET_ACCESS_URL % urllib.urlencode(parameters)
このようにして、Yahoo!のサーバーから直接タイムスタンプを取得しますが、それでも同じ問題が発生します。
応答:'oauth_problem = timestamp_refused&oauth_acceptable_timestamps = 1338401958-1338403158'
タイムスタンプ:oauth_timestamp = 1338402557
それはまだ範囲内です。
私は何が間違っているのですか?私は何かが足りないのですか?、手がかりやアドバイスは大歓迎です、
前もって感謝します