Twitterのbotを作る #5「twitterOAuthによる情報収集(最大数超え)」

2015年5月16日

サービス プログラミング 特集

twitterOAuthライブラリを使って、Twitterサーバーから一度に取得できるユーザーアカウント数はどうやら5000が上限のようです。 なので、5000異常のフォロワーやフレンドがいる場合は、登録順で5000までしか取得ができないので、今回は全ての一覧を取得する方法を書いておきます。

Twitterの上限値ルール

ちなみに、現時点でtwitterのルールとして、2000までの友達は問題なく作れるようになっているのですが、それ以上については、ある一定のルールで増えていくようです。 正確にはわかりませんが、フォロワーが増えていく事に比例して2000という上限を上振れさせているように見えますね。 やはりフォローしてもらえるアカウント作りが必要という事です。

5000の上限を超えて取得するには

通常

$connection = new TwitterOAuth($key['consumer_key'],$key['consumer_secret'],$key['access_token'],$key['access_token_secret']); // フォロワー一覧取得 $followers = $connection->get('followers/ids', array('cursor' => -1));

全て取得

// フォロワー一覧取得 $followers = $connection->get('followers/ids', array('cursor' => -1)); $array_data = $followers->ids; while($followers->next_cursor){ $followers = $connection->get('followers/ids', array('cursor'=>$followers->next_cursor)); for($i=0;$i<count($followers->ids);$i++){ $array_data[] = $followers->ids[$i]; } }

解説

返り値を受け取った「$followers」の中に「next_cursor」という値が存在する。 5000件に満たないリストの場合は、ここの値が「0」になっています。 しかし、5000件を超える場合は、次のリスト取得の場合のカーソル位置という値が入ってきます。 なので、「next_cursor」の値が0でなければ(trueだったら)、while文で、$array_dataの配列にどんどん追記して貯めていく仕様にしました。 ※数万単位の場合はどのくらい遅延するか今のところわかりません。

ソースコード

twitter_getOver.php

<?php date_default_timezone_set('Asia/Tokyo'); //ライブラリ処理 require 'twitteroauth/autoload.php'; use Abraham\TwitterOAuth\TwitterOAuth; //CLIの場合argvをREQUESTに変換する。 if(!isset($_SERVER['SCRIPT_URI']) && isset($argv)){ for($i=0,$c=count($argv);$i<$c;$i++){ if(!$argv[$i]){continue;} //各クエリの分解 $q = explode("=",$argv[$i]); if(count($q)<2){continue;} if($q[0]!=''){ //requestに格納 $key = $q[0]; $val = join("=",array_slice($q,1)); $_REQUEST[$key]=$val; } } } $key = array( "consumer_key"=>"aLrTI6JhcLKob0YbqCJHiFeDr", "consumer_secret"=>"j1gyzD56c4Vbd0NZTdZeEe8oB2TIwjPbdv63Vn28hoyWaII2eD", "access_token"=>"11363242-R3KcruUmQI9CMNYsj1VaLHw1wAmytm24pNHMCkAPP", "access_token_secret"=>"ENSQ2oFfzPWfQ19VA5zSWbKOJardmZytctmCb11Xf1Uxl" ); $connection = new TwitterOAuth($key['consumer_key'],$key['consumer_secret'],$key['access_token'],$key['access_token_secret']); // フォロワー一覧取得 $followers = $connection->get('followers/ids', array('cursor' => -1)); $array_data = $followers->ids; while($followers->next_cursor){ $followers = $connection->get('followers/ids', array('cursor'=>$followers->next_cursor)); for($i=0;$i<count($followers->ids);$i++){ $array_data[] = $followers->ids[$i]; } } echo count($array_data)."\n"; print_r($array_data);

確認

$ php twitter_getOver.php 5808 Array ( ....... [5808] => ****** } 確かに5000以上のデータ取得ができています。 とりあえず、今後は全てこの記述で行きましょう。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。