Twitterで特定のキーワードを呟いたアカウントを自動でフォローするスクリプト(API 1.1対応版)

鬱陶しいとかモラル的にどうなのかという点はひとまず置いといて。。。。

ツイッター上の発言を検索し、特定のキーワードが含まれていればフォローしたりリツイートしたりするスクリプトをPHPで書いてみました。

参考:
twitterで特定のキーワードをつぶやいた人を自動でフォローする設定にしたので解説

TwitterAPI 1.1になってから、タイムラインを検索することもOAuth認証が必要となりました。
また、返されるJSONのフォーマットが少し変わっています。

AD

PHP

以下のコードをfollow.phpのような名前で保存します。

上記follow.phpとtwitteroauthフォルダをサーバにアップロードし、直接アクセすするかCRONで実行するように設定すれば「検索したいキーワード」で指定したキーワードを呟いたアカウントを自動でフォローしていきます。

アカウント凍結にはご注意ください

短時間で大量のフォロー、リムーブを行うとスパムアカウントと判定され、アカウントが凍結されます。
1度目はすぐに凍結解除が可能ですが、2度目になるとスパムでないことをフォームより申告する必要があります(実際に解除されるかどうかは不明)。

参考
ツイッターアカウント凍結解除情報 Twitter

上記スクリプトのせいでアカウントが凍結されても私は責任を負うことはできません。
自己責任でご利用ください。

2013年6月26日追記
上記スクリプトをCRONで1時間に1度実行させていたら2日後にアカウントが凍結されました。。。。(;´Д`) Twitterがどんどんスパムアカウントに厳しくなっているようなので、ごくごく控えめにしたほうが無難なようです。

AD

Share

Commentsコメント

メールアドレスは公開されません。コメントは必ずご入力ください。

HTMLタグは使用できません。ソースコードを書き込みたい場合はCodetterGistCodePenなどのご利用が便利です。

ひで さんより
リムーブするPHPはできますか?
管理人 さんより
ひで 様
コメントありがとうございます。

$connection->post("friendships/create", array("id" => $r));

となっている部分を

$connection->post("friendships/destroy", array("id" => $r));

とすればアンフォローになります。
ひで さんより
ありがとうございます

それだけで自分がフォローしたのにフォローを返してくれない人を
リムーブできるのですか?
ほかに変更とかないのですか?

よろしくお願いします
管理人 さんより
ひで 様
「だけ」と言うと語弊があります。
実際にフォローの処理を行っている最後の部分

foreach ($result as $r) {
         if (!in_array($r , $friends)) {
                    // follow
                    $connection->post("friendships/create", array("id" => $r));
                    fputs(STDOUT , "Follow {$r}\n");
                    $friends[] = $r;

                    //短時間で一気にフォローしないように
                    sleep(5);
         }
}

を見ていただきたいのですが、フォローの例ですとin_arrayによってフォロー済みではないという条件分岐を行っています。

おそらく「こちらがフォローしたのにフォロー返ししてくれない人を一定期間後にアンフォローする」という処理をしたいのだと思いますが、その場合は$rや$friendsという配列の組み方をif文を考えなおす必要があると思われます。

たとえば

$friends・・・自分のフォロワー配列(これは変わらない)
$r・・・自分のフォロワーの中で自分をフォローしていない配列

というふうに組み立てる必要があるでしょう。
ケイト さんより
実行すると

Warning: Invalid argument supplied for foreach() in /home/u143654170/public_html/follow.php on line 41

Warning: Invalid argument supplied for foreach() in /home/u143654170/public_html/follow.php on line 64

と出てしまうのですが、何かわかりませんか?
phpに詳しくないので申し訳ないです。
管理人 さんより
ケイト さま
コメントありがとうございます。

そのエラーメッセージはforeachのループに配列が渡せていないというエラーになります。
おそらく$resという変数が正常に受け取れていないのではないかと思いますので、

$res = $twObj->OAuthRequest(
        'https://api.twitter.com/1.1/search/tweets.json',
        'GET',
        $options
);
var_dump($res);//これを追加

と記述して$resの中身がどうなっているかご確認いただけますでしょうか。
ケイト さんより
回答ありがとうございます。
指示通り追加したところ、以下のように表示されました。

?string(61) "{"errors":[{"message":"Invalid or expired token","code":89}]}"

Warning: Invalid argument supplied for foreach() in /home/u143654170/public_html/follow.php on line 44

Warning: Invalid argument supplied for foreach() in /home/u143654170/public_html/follow.php on line 67
管理人 さんより
ケイトさま
「Invalid or expired token」ということはConsumer key・Consumer Secret・Access token・Access token Secretのどこかが間違っている可能性が高いです。
きちんとコピペできているか、スペースやタブが入ってないかをご確認ください。
ケイト さんより
管理人さん、できました!
お時間取らせてすみませんでした。
ありがとうございました!
hid さんより
>上記follow.phpとtwitteroauthフォルダをサーバにアップロードし、直接アクセすするかCRONで実行するように設定すれば「検索したいキーワード」で指定したキーワードを呟いたアカウントを自動でフォローしていきます。

この部分が具体的にどうやればいいかわからないです。