7

Oauthは初めてです。以前、Pythonで記述されたTwitterアプリケーションの場合、次のようにpython-oauth2ライブラリを使用してクライアントを初期化しました。

consumer = oauth.Consumer(key = CONSUMER_KEY, secret = CONSUMER_SECRET)
token = oauth.Token(key = ACCESS_KEY, secret = ACCESS_SECRET)
client = oauth.Client(consumer, token)

twitterはCONSUMERキーとACCESSキーとシークレットの両方を提供するため、これは簡単でした。しかし今、私はtumblrについても同じことをする必要があります。問題は、tumblrがCONSUMER_KEY、CONSUMER_SECRET、およびこれらのURLのみを提供することです。

Request-token URL   http://www.tumblr.com/oauth/request_token
Authorize URL       http://www.tumblr.com/oauth/authorize
Access-token URL    http://www.tumblr.com/oauth/access_token

このデータを使用して、クライアントを初期化してtumblr APIにアクセスするにはどうすればよいですか?

UPD

jterraceは、以前に使用しようとしたコードを提案しました。それに関する問題はoauth_callbackです。何も指定しない場合、APIは「oauth_callbackが指定されていません」というエラーを返しますが、「http://example.com/oauthcb/」のようなURLを指定して、リンクhttp://www.tumblr.comをたどります。 / oauth / authorize?oauth_token = 9ygTF ...次に、[許可]ボタンを押すと、tumblrはPINコードページを表示せず、すぐにそのコールバックURLにリダイレクトします。これはデスクトップアプリケーションであるため役に立ちません。PINコードが表示されないのはなぜですか?

UPD 2

TumblrAPIはPINコード認証をサポートしていません。代わりにxAuthを使用してください-https ://groups.google.com/group/tumblr-api/browse_thread/thread/857285e6a2b4268/15060607dc306c1d?lnk=gst&q=pin# 15060607dc306c1d

4

6 に答える 6

11

まず、oauth2モジュールをインポートし、サービスのURLとコンシューマー情報を設定します。

import oauth2

REQUEST_TOKEN_URL = 'http://www.tumblr.com/oauth/request_token'
AUTHORIZATION_URL = 'http://www.tumblr.com/oauth/authorize'
ACCESS_TOKEN_URL = 'http://www.tumblr.com/oauth/access_token'
CONSUMER_KEY = 'your_consumer_key'
CONSUMER_SECRET = 'your_consumer_secret'

consumer = oauth2.Consumer(CONSUMER_KEY, CONSUMER_SECRET)
client = oauth2.Client(consumer)

ステップ1:リクエストトークンを取得します。これは、ユーザーにアクセストークンを承認させ、そのアクセストークンを取得するためのリクエストに署名するために使用される一時的なトークンです。

resp, content = client.request(REQUEST_TOKEN_URL, "GET")

request_token = dict(urlparse.parse_qsl(content))
print "Request Token:"
print "    - oauth_token        = %s" % request_token['oauth_token']
print "    - oauth_token_secret = %s" % request_token['oauth_token_secret']

ステップ2:プロバイダーにリダイレクトします。これはCLIスクリプトであるため、リダイレクトしません。Webアプリケーションでは、ユーザーを以下のURLにリダイレクトします。

print "Go to the following link in your browser:"
print "%s?oauth_token=%s" % (AUTHORIZATION_URL, request_token['oauth_token'])

# After the user has granted access to you, the consumer, the provider will
# redirect you to whatever URL you have told them to redirect to. You can 
# usually define this in the oauth_callback argument as well.
oauth_verifier = raw_input('What is the PIN? ')

ステップ3:コンシューマーがユーザーをoauth_callback URLにリダイレクトしたら、ユーザーが承認したアクセストークンをリクエストできます。リクエストトークンを使用して、このリクエストに署名します。これが完了したら、リクエストトークンを破棄し、返されたアクセストークンを使用します。このアクセストークンは、将来使用するために、データベースなどの安全な場所に保存する必要があります。

token = oauth2.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
token.set_verifier(oauth_verifier)
client = oauth2.Client(consumer, token)

resp, content = client.request(ACCESS_TOKEN_URL, "POST")
access_token = dict(urlparse.parse_qsl(content))

print "Access Token:"
print "    - oauth_token        = %s" % access_token['oauth_token']
print "    - oauth_token_secret = %s" % access_token['oauth_token_secret']
print

アクセストークンを取得したので、それを使用して保護されたメソッドを呼び出すことができます。

編集: tumblrはPIN認証方法をサポートしていないことが判明しました。ここに関連する投稿。

于 2011-09-27T15:30:11.620 に答える
6

署名するためのアクセストークン/シークレットを取得したいだけの場合は、コールバックURLを次のように設定できます:http:// localhost / blah

  • CLIアプリを起動します(コールバックURL、シークレット、トークンを変更した後)
  • ブラウザのリンクをたどる
  • アプリを許可する
  • アプリを許可した後、リダイレクトされたページのアドレスバーをブラウザーに表示します。次のようになります。

http:// localhost / blah?oauth_token = xxxxxxxxxxxxxxxxxxxxxxxxxx0123456789ABCDEFGHIJKLMN&oauth_verifier = XXXXXXXXXXXXXXXXXXXXXXXXX0123456789abcdefghijklmn

クエリパラメータ「oauth_verifier」の値をPINとして使用します:XXXXXXXXXXXXXXXXXXXXXXXXX0123456789abcdefghijklmn

CLIは、oauth-tokenとoauth-token-secretを出力する必要があります。

HTH!このようにtumblrでこれが機能するようになりました:)

于 2011-10-30T15:38:32.080 に答える
0

https://github.com/ToQoz/Pyblrをご覧ください

oauth2とurllibを使用して、実行しようとしていることを正確に実行するための優れたラッパーを提供します。

于 2011-09-27T12:46:46.010 に答える
0

あなたがやろうとしているのは、OAuth2クライアントでOAuth1APIにアクセスすることのようです。

https://github.com/simplegeo/python-oauth2を参照して、「3本足のOAuthの例」を探してください。

于 2011-09-27T14:33:10.730 に答える
0

oauth2とfacebookでこの問題が発生しました。@deepvanbinnenの答えは私を正しい方向に導きます。

Facebookは実際にこれに似たページにリダイレクトされました

'http:// localhost / blah?code = AQAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#_ = _'

次に、'AQAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#_ = _を使用して、PINが実際に要求されたFacebookアカウントへのアクセスを取得しました。

于 2012-04-12T15:18:00.370 に答える
0

@jterranceの答えは良いです。ただし、アクセストークンを取得するのは1回の手動手順であることに注意してください。アクセストークンは、後続のすべてのAPI呼び出しに使用するキーです。(そのため、彼はアクセストークンをデータベースに保存することをお勧めします。)「PIN」(別名検証キー)と呼ばれる文字列は、必ずしも数字ではありません。これは、任意の形式の印刷可能な文字列にすることができます。その確認キーは、手順2で印刷されたURLの認証ページに表示され、「PIN」のプロンプトに貼り付けられます。

于 2014-02-21T14:27:55.197 に答える