TwitterのAPIをOAuthで使ってみる(入門)

新しいものは好きですが、巷で話題になってから後追いするのは嫌な天の邪鬼です。
こんにちは。

つぶやいてる暇ないぜーとTwitterは距離をとっていたのですが、あんまりTwitterとか携帯が最近ちょっとにぎやかなので、勉強がてらTwitterAPIを使って何かひとつウェブサービスを創ってみようかと思いました。



とりあえず使ってみる

まず、創ってみようと思っているものが、そもそも技術的に可能なのかわかりませんでした。
認証絡みのところはイメージはあるものの、実際にやったことがないからです。


そこで実際に手を動かしてみます。
TwitterAPIをOAuthで使ってみるにはどうすればいいか。
Basic認証でも可能ですが、開発者としてもユーザーのID・パスワードを預かるのは怖い。のみならず、今となってはユーザーとしても預けるのをためらうのが普通でしょう)



以下のページに従って作業すればできます(ありがとうございます)。
自分でまとめるつもりだったのですが、ほぼ書いてあるとおりに作業すればできたので省略(^^;


PHP+OAuthでTwitter(SDN Project)2009/09/02
 http://wolf.silk.to/labo/oauth.html


TwitterへOAuthクライアントの登録」の際に用いる登録画面の意味については以下のページも参考にさせていただきました。


TwitterにOAuthクライアントアプリを登録する方法(H2+ Goes On)
 http://h2plus.biz/blog/2009/10/26/380/


追加の作業上の注意点は、以下の2点です。


1.twitteroauthは、0.1.1(2009/4/9リリース)をダウンロードすること
→本日現在の最新版は0.2.0-beta(2009/11/4リリース)ですが、こちらではOAuth.phpの249行目でエラーがでます。
 仕様が変わっているのでしょうが、どこが変わっているためこの症状がでているのか未確認です。
 自分で直せない人は、とりあえず0.1.1を使いましょう
 (私はとりあえず動くようになってから、ソースを遡って把握するつもりでしたので、そのまま動かないと参考にできません)


2.oauth_test.php(SDN Projectさん作)のrequire_onceするtwitterOAuth.phpを全て小文字にする



これだけです。
掲載されている、POSTするプログラムの最終行をいじれば好きなようにTweetできます。
あとはこれをもとに付け加えていけばいけばいいわけです。


OAuthにすることで「Webで」とか書いてある部分を、(しかも説明ページへのリンク付で!)自分のクライアント名にできるのが魅力ですね。


Oauthのおおざっぱな仕組みと使い方


TwitterへOAuthクライアントの登録」した際、Consumer keyConsumer secretが発行されました。
ここでいうConsumerとは、Oauthのサービスを受ける側のクライアントを指します(一方のTwitterOAuth Service Providerですね)。


これとCallback URLが肝です。
(登録画面でApplication TypeをBrowserにしていると表示されます)


1.クライアントアプリ側でTwitterの認証/許可用URLへのリンクを表示

2.認証用URL(Twitter)で、認証/許可を行う

An application would like to connect to your account
The application ****** by would like the ability to access and update your data on Twitter. Not using Twitter? Sign up and Join the Conversation!
ユーザー名やメールアドレス:
パスワード:
[拒否する][許可する]

3.許可すると、クライアントアプリのCallback URLにリダイレクトする
※あわせてAccess TokenAccess Token Secretを返してくる

4.クライアントアプリ側では、特定したユーザー毎にAccess TokenAccess Token SecretをDBに格納し、以後ユーザーから指示があった場合には、Access TokenAccess Token Secretを利用してTwitterAPIを操作する

5.ユーザーは、ウェブサービスに与えた許可を、「設定」→「Connections」→「許可を取り消す」でいつでも取り消すことができる
 (取り消されるまでは、発行されたAccess TokenAccess Token Secretを利用してあたえられた権限内の操作が可能)


OAuthリスエストの流れについては、goo Socail Platformの図解がわかりやすいです。


▽第2回 OAuth Consumerの実装(入門 : OAuth Access Tokenの取得と利用)
 (ゼロから学ぶOAuth/gihyo.jp)
 http://gihyo.jp/dev/feature/01/oauth/0002?page=2



OAuthが万能かというと当然そんなことはなくて。
現に8月ぐらいにはSPAM騒ぎがあったようですが、そんなものですよね。


三者(クライアントアプリ)が悪用した際は、ユーザーは許可を取り消せばいい。
ユーザーにとってはIDとパスワードを預けた場合と異なり、アカウントを横取りまではされない点(さんざん悪用されるかもしれないけど、最悪の事態はない)程度のメリットということですね。


まぁちょっぴり民法の代理権の授与のお話に似ているかもしれません(^_^;


ですからサービス側は、情報開示を丁寧に行い、信用を失わないようにする。
たとえ利便性があがることであっても、まず情報開示。それが大事かもしれません。


とりあえず作ろうとしているサービスはさほど難しくなさそうなので、さくっと作ってみます。


【追記】
ここもSDN Projectさんのところを参考にしていますね。
機能別にファイルを分けているのでソースを読むのが楽そうです。


▽OAuthで認証してtwitterに投稿するプログラムをちょっと見せ(だらだらシステム)
 http://mamiske.jugem.jp/?eid=6 2009/11/18


紹介されていた、OAuthについてわかりやすい記事。これはいい。


APIアクセス権を委譲するプロトコル、OAuthを知る(@IT
 http://www.atmarkit.co.jp/fsecurity/special/106oauth/oauth02.html