に挑戦してみた。
xpcshellでHTMLパース - hogehogeの続きともいえるが、HTMLパースの方法を変えている。前回はnsIXSLTProcessorから作ったが、今回はHTMLDocument の動的な作成: Days on the Moonを使用してHTMLDocumentを作成している。
実行すると、ajax.jsがこのURLのHTMLを取得して擬似windowを生成しその中にjquery-1.3.2.jsと第二引数のファイルを読み込む。という仕組み。
上記2つのファイルを同ディレクトリに置いて、さらにjquery-1.3.2.jsを置く。そして、jquery-1.3.2.jsを少し編集して、先頭部分にあるwindow = thisをコメントアウトしておく。
user.js
var res = []; $("h3.answer-title .answer-time").each(function(i, elm){ res.push($(elm).text()); }); print(res.join("\n"));
というファイルをつくり、
xpcshell ajax.js user.js http://q.hatena.ne.jp/1259814347
と実行すると、xpcshellが引数にuser.jsとURLを設定してajax.jsを実行してくれる。
結果は以下の通り。
[loading 'xpcshell.js'...] ========================================== URL: http://q.hatena.ne.jp/1259814347 2009-12-03 13:53:52 2009-12-03 14:12:39 2009-12-03 15:50:02 2009-12-03 16:05:26 2009-12-03 13:53:52 2009-12-03 14:12:39 2009-12-03 15:50:02 2009-12-03 16:05:26
ローカルファイルへ書き込みも行える
user.js
var res = []; $("h3.answer-title .answer-time").each(function(i, elm){ res.push($(elm).text()); }); var str = res.join("\n"); dump(BString(str, "Shift_JIS") + "\n"); var file = io.File("./log.txt"); io.writeFile(file, util.fromUTF8Octets(str) + "\n")
ローカルファイルへ書き込んで、さらにFirefoxで開く
xpcshell ajax.js user.js http://b.hatena.ne.jp/teramako/
user.js
let html = <html>
<head>
<meta http-quiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>{document.title}</title>
</head>
<body>
<h1>{document.title}</h1>
<ul>
</ul>;
</body>
</html>;
$("h3.entry").each(function(i, elm){
let a = $(elm).children("a:first");
let [title, url] = [a.text(), a.attr("href")];
html.body.ul.* += <li><a href={url}>{title}</a></li>;
});
let file = io.File("test.html");
let res = io.writeFile(file, html.toXMLString(), ">", 0644, "UTF-8");
if (res){
let firefox = io.File("/usr/bin/firefox");
let p = new Process(firefox);
let args = [file.path];
p.run(false, args, args.length);
}
a.hrefで絶対URLとして取得できるが、そのままになる。var str = "あいうえお"とした場合、Unicodeとして扱われていないため、Shift_JIS環境ならstr.lengthは10、UTF-8環境なら15となってしまう。
dump(BString(str, "Shift_JIS") + "\n") な感じ。xpcshel ...とするとjsファイルを実行しようとしてしまう。xpcshell.exe ...とすればOKMozilla系アプリを自分ビルドすると作られるらしいが、もっと簡単な方法を
xulrunnerをインストールする。現時点だと、xulrunner-1.9.1.5。
僕の環境だと、ライブラリへのリンクが不完全だったので
cd /usr/lib sudo ln -s xulrunner-1.9.1.5/libxpcom.so sudo ln -s xulrunner-1.9.1.5/libxul.so sudo ln -s xulrunner-1.9.1.5/libmozjs.so cd /usr/local/bin sudo ln -s /usr/lib/xulrunner-1.9.1.5/xpcshell
をした。
から、xulrunnerを入手。(1.9.1以上が良いかな)
そして、適当なところに展開。僕の場合はさらにPATHを通している。