PHP+OAuthでTwitter 旧方法版
[2010/04/29] こちらの方法は多少面倒です。特に理由が無ければこちらを参照してください。
Twitterで最近よく見る「OAuth」、オース or オーオースって多分読むのでしょうが、これは簡単に言うとTwitterの新たな認証方式といえます。
今まではBasic認証が一般的でしたが、将来的にセキュリティ面で非推奨とのことで、TwitterはBasic認証を2010年8月までとし、OAuth認証に切り替わります。
TwitterのアプリケーションやBotを作っている人は切り替えなければなりません。
ただ、Basic認証は手軽に出来るものでしたが、OAuthはちょいと手間がかかったりするのですぐに切り替えようにも出来ません。
OAuthについては、しばさんが詳しく書かれているのでそちらを参照していただくと早いかもしれないです。
内容はRuby+OAuthですが、プログラム部分以外は共通しています。
→TwitterのbotをOAuthに対応させる - しばそんノート
OAuthの魅力?
しばさんの方にもリンクしましたが、こちらでも一応説明いたします。
「Basic認証が廃止になるのはわかったけど、OAuthになって何が変わるの?」という疑問もあるかと思います。OAuthで出来る事のほんの一部を例にとります。
例えば、Webで呟けば「Webで」、クライアントのTweenで呟けば「Tweenで」、APIで呟けば「APIで」となるわけですが、これが自分の好きなように変更する事ができるのです。
例えば、私が作ったBotになってしまいますが、東風谷早苗(@Kochiya_Sanae)と犬走椛(@Momiji_bot)があります。
これらの呟きの下の方を見るとそれぞれ「守矢の神社で」、「妖怪の山の見張り台で」となっており、それぞれBotの説明ページにリンクが貼られています。
せっかくのBotなのだから、「APIで」はさすがに嫌ですよね。
こういうところにもちょっとしたアピールやアクセントがあったほうが面白いかと。
そして、APIの取得上限がこれまで150くらいまでだったのが二倍以上の350(Twitterの状況によっては大きく変動する)になっています。
なので、処理時間に余裕があればhome_timelineとmentionsを一気に取得して、なんてことも出来ます。
TwitterへOAuthクライアントの登録
先に、私が少しいじったサンプルPHPをダウンロードしてください。→http://www.sdn-project.net/ups/oauth_test.txt
名前を適当なものにして、拡張子を「php」に変更してください。(ここの説明では「oauth_test.php」とする)
このPHPにアクセスすることになります。後で設定するコールバックのURL指定でこのファイルを指定する事になります。
それら合計3つのPHPファイルを同じフォルダに入れて、サーバーの適当な場所にアップロードしておきます。
まだそのPHPにはアクセスしないでください。
次に、TwitterにOAuthアプリケーション情報を登録します。
以下のページにクライアントの製作者のアカウントでログインしている状態でアクセスします。
→Twitter Applications | dev.twitter.com
私の場合はBotでOAuthを使うので、Botのアカウントでログインしている状態でアクセスしています。
「新しいアプリケーションを登録する」のリンクをクリックするとクライアント登録ページが出てきます。
しばさんによると、最低限「アプリケーション名」、「アプリケーションの説明」、「アプリケーションのウェブサイトURL」が入力されていれば大丈夫のようです。
入力には日本語も使えます。
一番大事なのは「アプリケーション名」です。ここが「○○で」と表示される部分なのです。
「アプリケーションの説明」は適当に説明(30字以上)を記入し、「アプリケーションのウェブサイトURL」はそのアプリケーションの説明ページのURL(私の場合はBot説明ページのURL)を入れます。
「所属会社/団体」は個人なので空欄のままでOK。企業や団体なら記入。
「アプリケーションの種類」は今は「ブラウザアプリケーション」を選択し、「コールバックURL」には、先ほどアップロードしたサンプルPHPのURL(例:http://~/oauth_test.php)を入力。。
"Default Access type"は"Read & Write"を選択("Read-only"は意味の通り、読むだけ)。
「アプリケーションのアイコン」は無くてもいいし、好きなアイコンでも構いません。私はBotのアイコンです。
そして画像認証の文字列を入力して終わり。
登録が完了したら"Consumer key"と"Consumer secret"の不規則な文字列をメモしておいてください。
ちなみにこのページには Twitter Applications | dev.twitter.com からいつでも確認できます。
登録情報の変更もこちらからできます。
PHPに設定する
私が用意したサンプルPHP(oauth_test.php)をエディターで開き、8行目の「$consumer_key = '';」と10行目の「$consumer_secret = '';」に先ほどの"Consumer key"と"Consumer secret"の値を入れます。
そしてもう一度アップロードし、そのPHPにBot等のアカウントでログインしている状態でアクセスします。
"Access Token"と"Access Token Secret"の値が空になっていることを確認してください。
サンプルPHPの下に"https://twitter.com/oauth/authorize?oauth_token=~"から始まるURLがあります。
(ちなみに、このURLはアクセスする度に"oauth_token=~"の値が変わります。このURLこそが、あの"Sign in with Twitter"ボタンの中身ということになります。)
そのリンクをクリックすると"アプリケーションが、あなたのアカウントへの接続を要求しています。"というページにいきます。
そのページ内に先ほど設定したクライアント名やその製作者名が表示されるので、間違いなければ「許可する」をクリックしてください。
するとまたサンプルPHPにリダイレクトされ、先ほどまで空だった"Access Token"と"Access Token Secret"の値が表示されているかと思います。表示されない場合はリロードしてください。
(もし、このときリダイレクトされずにPINコードが表示された場合は、もう一度設定を見直してください。"あなたの招待状"は"ブラウザアプリケーション"です)
その"Access Token"と"Access Token Secret"をメモしてください。
もう一度 Twitter / アプリケーション にクライアントの製作者のアカウントでログインしている状態でアクセスし、設定ページにいきます。
"あなたの招待状"を"送信"に変更します。
これで、ほぼ準備は整いました。
※ひとつのアプリケーションを複数のアカウント使いたいなどの理由で、アカウントごとに"Access Token"と"Access Token Secret"の取得を行いたい場合は、サンプルPHP(oauth_test.php)に取得したいアカウントでアクセスし、上記と同じように行えば大丈夫です。
実際に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"=>"OAuth経由のポストテスト"));
// TwitterへPOSTするときのパラメーターなど詳しい情報はTwitterのAPI仕様書を参照してください
header("Content-Type: application/xml");
echo $req;
?>
凄く簡単ですが、こんなのでPOST出来ます。URLエンコードは不要です。
$req にはTwitterからの何かしらの返り値(この場合はxml形式)が入ります。他にもJSON形式も。
そして、しっかりと「(クライアント名)で」となっているのを確認できたら成功です。やったね。
POSTする他に、タイムライン取得やお気に入りに追加するといったことも
$req = $to->OAuthRequest("APIのURL","メソッド",array(何かしらのパラメーター));
で、できます。
メソッドにはPOST、GET、DELETEが使えます。
これを応用すればBotなどの他にWebクライアントやTwitter向けのサービスなどに使えます。他にも様々な事ができますが割愛。
このOAuthを使っていろいろ夢広がる?
詳しくは英語ですがTwitter-OAuth-PHPなどを参照してください。
タイムラインを取得してみる
POSTは出来ました。それでは次はTLの取得方法です。
以下は一例です。
<?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);
// home_timelineの取得。TwitterからXML形式が返ってくる
$req = $to->OAuthRequest("https://twitter.com/statuses/home_timeline.xml","GET",array("count"=>"50"));
// XML文字列をオブジェクトに代入する
$xml = simplexml_load_string($req);
// foreachで呟きの分だけループする
foreach($xml->status as $status){
$status_id = $status->id; // 呟きのステータスID
$text = $status->text; // 呟き
$user_id = $status->user->id; // ユーザーナンバー(数字の方は絶対に変わらない)
$screen_name = $status->user->screen_name; // ユーザーID(いわゆる普通のTwitterのID)
$name = $status->user->name; // ユーザーの名前(HNなど)
echo "<p><b>".$screen_name." / ".$name."</b> <a href=\"http://twitter.com/".$screen_name."/status/".$status_id."\">この呟きのパーマリンク</a><br />\n".$text."</p>\n";
}
?>
このようにBasic認証の頃からBotなどを作っていた人なら分かるかと思いますが、OAuthでXMLを取得した後は今までのBasic認証でやってきた処理をすればいいのです。
XMLやJSON形式でタイムラインを取得してBotに反応させる方法は割愛します。こちらよりも詳しいサイトがたくさんあると思いますので。
これを利用したBotのサンプルなどはこちらで解説しています。
→ PHP+OAuthでTwitterのBotを作ってみる
連絡先
何か御用がある場合は以下のメールアドレスにてお願いします。



