認証に関するチュートリアル

イントロダクション

Tweepyはoauth認証をサポートしています。認証はtweepy.AuthHandlerクラスによって処理されます。

OAuth認証

TweepyはOAuthを可能な限り簡単にしようとします。またプロセスを開始するにはアプリケーションをTwitterに登録する必要があります。そして新しいアプリケーションを作成してconsumer tokenとsecret keyを取得して下さい。

次のステップでは、OAuthHandlerインスタンスを作成します。先程取得したconsumer tokenとsecret keyを渡して下さい。

auth = tweepy.OAuthHandler(consumer_token, consumer_secret)

もしWebアプリケーションでコールバックURLを使用している場合は、次のように渡します。

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

コールバックURLが変更されない場合は、twitter.comでアプリケーションのプロファイルを設定するのが最善です。

基本認証とは異なり、APIを使用する前にOAuthの「ダンス」を行わなければなりません。以下の手順を完了する必要があります

  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)

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

これがデスクトップアプリケーション(またはコールバックを使用していないアプリケーション)の場合は、twitterが権限を与えた後に提供する「ベリファイアコード」をユーザに問い合わせる必要があります。Webアプリケーションの内部では、この検証者の値は、URLのGETクエリパラメータとして、Twitterからのコールバック要求で提供されます。

# Example using callback (web app)
verifier = request.GET.get('oauth_verifier')

# Example w/o callback (desktop)
verifier = raw_input('Verifier:')

最後のステップは、アクセストークンとリクエストトークンを交換します。アクセストークンは、Twitter APIを使うための「キー」です。このトークンを取得するには、次の操作を行います。

# Let's say this is a web app, so we need to re-build the auth handler
# first...
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 'Error! Failed to get access token.'

あとで使うため、アクセストークンは保存することをお勧めします。そうすれば再度取得する必要はありません。Twitterは現在トークンに有効期限を設定していません。なのでトークンが向こうになるのはユーザーがアプリケーションアクセスを取り消した場合のみです。アクセストークンを保存するかどうかは、アプリケーションによって異なります。基本的にkeyとsecretを保存する必要があります:

auth.access_token
auth.access_token_secret

これらはデータベース、ファイル、またはこれまでに保存していた場所に投げ込むことができます。この保存したアクセストークンからOAuthHandlerを再構築します。:

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

OAuthHandlerにアクセストークンを設定したので準備が整いました。

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