twitterのfollowing、followersを得るスクリプト
twitterから簡単にfollowing、followersの一覧を得る方法として、Rがあるようです。
iGraphでTwitterのネットワークを表してみる
igraphでTwitterのネットワークを描いてみる2
しかし、100人までしか取得できないし、僕自身がRに慣れていないので、自分でスクリプトを書いてみました。
#!/usr/bin/php <?php require_once 'Services/Twitter.php'; $user='username'; // ユーザ名 $pass='password'; // パスワード $max_loop=10; // プログラムにバグがあったときの保険 $delay=10; // 1リクエスト後のスリープ時間(秒) class Services_Twitter2 extends Services_Twitter { public $followers_url= 'http://twitter.com/statuses/followers/%s.json?cursor=%.0f'; public $friends_url= 'http://twitter.com/statuses/friends/%s.json?cursor=%.0f'; function __construct($user,$pass) { parent::__construct($user,$pass); } function getAllFollowersFrom($user,$cursor=-1) { return $this->_getData('GET', sprintf($this->followers_url,$user,$cursor), 'getAllFollowersFrom'); } function getAllFriendsFrom($user,$cursor=-1) { return $this->_getData('GET', sprintf($this->friends_url,$user,$cursor), 'getAllFriendsFrom'); } } function usage() { fprintf(STDERR,"Usage: getwitter [-fo | -fr]\n"); exit(1); } if ($argc===2) { if ($argv[1]==='-fo') { $inquire='getAllFollowersFrom'; } else if ($argv[1]==='-fr') { $inquire='getAllFriendsFrom'; } else { usage(); } } else { usage(); } $st=&new Services_Twitter2($user,$pass); // クライアント情報。適当でいい $st->setAppName('getwitter'); $st->setAppVersion('0.0.1'); while (($target=fgets(STDIN))!==FALSE) { $results=array(); $target=rtrim($target); $people_json=$st->$inquire($target); $people=json_decode($people_json); for ($i=0;$i<$max_loop && !empty($people);$i++) { if (count($people->{'users'})===0) { sleep($delay); break; } foreach ($people->{'users'} as $person) { /* * 100人を超えて取得する場合、何故かたまに重複する */ if (!isset($results[$person->{'screen_name'}])) { fprintf(STDERR,$target."\t".$person->{'screen_name'}."\n"); $results[$person->{'screen_name'}]=1; } } if ($people->{'next_cursor'}===0) { // もう次はない sleep($delay); break; } sleep($delay); $people_json=$st->$inquire($target,$people->{'next_cursor'}); $people=json_decode($people_json); } } ?>
Services_Twitterを使っているので、事前にインストールしておいてください。
このスクリプトは標準入力から一覧を得たいユーザ名を入力し、「標準エラー出力」に結果を出力します。標準出力にはよくわからないメッセージがServices_Twitterから出るので出力を分けました。
followingの一覧を出力したい場合は「-fr」オプションを付け、followersの一覧を出力したい場合は「-fo」オプションを付けます。
結果の形式は次の通りです。
ユーザ名1\t人1 ユーザ名1\t人2 ユーザ名1\t人3 . . .
人1、2、3というのはfollowing、またはfollowers一覧に名前がある人のことです。
なお、動かす前に$user、$pass、$max_loop、$delayを設定しておいてください。
使用例を挙げておきます。
入力用のファイル
標準入力からユーザ名を入力できるので、ファイルに書いておくと便利です。
ユーザ名1 ユーザ名2 ユーザ名3 . . .
followingの一覧を取得
bashの場合
getwitter.php -fr < 入力ファイル 1> /dev/null 2> 出力ファイル
followersの一覧を取得
bashの場合
getwitter.php -fo < 入力ファイル 1> /dev/null 2> 出力ファイル
スクリプト自体は単純だと思うので、是非用途に応じて改造してください!