読者です 読者をやめる 読者になる 読者になる

ざ・わーるど@はてな

気が向いた時に更新する雑記です

Twitter で自分に関係の無い世界宛(@theworld)の Mention を受け取り続けて面倒くさくなったので自動でブロックするようにした

日記

自分の Twitter アカウントは、
はてなのアカウントと同じで theworld なのだけど、
この Twitterアカウント宛に外国のみなさんが
英文で「〜the world」という部分を (@theworld)にして
ガンガン Mention を送ってくる。例えばこういう感じ。



こういうのを送ってくる人は、こういう使い方なうえに
@theworld というアカウントを人が使っていると思っていないから
次もまた送ってくる可能性があるので
鬱陶しくらならないようにブロックしてきたのだけど、
手動でやるのがあまりにも面倒になったので Twitter API を叩いて自動化することにした。

Twitter で Block するスクリプト

自動ブロックする条件は以下。

  • Tweet に日本語が含まれていない
  • 自分が発言者をフォローしていない、発言者が自分をフォローしていない

つまり自分と関わりが無くて英語で Mention を送ってくるユーザー。
処理的には別に面白くも無いけどこんな感じ。

<?php
require_once("twitteroauth.php"); // https://github.com/abraham/twitteroauth

$consumer_key = "XXXXXXXXXXXXXXXX";
$consumer_secret = "XXXXXXXXXXXXXXXX";
$access_token = "XXXXXXXXXXXXXXXX";
$access_token_secret = "XXXXXXXXXXXXXXXX";

$twitter = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);

// Reply
$mentions_xml = $twitter->OAuthRequest("http://api.twitter.com/1/statuses/mentions.xml","GET", array("page" => "1", "count" => 30));
$mentions = simplexml_load_string($mentions_xml);

foreach($mentions->status as $mention)
{
    // なんかこうしないといろいろアレだったので
    $user_id = $mention->user->id;
    $text = mb_convert_kana($mention->text, "a");
    
    // 日本語が含まれていないか確認
    if (strlen($mention->text) == mb_strlen($text, 'utf-8'))
    {
        $user_xml = $twitter->OAuthRequest("http://api.twitter.com/1/users/lookup.xml","GET", array("user_id" => "$user_id"));
        $user = simplexml_load_string($user_xml);
        
        // フォローしていない、されていないなら Block
        if(($mention->user->following != 'true')
             AND ($user->user->following != 'true'))
        {
            $twitter->OAuthRequest("http://api.twitter.com/1/blocks/create.xml","POST", array("user_id" => "$user_id"));
        }
    }
}
?>

これを 1 時間に 1 回まわして自動で弾いている。
手動で 10 件ちかくチマチマ Block 作業をしていたのが
アホとしか思えないほど楽になった。


先週から回し初めて、1 日の終わりに Block の総数を
記録するようにしてみたのだけど、
現状は以下のようになっていた。


1570 超えていた。


こんなにユーザーをブロックしているのは他に池田信夫さんとか
東浩紀さんくらいしかいないのではないだろうか。


Block できる最大数っていくつなんだろう。