SDN ProjectPHP+OAuthでTwitter

トップ > 研究室 > PHP+OAuthでTwitter

2010/02/11

PHP+OAuthでTwitter

バージョン0.1.0での説明はこちら

Twitterで最近よく見る「OAuth」、オース or オーオースって多分読むのでしょうが、これは簡単に言うとTwitterの新たな認証方式といえます。
今まではBasic認証が一般的でしたが、将来的にセキュリティ面で非推奨になるといわれているらしく、Twitterは今後はBasic認証を廃止してOAuth認証に切り替わります。

Twitter API Wiki / Authentication

ただ、Basic認証は手軽に出来るものでしたが、OAuthはちょいと手間がかかったりもするのでそんなにさっさと移行できるものではなかったりもしますが。

OAuthについては、しばさんが詳しく書かれているのでそちらを参照していただくと早いかもしれないです。
内容はRuby+OAuthですが、プログラム部分以外は共通しています。

TwitterのbotをOAuthに対応させる - しばそんノート

■OAuthの魅力?

しばさんの方にもリンクしましたが、こちらでも一応説明いたします。

「将来的に非推奨になるだけでまだBasic認証でいいじゃん」と思ってしまえばそれまでなのですが、OAuthにしかできないこともあったります。
例えば、Webで呟けば「Webで」、クライアントのTweenで呟けば「Tweenで」、APIで呟けば「APIで」となるわけですが、これが自分の好きなように変更する事ができるのです。

例えば、私が作ったBotになってしまいますが、東風谷早苗(@Kochiya_Sanae)犬走椛(@Momiji_bot)があります。
これらの呟きの下の方を見るとそれぞれ「守矢の神社で」、「妖怪の山の見張り台で」となっており、それぞれBotの説明ページにリンクが貼られています。
せっかくのBotなのだから、「APIで」はさすがに嫌ですよね。
こういうところにもちょっとしたアピールやアクセントがあったほうが面白いかと。

■PHPでOAuthを使う準備

それでは、早速PHPの準備です。環境はPHP5以上で、curlが使えれば大丈夫です。
ここではTwitter API Wiki / OAuth Examplesにあるabraham's twitteroauth at master - GitHubを使わせていただきます。
ちょうど真ん中あたりりにある「Download」からバージョン0.2.0以降を選んでダウンロードし、解凍します。この説明でやる場合は、バージョン 0.2.0より前のものは使わないでください
その中の「twitteroauth」フォルダ内の「OAuth.php」と「twitteroauth.php」を使います。

そして、私が少しいじったサンプルPHPをダウンロードしてください。→http://wolf.silk.to/labo/oauth_test.txt
名前を適当なものにして、拡張子を「php」に変更してください。(ここの説明では「oauth_test.php」とする)
このPHPにアクセスすることになります。後で設定するコールバックのURL指定でこのファイルを指定します。

それら合計3つのPHPファイルを同じフォルダに入れて、サーバーの適当な場所にアップロードしておきます。
まだそのPHPにはアクセスしないでください。

一応ここでPHPは一休み。

■TwitterへOAuthクライアントの登録

次に、TwitterでOAuthが使えるように登録をします。
以下のページにクライアントの製作者のアカウントでログインしている状態でアクセスします。

Applications Using Twitter

私の場合はBotでOAuthを使うので、Botのアカウントでログインしている状態でアクセスということになります。

"Register a new application »"のリンクをクリックするとクライアント登録ページが出てきます。
しばさんによると、最低限"Application Name""Description""Application Website"が入力されていれば大丈夫のようです。

入力には日本語も使えます。
一番大事なのは"Application Name"です。ここが「○○で」と表示される部分なのです。
"Description"は適当に説明(30字以上)を記入し、"Application Website"はそのクライアントの説明ページのURL(私の場合はBot説明ページのURL)を入れます。

