Twitterのbotを作る #9「フォローしてくれたユーザーの自動登録」

2015年5月20日

PHP サービス プログラミング

フォローしてくれたユーザーも「フォロー返し」をすることで、Twitterのユーザー通しがどんどんつながっていきます。 エロ系などはほんとに勘弁してもらいたいんだけど、基本、相互フォローをしていくのがtwitterのルールなのでしょうね。 本垢と捨垢などを使い分けている人は、その中の幾つかがbotだったりすると思いますが、botの基本は相互ですね。 ということで、自動で相互フォローするプログラムを書きます。 考え方は、unfollowと同じで、フォロワーと友達の制御を逆にすれば、OKという比較的シンプルな内容です。

ソースコード

<?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; } } } if(!isset($_REQUEST['user']) || !$_REQUEST['user']){die("Error:not-query-user");} //keyデータ処理 $key_json = json_decode(file_get_contents("./key.json"),true); $key = $key_json[$_REQUEST['user']]; $connection = new TwitterOAuth($key['consumer_key'],$key['consumer_secret'],$key['access_token'],$key['access_token_secret']); //フォロー処理 $res = $connection->post('friendships/create', array('id'=>$_REQUEST["uid"])); print_r($res); exit(); //フォロー数情報の表示 // フォロワー一覧取得 $res = $connection->get('followers/ids', array('cursor' => -1)); //$followers = $res->ids; for($i=0;$i<count($res->ids);$i++){ $followers[$res->ids[$i]] = true; } while($res->next_cursor){ $res = $connection->get('followers/ids', array('cursor'=>$res->next_cursor)); for($i=0;$i<count($res->ids);$i++){ $followers[$res->ids[$i]] = true; } } // フレンド一覧取得 $friends = array(); $unfollows = array(); $res = $connection->get('friends/ids', array('cursor' => -1)); for($i=0;$i<count($res->ids);$i++){ $friends[] = $res->ids[$i]; if($followers[$res->ids[$i]]==true){continue;} $unfollows[] = $res->ids[$i]; } while($res->next_cursor){ $res = $connection->get('followers/ids', array('cursor'=>$res->next_cursor)); for($i=0;$i<count($res->ids);$i++){ $friends[] = $res->ids[$i]; if($followers[$res->ids[$i]]==true){continue;} $unfollows[] = $res->ids[$i]; } } //unfollow検索 echo "followers:".count($followers)."アカウント\n"; echo "friends:".count($friends)."アカウント\n"; echo "unfollows:".count($unfollows)."アカウント\n";

実行

$ twitter_post_follow.php user=***** 対象のアカウント数が300を超えた当たりで、responseエラーという風になって、動作が停止してしまいました。 その後、何度か再実行することで、全ての人に対してのフォローがされましたが、もしかすると上限数などを決めたりしないと、twitterサーバーの方がヘタってしまう可能性もありますね。

このブログを検索

ごあいさつ

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