Sat Oct 25 02:04:22 JST 2014

twitter/twurl を使って一括スパム報告

よくわかんないんだけど、 アニメ公式アカウント関連ばっかりフォローすると、 胡散臭いアカウントに大量にフォローされる。

"@{anime title}fan" というIDで何かの宣伝しつつ、 特定の作品の画像を貼るみたいな、 明らかに同じ人たちが作っていて、 "@sarbantfan" なんかを見ると、 怪しいurlを貼るわけでもなく、 怪しい商品の宣伝をするわけもないし。

それはともかく、 はじめは一人ひとりスパム報告してたんだけど、 ちょっと忘れてたらもうweb上でそれをやるには面倒すぎる量になってた。 目方で量ると、フォロワ160人のほとんど半分がスパムだった。

$ twurl accounts
ampeloss
  qnLRwkeo8zFjhIDfgG0F8Q
cympfh
  qnLRwkeo8zFjhIDfgG0F8Q (default)
unddich
  qnLRwkeo8zFjhIDfgG0F8Q

jsonなので, jq も使う。

フォロワの取得 (max 200 at a time)

$ twurl -X GET /1.1/followers/list.json?count=200 | jq -r '.users[].screen_name' > /tmp/ids

スパムしたい方がそうでないより少ないとして、

$ cp /tmp/ids /tmp/ids0
$ vim /tmp/ids
(スパムしたいアカウントの行を消す)
$ diff /tmp/ids0 /tmp/ids | grep '^<' | sed 's/^..//g' > /tmp/list

/tmp/list が最終的に消したい人たち.
漏れがあると嫌なので、スパムの数を数えておいて、 予め、頭の中で引き算しておく。

$ wc -l /tmp/list
81 /tmp/list

これに対して /users/report_spam を叩きたいんだけど、 他同様、使用制限があるらしい。 でも、 https://dev.twitter.com/rest/public/rate-limits には載っていない。 素敵だ。

素敵なことは無視しよう。

$ cat /tmp/list | xargs -i twurl -X POST -d screen_name={} /1.1/users/report_spam.json

すぐに、

{"errors":[{"code":205,"message":"You are over the limit for spam reports."}]}

を返してきた。 ほとんど一度に、このAPIを叩けるのは 65 回らしい。

1 window は 15分らしいので、

$ tail -n `expr 81 - 65` /tmp/list > /tmp/list_rest
$ sleep 15m && cat /tmp/list_rest | xargs -i twurl -X POST -d screen_name={} /1.1/users/report_spam.json

として寝ます。
おやすみなさい。