Twitterのタイムラインを取得するPHPスクリプト | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

2010.08.25 追記

このエントリは、2010年8月末で廃止になるBasic認証を通してTwitterのAPIを操作するものです。

OAuthを通してTwitter APIを操作したい場合は、下記エントリを参考にしてみてください。


OAuthを通してPHPからタイムラインの情報を取得する



Twitterは公開されているAPIを通して外部からでも操作が可能なので、試しにタイムラインを取得するPHPスクリプトを書いてみました。

なお、TwitterのAPIの解説については、下記のサイトがとても参考になりました。


Twitter API 仕様書 (勝手に日本語訳シリーズ) @ 観測気球



TwitterにPOSTした自分の発言を取得する


まずは、自分自身の発言を一覧化するスクリプトです。

なお、利用するにあってはPEARのHTTP/Clientが必要になるので、事前にインストールしておいてください。


<?php

require_once "HTTP/Client.php"; // Twitterのアカウント情報 $username = "hoge"; $password = "foo"; // 自分のタイムラインを取得するためのURL // 最後の.xmlはXML形式で結果をもらうための引数 $page = "statuses/user_timeline.xml"; // APIの操作を行う際にはBasic認証が必須 $basic = array('Authorization'=>'Basic '.base64_encode($username.':'.$password)); $client = new HTTP_Client(null, $basic); $client->get("http://twitter.com/".$page ); // タイムラインを取得 $response = $client->currentResponse(); $body = mb_convert_encoding($response['body'], "EUC-JP","auto"); // データ形式はXMLで取得したため、SimpleXMLで解析 $xml = new SimpleXMLElement($body); for ($i = 0; $i < count($xml->status); $i++) { echo $xml->status[$i]->text . "\n"; } ?>

シンプルな実装しかしていません。
実行してみると


$ php twitter.php
TwitterのAPIを利用したプログラム作ってるなう。
今日は財布に100円しかないのでまっすぐ帰って残りものでまかなうか。
プロジェクトの軸になる人がいなくなったらそりゃ崩壊するよねぇ。
今気づいたけど、アメブロの芸能人のブログって絶対に1ページ1記事なの?まぁ、そういうところでアクセス数稼いでるのかねぇ。
このWBC期間中は、もっともワンセグが利用された期間ではなかろうか。
なんか今回も阪神の選手かやの外だったなぁ。スター選手多いから仕方ないけどそれでペナントレースでAクラス取ってる不思議。
いまさらながら藤川使って欲しかった
何気に今期あと1週間で終了。なんか色々できてない気がするんだが評価はいかに!?
たった今、プチッって音とともに蛍光灯が一つ飛びました。。。暗い・・・
参考書ずっと読んでたらゲシュタルト崩壊した。疲れたしそろそろ寝るか。
最近のマイブームはプレーンヨーグルトに蜂蜜をかけて食べること。
メールに「?」は付けてはいけない? http://ff.im/1FW5t
virusなんてサブドメイン使ったサイトからリンクされると焦るんだけど。http://virus.okwave.jp/index.php3
焼きうどん作った。なかなかうまし。
いろんな待ちの時間ができちゃってあんまり進まなかった。すっきりしないまま帰る。
長年勘違いして覚えてたことが結構あるなぁ。よくそれでやってこれたなって思ったりするけど。
IE8にバージョンアップする勇気がわいてきません。
もう韓国戦はお腹いっぱいなんですが。
こう風が強いと厚着したいんだけど今の時期にダウンジャケットもないよなぁって朝から困ってる
はてなーではないけど、TopHatenar張ってみた。

APIの仕様上、最大20件までしか取得できません。

指定した時刻以降の発言を拾うことも可能です。

発言を取得する際のデータフォーマットは、


$page = "statuses/user_timeline.xml";

の部分の最後に指定する引数で決まります。

上記の場合はXML形式ですが、「.rss」とすればRSS形式に、「.json」とすればJSON形式でデータを取得できます。(詳細は、APIの解説ページの「user_timeline」の項目を参照)


この取得する形式の指定により、返ってくるデータのフォーマットが異なってきますので、その後のデータを整形する過程が違ってきます。

返ってくるデータの要素名を知りたければ、タイムラインを格納した$bodyの中身をvar_dumpで覗いてみるのが手っ取り早いかもしれません。



フォロー中の人の発言を取得する


次は、フォロー中の人の発言も含めて取得するスクリプトを作ってみます。

Twitterのタイムラインの画面により近いプログラムですね。


さっきのサンプルプログラムだけでは、ちょっと発言内容がわかりにくいので、発言者と発言した時刻も表示するように改良してみたいと思います。


<?php

require_once "HTTP/Client.php";

$username = "hoge";
$password = "foo";
// ここでフォロー中の人のタイムラインを取得するように指定
$page = "statuses/friends_timeline.xml";

$basic = array('Authorization'=>'Basic '.base64_encode($username.':'.$password));

$client = new HTTP_Client(null, $basic);
$client->get("http://twitter.com/".$page );

$response = $client->currentResponse();
$body = mb_convert_encoding($response['body'], "EUC-JP","auto");

$xml = new SimpleXMLElement($body);

for ($i = 0; $i < count($xml->status); $i++) {
// 「アカウント名 : 日付」の下に発言を表示する
    echo $xml->status[$i]->user->screen_name . " : " . date('Y/m/d H:i:s', strtotime($xml->status[$i]->created_at)) . "\n";
    echo "\t" . $xml->status[$i]->text . "\n";
}

?>


結構簡単に作れるものですね。

返ってくるデータの中には、発言者のプロフィールや、POST元のサイトやツールの情報なども含まれていますので、組み合わせによっては今までとは違った角度で発言を見ることができそうです。

改良を加え、自分オリジナルのタイムライン表示をしてみてはいかがでしょうか。