phpでbotを作る(自動フォロー編)
はい、自動フォローまで来ましたー。久しぶりにちょっと頭使ったような気がする…
えーと、本題はいる前に。
最近、モノ作って、発表して…で、それに反応もらう事が多くなりました。
私に直接じゃなくて間接的な意見も多くて、さまざまなモノがあってありがたいです。
こっちには耳の痛い意見でも傾けなければいけないところもあり。(昨日のプログラムはちょっと公開見合わせます)
でも、何も反応がないより、本当、ずっとずっといいよなー、幸せだなーって思います。
モノを作るのがスキで何かしらやってきたけど、文章も絵も大して反応(良くも悪くも)はもらえてなくて、このネットとプログラムが一番受けがいいかな…って最近思います。この世にネットとプログラムがあって良かった。
さて、本題です。自動フォローのコード。
<?php $username = "なまえ"; $password = "ひみつ"; //フォロワー一覧取得のための情報 $host = "http://twitter.com/statuses/followers.xml?screen_name="; $XML = getlist($host,$username,$password); $list = array(); //フォロワーのリストを配列に foreach ($XML->user as $user){ $screen_name = $user->screen_name; $list[] = $screen_name; } //フレンズ(フォロー済みの人)一覧取得のための情報 $host = "http://twitter.com/statuses/friends.xml?screen_name="; $XML = getlist($host,$username,$password); $friends = array(); //フレンズのリストを配列に foreach ($XML->user as $user){ $screen_name = $user->screen_name; $friends[] = $screen_name; } //フォロワーからフレンズの差分を求める(つまり、これからフォローするリスト) $followlist = array_diff($list, $friends); //print_r($followlist); //フォローリストが空じゃなかったらforeachでフォローする if ( !empty($followlist) ) { foreach($followlist as $value){ $screen_name = $value; following($screen_name,$username,$password); } } //一覧取得の関数(例によってcurl使用) function getlist($host,$username,$password){ $host.=$username; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $host); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); $result = curl_exec($ch); curl_close($ch); $XML = simplexml_load_string($result); //戻り値 return $XML; } //フォローする関数 function following($screen_name,$username,$password){ $base_url = "http://twitter.com/friendships/create/"; $base_url.=$screen_name.".xml"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $base_url); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //フォローはPOSTじゃないと駄目なので curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); $buffer = curl_exec($ch); curl_close($ch); } ?>
以上、これを前のリプライのスクリプトと同様に、短めの間隔でcronでまわせば自動フォローできるはず!
解説。
$host = "http://twitter.com/statuses/followers.xml?screen_name="; $host = "http://twitter.com/statuses/friends.xml?screen_name=";
フォロワーやフレンズを取得するところ、処理が似ていたので関数作りました。
今回は、ふたつの配列を作ってそれを比較するというのをやりました。
array_diff
という関数、存在を初めて知りましたがphpは何でも揃っていますねえ。
あと、戻り値について。私今まで関数の戻り値についてよく理解していなかったのですが、今回はじめてわかったような気がします。
コードはご自由に使って下さい。
ただ、apiがフォローできる数は制限があるようなので、そこらへんはお気をつけを。
邪気眼に適用しようかと思ったがすでに1000近いのでなあ…
この次に生かします。