> >

 |  tomori_icon  | 
 |  category_icon  | 

2009年07月30日 (木)

CategoryImagecurlとcrontabで定期的にTwitterのスパマーをブロックする。

最近、メンテナンスで何か変わったのか、Twitterのスパムユーザーがやたらと勝手に登録してきませんか? うちは以前からfollower(フォローされている)の方にはちょこちょこ来ていたのですが、今週に入ってからfollowing(フォローしている)にやたらと紛れ込むようになりました。本来、ユーザー側でしか登録出来ない筈のものに潜り込んできてるんだから、かなり悪質です。

当初は手作業でブロックしていたのですが、どういう訳か同じユーザーが何度も登録してくる。Twitter側で対処してくれればそれもなくなるんでしょうけど、鬱陶しい事この上ないので何気なく

t0mori 誰か定期的にユーザー名でブロックするようなスクリプトでも書いてくれないものか(他力本願)。て言うか登録出来ちゃうTwitter側の穴の方が問題か。

とつぶやいたら

OKAMURA @t0mori そういうスクリプトは簡単にできるにょ

と神降臨w 早速、iChatに舞台を移し、リモコンして頂きつつ設定したのをφ(..)メモメモ。

[7月30日追記]どうもスパマーじゃなく、Twitter側のトラブルらしい説が有力。

[8月4日追記]ぼちぼち混乱も収まったようなので、下記設定はコメントアウトしました。


召喚魔法を唱えたつもりはなかったのですが(ホントです)、助かりました。

OKAMURAさんのアイディアは、curlコマンドでTwitterにユーザーブロックを送って、それをcronにて定期的に実行しようと言うもの。早速以下を設定した。

curlでTwitterにユーザーブロックを送る

以下のコマンドラインを送ります。これをそのままTerminalから送って、目的のユーザーが消えていたら成功。(以下{}は入力不要)

curl -u {自分のTwitterアカウント}:{そのパスワード} --data 'id={ブロックしたいアカウント}' http://twitter.com/blocks/create/{ブロックしたいアカウント}.json

これがうまく行ったら、定期実行する為にcrontabに登録する手順へ。

crontabに登録する

cronを定期的に実行する為の設定ファイル、crontab。そのユーザー用ファイル、"/var/at/tabs/{ユーザー名}"(Mac OS X 10.5.7の場合。reference本によっては"/var/cron/tabs/{ユーザー名}")にコマンドラインを書き込む。Terminalから

$ crontab -e

で、viによる編集モードに入る。viに関しては割愛。以下、curlのコマンドライン。分 時 日 曜日 コマンドラインと言う形で記述。

1 * * * * curl --silent -u {自分のTwitterアカウント}:{そのパスワード} --data 'id={ブロックしたいアカウント}' http://twitter.com/blocks/create/{ブロックしたいアカウント}.json > /dev/null

ブロックしたいアカウントを増やす場合は、行頭の数字を'2 * * * *'などとして、実行時間をずらす。10分置きとかならこんな感じ。

*/10 * * * * curl --silent -u {自分のTwitterアカウント}:{そのパスワード} --data 'id={ブロックしたいアカウント}' http://twitter.com/blocks/create/{ブロックしたいアカウント}.json > /dev/null

また、'--silent'と'> /dev/null'はcurlからの、OS X内部でやりとりされる通知メール(mailコマンドで参照出来る)を抑制する為のもの。

まあ、ブロックしたいユーザーがいようがいまいが送ってしまうので、スマートではないかも知れないです。適当に見計らって、不用そうなやつは#して無効にするのが良いんでしょうね。

こうして……

神様の教えの通りに戦ったt0moriは、平和なTLを築きましたとさ。めでたしめでたし。

image

【おまけの備忘録】curlに~/.netrcを参照させる

当初はホームディレクトリに'.netrc'なるファイルを作り、そこに自分のTwitterアカウント、パスワードを書いてcurlから参照させる予定でしたが、どういう訳かうちの環境じゃうまく行かず、頓挫。いずれ使えるかも知れない時のためにそれもメモ。

まずは"~/.netrc"を作る。

touch ~/.netrc; chmod 0600 ~/.netrc

次に書き込む内容。(スペース区切り)

machine twitter.com login {自分のTwiterアカウント} {そのパスワード}

curlから参照させる場合のコマンドライン。

curl -n --data 'id={ブロックしたいアカウント}' http://twitter.com/blocks/create/{ブロックしたいアカウント}.json

Posted by at 13:30


▼1年前はこんなこと書いてました...▼