Twitterにおける二種類の認証方法の違い

2017-01-08

twitter の REST API (or Streaming API) を使うためには OAuth で認証を行い,アカウントにアクセスする権限を得る必要があります.

Python で書くとして,Tweepy を使って Twitter の OAuth 認証を行います.

OAuth とは

詳しくはググってね (投げやり) .Twitter では OAuth 1.0a という認証方式を採用しているらしいです.

Twitter Application Management

アプリケーションの登録

Twitter 上で動くプログラムや BOT を作るためにはアプリケーション登録が必要で,しかも電話番号を登録しているアカウントでないと実行できません

  1. Twitter Application Management でアプリケーションを作成する
  2. Create New App を押して,アプリケーション登録に進む

ここでは,次の情報を入力します.

  • Name:アプリケーションの名前
  • Description:アプリケーションの説明
  • Website:サイトの URL

これらの情報はアプリ利用者に提示されるもので,必要に応じて変更できます.

サイトの URL は特に持っていなければ Twitter の自分のページ (例:http://twitter.com/_mktia ) とか入力しておけばいいでしょう.

Callback URL は認証の後に飛ぶページを指定するもの.プログラム上で書くときはたぶん入力しなくてもいいです.

最後に,規約に同意して終了.

与えられている権限,情報の確認

Keys and Access Tokens > Application Settings > Access level で Read and write になっているかを確認し,アプリケーションを利用するための consumer key, consumer secret の値をメモしておきます.

また,後述の「単一アカウント向けの簡単な認証」を行う場合は,このページで Create my access token も忘れずに.

OAuth で認証

  • 自分のアカウントでしか使わないとき
  • 複数アカウントで使えるようにするとき

後者が本来の在り方ですが,自分でしか使わないときは悪用される心配もないので前者のやり方も用意されているようです.

単一アカウント向けの簡単な認証

import tweepy

consumer_key = 'consumer keyの値'
consumer_secret = 'consumer secretの値'
access_token = 'access tokenの値'
access_token_secret = 'acess token secretの値'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

複数アカウント向けの複雑な認証

一つのアカウントだけで使う場合は access token を取得し直す必要はありませんが,複数のアカウントで使う場合は Twitter の認証ページでログイン,許可して API を使います.

import tweepy

consumer_key = 'consumer keyの値'
consumer_secret = 'consumer secretの値'
callback_url = '戻ってくるURL'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret, callback_url)

#認証のためにリダイレクトするURLを発行
redirect_url = auth.get_authorization_url()

#認証して戻ってきた値をsessionに保存
session['request_token'] = auth.request_token
session['verifier'] = request.args.get('oauth_verifier')

#sessionを使って認証する
token = session.get('request_token')
verifier = session.get('verifier')
auth = tweepy.OAuthHandler(consumer_key, consumer_secret, callback_url)
auth.request_token = token
auth.get_access_token(verifier)
access_token = auth.access_token
access_token_secret = auth.access_token_secret
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

途中でページ遷移を挟んでいるので,session に値を格納したり,access token を二回発行したりする必要があります.

access token は発行して一度利用したら,再度使うことはできません.

session は Django, flask などの Web アプリケーションフレームワークに付属しているものを使うと楽です.

ちなみに,Bottle にはついてません.(Bottle で途中まで作っていた結果,やり直すことになった.)