Twitterのbotを作る #4「twitterOAuthによる情報収集(フォロワーとフォローのリスト取得)」

2015年5月15日

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

前回はtwitterアカウントの情報を取得してみましたが、今回は自分のアカウントのフォロされている一覧とフォローしている一覧のリストを取得してみたいと思います。 環境は前回と同じ場所で新しくPHPファイルを設置してください。

フォロワー(フォローしてくれているアカウント)の取得

twitter_follower.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"=>"******", "consumer_secret"=>"******", "access_token"=>"******-******", "access_token_secret"=>"******" ); $connection = new TwitterOAuth($key['consumer_key'],$key['consumer_secret'],$key['access_token'],$key['access_token_secret']); // フォロワー一覧取得 $followers = $connection->get('followers/ids', array('cursor' => -1)); echo "Followers:".count($followers->ids)."アカウント\n"; print_r($followers)."\n";

結果

Followers:10アカウント stdClass Object ( [ids] => Array ( [0] => 1427204396 [1] => 1655339252 [2] => 597771429 [3] => 757726286 [4] => 847344516 [5] => 2334207386 [6] => 574034021 [7] => 28918980 [8] => 93852144 [9] => 1642974734 [10] => 3081670999 ) [next_cursor] => 1342870869284945291 [next_cursor_str] => 1342870869284945291 [previous_cursor] => 0 [previous_cursor_str] => 0 ) 自分をフォローしてくれているアカウントIDの一覧を取得できます。 このIDがtwitter内部のユーザーIDらしいので、これを使って色々と処理をすればいいという事になります。

ユーザーIDをユーザーアカウントに変換する

ちなみに、このIDを前回のユーザー情報の取得プログラムを使ってユーザーID一覧を取得することもできます。

twitter_follower_name.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"=>"******", "consumer_secret"=>"******", "access_token"=>"******-******", "access_token_secret"=>"******" ); $connection = new TwitterOAuth($key['consumer_key'],$key['consumer_secret'],$key['access_token'],$key['access_token_secret']); // フォロワー一覧取得 $followers = $connection->get('followers/ids', array('cursor' => -1)); echo "Followers:".count($followers->ids)."アカウント\n"; for($i=0;$i<count($followers->ids);$i++){ //echo $followers->ids[$i].","; $userinfo = $connection->get('users/show', ['id'=> $followers->ids[$i]]); echo $userinfo->screen_name."\n"; }

結果

Followers:10アカウント _KSYA_ ioYaya1125 info_saki_love harrischris69 TalkToErik Daniel_Mazzini JyunyaSuzuki GeorgieAnn55 greensboro_nc b3540 zekkeigazoubot とりあえず、想定通りの結果になりましたが、ユーザー情報の取得が1ユーザー毎にセッションを貼り直していたのではとても遅くて100ユーザーを超えると戻ってくるのに数分かかってしまうことになるので、これは今後考えていきたいと思います。

フォローしているアカウントの取得

twitter_follow.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"=>"******", "consumer_secret"=>"******", "access_token"=>"******-******", "access_token_secret"=>"******" ); $connection = new TwitterOAuth($key['consumer_key'],$key['consumer_secret'],$key['access_token'],$key['access_token_secret']); // フォロワー一覧取得 $friends = $connection->get('friends/ids', array('cursor' => -1)); echo "Friends:".count($friends->ids)."アカウント\n"; print_r($friends)."\n";

結果

Friends:10アカウント stdClass Object ( [ids] => Array ( [0] => 3122979097 [1] => 2475814386 [2] => 96339963 [3] => 8043322 [4] => 790146618 [5] => 118376490 [6] => 123537533 [7] => 69317034 [8] => 51906706 [9] => 955551193 [10] => 2326305162 ) [next_cursor] => 1346006129412154419 [next_cursor_str] => 1346006129412154419 [previous_cursor] => 0 [previous_cursor_str] => 0 ) 「followers」を「friends」に変更するだけですね。 取得できる情報の種類も同じなので、ここは一緒に覚えておきましょう。

このブログを検索

ごあいさつ

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