任意の複数のIDのつぶやき(ツイート)を取得して出力する方法。

携帯でTwitterを開いたら、「リスト機能使えないじゃん!!!」と、ちょっと

不便

だったので、PHPで任意の複数のIDのツイートを取得して、リスト機能風時系列順に出力する方法。

と、言ってみたものの、方法というよりは複数のユーザのツイートを取得時系列順に並び替えて配列で返す PHPclassって感じかも…。

注意:
・IDや、つぶやき以外にも取得出来る情報は沢山あるので、もっと沢山の情報を取得したい場合はmergeTweetで返ってくる値を確認し、適宜outputを編集して下さい。
・以下のままだと、アクセスの度にツイートを取得しに行っているので、不特定多数が頻繁にアクセスするような場合は、キャッシュする仕組みを追加した方が良いと思います。
また、1ID当たり、最新のつぶやき20件までしか取得しないので、全てのつぶやきを保存しておきたいという場合は、つぶやきをDBに保存するような仕組みを付加し、cronで定期的に叩くと良いかもしれません。

tweet_matome.php

<?php

$tweetMatome = new TweetMatome();
$tweetMatome->idListFile = 'id_list.txt'; //ここでIDリストファイル名を指定
echo $tweetMatome->output();

class TweetMatome {

    public $idListFile;

    //ツイートの出力
    function output() {
        $mergeTweetArr = $this->sortTweet();
        foreach ($mergeTweetArr as $tweet) {
            echo $tweet['user']['screen_name'] . '&nbsp;||&nbsp;' . $tweet['text'] . '<br /><br />';
        }
    }

    //ツイートの取得
    function getTweetList($id) {
        $data = @file_get_contents('http://twitter.com/statuses/user_timeline/' . $id . '.json?count=20');
        return $data;
    }

    //IDリストファイルの読み込み
    function getIdListArr() {
        $idList = @file_get_contents($this->idListFile);
        $idListArr = explode(PHP_EOL, $idList);
        return $idListArr;
    }

    //取得したツイートの結合
    function mergeTweet() {
        foreach ($this->getIdListArr() as $id) {
            if (is_array($mergeTweetArr)) {
                $mergeTweetArr = array_merge($mergeTweetArr, json_decode($this->getTweetList($id), true));
            } else {
                $mergeTweetArr = json_decode($this->getTweetList($id), true);
            }
        }
        return $mergeTweetArr;
    }

    //ツイートを投稿時間順に並び替え
    function sortTweet() {
        $mergeTweetArr = $this->mergeTweet();
        foreach ($mergeTweetArr as $key => $tweet) {
            $createdTime[$key] = strtotime($tweet['created_at']);
            $mergeTweetArr[$key]['created_at'] = strtotime($mergeTweetArr[$key]['created_at']);
        }
        array_multisort($createdTime, SORT_DESC, $mergeTweetArr);
        return $mergeTweetArr;
    }

}

?>

id_list.txt
※取得したいIDを以下のように改行区切りで指定して読み込み権限を与える事。

Kantei_Saigai
MHLWitter

追記:
http://twitter.com/statuses/user_timeline/ユーザID.json じゃなくて、
http://search.twitter.com/search.json?q=from:ユーザIDその1+from:ユーザIDその2
って感じで呼べば、別にソートする必要無いね。

2011年03月29日  タグ:,

Leave a Reply