スパムコメントを一掃する

スパムコメントを一括して消すツールを作った。
今まで、タブとスペースを繰り返し打つことで消していたが、それもいい加減面倒になってきたので、自動でやれるようにした。数百とか手動で消すレベルではない。はてなにスパムコメントは受付けない機能があるが、確かに一掃されるが、これだとスパムでないコメントも受付けないという可能性を否定できない。
ほぼ自動で行うのだが、そうでないところもある。IEを使えば簡単だが、諸事情あってここにはFirefoxでログインしているので、簡単にはできない。しかし、消すべきコメントの数くらいはログインしていなくてもIEで簡単に分かる。分かったところで、Firefoxを起動し、キーを送る。いっぺんにキーを送っているが、本当はもう少し時間をおきながらキーを送ったほうがいいのかもしれない(そうでもないかもしれない)。
使うのに気をつけなければいけないのは、Firefoxが立ち上がって、最初のコメントにチェックを入れる。そして、ENTERキーを押す。ああ、だからWSHはcscriptで実行しなければならない。この手間は省けない。IEならこんなことをする必要はないのだが。それとも、WScript.Echoを使うか。いずれにしても、最初だけは自分でチェックを入れなければならない。最後の消すところは、自分でボタンを押す。事故が起きないように。


var user = "inamori";
var date = "20080508"; // この日のコメントを全て消す
var title = "桃の天然水"; // このタイトルのウィンドウをアクティブにする

var num_comments = get_num_comments(date);
//WScript.Echo(num_comments);
open_edit(date);
send_keys(num_comments);

function get_num_comments(date) {
var IE = WScript.CreateObject("InternetExplorer.Application");
IE.GoHome();
IE.Visible = true;
var url = "http://d.hatena.ne.jp/" + user + "/" + date;
IE.Navigate(url);
WScript.Sleep(5000);
var document = IE.Document;
var spans = document.all.tags("span");
var n = 0;
for(var i = 0; i < spans.length; i++) {
if(spans[i].className == "commentator")
n++;
}
IE.Quit();
return n;
}

function open_edit(date) {
var url = "http://d.hatena.ne.jp/" + user + "/edit?date=" + date + "#c";
var WShell = WScript.CreateObject("WScript.Shell");
WShell.Run("firefox " + url);
var dummy = WScript.StdIn.ReadLine();
}

function send_keys(n) {
var WShell = WScript.CreateObject("WScript.Shell");
WShell.AppActivate(title);
WScript.Sleep(2000);
for(var i = 0; i < n - 1; i++) {
WShell.Sendkeys("{TAB} ");
}
}