"Application Type"はBotやクライアントとして使うのであれば"Client"を選択するのですが、今は"Browser"のままにしておいてください。
"Callback URL"には、先ほどアップロードしたサンプルPHPのURL(例:http://~/oauth_test.php)を入力。
"Default Access type""Read & Write"を選択。"Read-only"では呟きがPOSTできないのです。
"Use Twitter for login"はこのままでいいでしょう。

登録が完了したら"Consumer key""Consumer secret"があり、不規則な文字の羅列で出来た値があります。それをメモしておいてください。
ちなみにこのページにはApplications Using Twitterからいつでも確認できます。
登録情報の変更もこちらからできます。

■PHPに設定する

私が用意したサンプルPHP(oauth_test.php)をエディターで開き、8行目の「$consumer_key = 'consumer_key';」と10行目の「$consumer_secret = 'consumer_secret';」に先ほどの"Consumer key""Consumer secret"の値を入れます。
そしてもう一度アップロードし、そのPHPにクライアントの製作者のアカウントでログインしている状態でアクセスします。
"Access Token""Access Token Secret"の値が空になっていることを確認してください。

サンプルPHPの下に"Click on the link to go to twitter to authorize your account."とあり、リンクが貼られています。(https://twitter.com/oauth/authorize?oauth_token=~)
そのリンクをクリックすると"An application would like to connect to your account"というページにいきます。
そのページ内に先ほど設定したクライアント名やその製作者名が表示されるので、間違いなければ「許可する」をクリックしてください。
するとまたサンプルPHPにリダイレクトされ、先ほどまで空だった"Access Token""Access Token Secret"の値が表示されているかと思います。表示されない場合はリロードしてください。
(もし、このときリダイレクトされずにPINコードが表示された場合は、もう一度設定を見直してください。"Application Type""Browser"です)
その"Access Token""Access Token Secret"をメモしてください。

もう一度Applications Using Twitterにクライアントの製作者のアカウントでログインしている状態でアクセスし、設定ページにいきます。
"Application Type""Client"に変更します。

これで、ほぼ準備は整いました。

■実際にPHP+OAuthでTwitterにPOSTする

先ほどのサンプルPHPは削除してもらって構いません。使うのは「OAuth.php」と「twitterOAuth.php」です。
POSTするプログラムを簡単に作ってみましょう。
文字コードはわかっているとは思いますが、UTF-8です。

<?php
// twitteroauth.phpを読み込む。パスはあなたが置いた適切な場所に変更してください
require_once("twitteroauth.php");

// Consumer keyの値
$consumer_key = "consumer_key";
// Consumer secretの値
$consumer_secret = "consumer_secret";
// Access Tokenの値
$access_token = "access_token";
// Access Token Secretの値
$access_token_secret = "access_token_secret";

// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

// TwitterへPOSTする。パラメーターは配列に格納する
// in_reply_to_status_idを指定するのならば array("status"=>"@hogehoge reply","in_reply_to_status_id"=>"0000000000"); とする。

$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml","POST",array("status"=>"Test OAuth update."));
/* TwitterへPOSTする以外にも、TLの取得、呟きの削除などAPIをOAuth認証で行うことが出来ます。
   例えば、TLを取得するのなら
      $req = $to->OAuthRequest("http://twitter.com/statuses/friends_timeline.xml","GET",array("count"=>"50"));
      $req_array = simplexml_load_string($req);
      foreach($req_array as $tweets){~}
   呟きをお気に入りに追加するのなら
      $req = $to->OAuthRequest("https://twitter.com/favorites/create/00000000.xml","POST",array());
   ...といった感じです。詳しくはTwitterのAPI仕様書を。*/


header("Content-Type: application/xml");
echo $req;
?>

凄く簡単ですが、こんなのでPOST出来ます。
$req にはTwitterからの何かしらの返り値(この場合はxml形式)が入ります。他にもJSON形式も。
そして、しっかりと「(クライアント名)で」となっているのを確認できたら成功です。やったね。

これを応用すればBotなどの他にWebクライアントやTwitter向けのサービスなどに使えます。他にも様々な事ができますが割愛。
このOAuthを使っていろいろ夢広がる?
詳しくは英語ですがTwitter-OAuth-PHPなどを参照してください。

▼連絡先

何か御用がある場合は以下のメールアドレスにてお願いします。
メールアドレス

Presented by トメ