認証チュートリアル

はじめに

Tweepy は OAuth 1a (アプリケーション及びユーザ) 認証と OAuth 2 (アプリケーションのみ) 認証の両方に対応しています. 認証は tweepy.AuthHandler クラスで処理されます.

OAuth 1a 認証

Tweepy は OAuth 1a 認証をできるだけ簡単にしようとします. 認証を開始するためには Twitter にクライアントアプリケーションを 登録する必要があります. 新しいアプリケーションを登録すると. consumer key と secret key が手に入るはずです. この 2 つは後で使います.

次のステップは OAuthHandler インスタンスを作成することです. 入手した consumer key と secret key を以下のように引数として渡します.

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

もし Web アプリケーションで動的に変更される コールバック URL を使用するのであれば, 以下のように引数を渡します.

auth = tweepy.OAuthHandler(consumer_key, consumer_secret,
callback_url)

もしコールバック URL を変更しないのであれば, ベストな設定は Twitter.com におけるアプリケーションプロファイルで 固定に設定することです.

basic な認証と異なり, OAuth 1a では API の利用を始める前に 「ダンス」が必要です. 以下の手順に従ってください.

  1. Twitter からリクエストトークンを取得する.

  2. Twitter.com にリダイレクトし, ユーザにアプリケーションを認証してもらう.

  3. コールバックを利用しているならば, Twitter はユーザをアプリケーションにリダイレクトします. コールバックの利用がない場合, ユーザは検証コードを手動で入力する必要があります.

  4. 承認されたリクエストトークンとアクセストークンを交換する.

それでは「ダンス」を始めるためにリクエストトークンを取得してみましょう.

try:

redirect_url = auth.get_authorization_url()

except tweepy.TweepError:

print(‘Error! Failed to get request token.’)

この呼び出しによって, Twitter にトークンを要求し, ユーザがリダイレクトされる認証 URL が送られてきます. これがデスクトップアプリケーションであれば, ユーザが戻ってくるまで OAuthHandler インスタンスを保持します. Web アプリケーションであれば. コールバックリクエストを使用します. したがって, コールバック URL リクエストの中で必要になるまで リクエストトークンを保持し続けなければいけません. ここで, セッション中にリクエストトークンを保持し続ける 擬似的な例を示します:

session.set('request_token', auth.request_token['oauth_token'])

これで, get_authorization_url() メソッドから先に返された URL へ ユーザをリダイレクトできます.

デスクトップアプリケーション(またはコールバックを用いないアプリケーション)の場合, Twitter が権限を承認したあとに提供される verifier code を ユーザに問い合わせる必要があります. Web アプリケーション内部では, この verifier code は URL の GET リクエストの パラメータとして, コールバックリクエストで提供されます.

# コールバックを使う例 (web アプリ)
verifier = request.GET.get('oauth_verifier')

# コールバックを使わない例 (desktop)
verifier = raw_input('Verifier:')

最後のステップは, アクセストークンとリクエストトークンを交換します. アクセストークンは Twitter API を使うための「キー」です. このトークンを取得するためには以下のようにします.

# これが Web アプリだとすると, まず auth handler を再構築する必要があります
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
token = session.get('request_token')
session.delete('request_token')
auth.request_token = { 'oauth_token' : token,
                         'oauth_token_secret' : verifier }

try:
    auth.get_access_token(verifier)
except tweepy.TweepError:
    print('エラー! アクセストークン取得失敗')

後で使うため, アクセストークンを保存しておくとよいです. 毎回取得する必要はありません. 現在のところ, Twitter はトークンの有効期限を設定しておらず, ユーザがアプリケーションアクセスを取り消すまで, トークンは無効になりません. アクセストークンを保存するかどうかはあなたのアプリケーション次第です. 基本的には key と secret の 2 つの文字列を保存する必要があります.

auth.access_token
auth.access_token_secret

これらの情報はデータベースやファイルなど, 適当な場所に保存することができます. 以下のようにすると保存したアクセストークンから OAuthHandler を再構築できます.

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(key, secret)

So now that we have our OAuthHandler equipped with an access token, we are ready for business:

api = tweepy.API(auth)
api.update_status('tweepy + oauth!')

OAuth 2 認証

Tweepy also supports OAuth 2 authentication. OAuth 2 is a method of authentication where an application makes API requests without the user context. Use this method if you just need read-only access to public information.

Like OAuth 1a, we first register our client application and acquire a consumer key and secret.

Then we create an AppAuthHandler instance, passing in our consumer key and secret:

auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)

With the bearer token received, we are now ready for business:

api = tweepy.API(auth)
for tweet in tweepy.Cursor(api.search_tweets, q='tweepy').items(10):
    print(tweet.text)