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以上のデータ取得ができています。
とりあえず、今後は全てこの記述で行きましょう。
0 件のコメント:
コメントを投稿