このブログを検索

2013/03/10

oauth

oauthは難しい。全然わからん。

perl, php で動くサンプルをマネしてやってきたが、いずれもうまく動かなくなってしまった。

oauthを使うということはつまり、アプリを公開するということである。

自分だけ使うとか、ボットにtweetさせるとかいうだけなら必要ない。

私の場合、ブロックしているアカウントの一覧表示とその解除をしたい。

これだけである。

twitterはblockという機能をあまり使って欲しくないのか、公式ページでは自分が誰をブロックしているのかが簡単にはわからない。私はtwitterで誰かと会話することは皆無といってよいので、ケンカしたり中傷されたりという理由でブロックするのではない。インチキ商売のユーザーとか、フォローしたボットがフォローしてきたが飽きた時とかに使う。

followされるのが嫌なときにもブロックする。ただし、ずっとブロックしたままだとなんだか意識しているようでイヤなので、すぐにブロックを解除する。こうすると、あたかもtwitterの不具合でfollowが外れてしまったかのように見える。

そんなことをしたい。

pythonのtweepyというモジュールでやってみた。

WEBからあるサンプルを見つけて動くことを確認した。

oauthには2組のアカウント(idとパスワードの組み合わせ)を使用する。

consumer key と access token である。

consumer keyはアプリ側で用意しておく。

アプリ利用者は access tokenを取得する必要がある。

このときに自分のtwitterアカウントのIDとパスワードを入力し、access tokenを得て、twitter apiを使用する。




今回参考にしたサンプルでは、2つのスクリプトが動く。

最初のスクリプトではcosumer tokenとsecretを使用して認証のためのURLを取得し、そこにリダイレクトさせる。

http://api.twitter.com/oauth/authenticate?oauth_token=xxxxxx...


アプリを利用するユーザーは自分のtwitterアカウントでログインする。

すると、アプリ開発者が設定したcallback urlにリダイレクトされる。

この時に、callback urlにはoauth_tokenと oauth_verifierというものが付加されている。

アプリケーションは、oauth_tokenと、request secretから request tokenを得、

oauth verifierからaccess tokenを得る。

ここまで来れば、ユーザーにAPIを利用させることができる。

とりあえずaccess tokenを得てapiを動かすことはできるのだが、そのあとでいろいろ困っている。

ブロックしているユーザーの一覧は表示できた。

次にやりたいのはこれらのユーザーのブロック解除である。

ブロック解除するにはそれをおこなう別のスクリプトを動作させる必要がある。

つまり、認証状態を維持して、ブロック解除するスクリプトに渡さねばならないのだ。

どうやるのだろう?クッキーに保存するのか?

このへんはセッション管理で、oauthとはまた別の話か。

自分だけで使うときはaccess tokenをハードコーディングして渡している。

それを動的にやるだけか。

以下がハードコーディングの場合。

import tweepy
consumer_key = '***'
consumer_secret = ' *** '
access_key = ' *** '
access_secret = ' *** '
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
print = api.me().name


tweepy.OAuthHandlerを呼んだ後で、

get_authorization_urlを呼んで認証させると、

oauth_tokenとoauth_verifierが取得できて、

それらを使ってaccess_tokenとaccess_token_secretを得ると。




とりあえず、簡単なセッション管理をした。

access tokenとaccess token secretを取得したらそれをクッキーに保存する。

クッキーにtokenが保存されていたら認証ページへのリダイレクトをせずに、

callback urlへ飛ばす。

access tokenなんかをクッキーに保存すべきじゃないのかな?