とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

googleのphantomjsを試してみた

http://code.google.com/p/phantomjs/
「PhantomJS is a minimalistic, headless, WebKit-based, JavaScript-driven tool.」だそうな。
Windowsコマンドライン上からHTML中の特定要素を抜き出すことができるっぽい。

簡単な使い方

こちらに載っている「マクドナルドのメニューを表示するサンプル」を、だいぶん参考にさせて頂きました。ありがとうございます。
http://mattn.kaoriya.net/software/lang/c/20110203044300.html
ただ自分の環境だと何故かうまく動かないので以下のように改造しています。(javascriptをガッツリ触ったのは今日が初めてなもんで・・・色々分からない)

//mac_jp.js
if (phantom.state.length === 0) {
    phantom.state = 'mcdonalds';
    phantom.open('http://www.mcdonalds.co.jp/menu/regular/index.html');
} else {
    var list = document.querySelectorAll('ul.food-set>li img');
    for(var i=0;i<list.length ; ++i){
        var tmp = list[i].getAttribute('alt');
        console.log(tmp);
    }
    phantom.exit();
}

コマンドラインから起動すると、

phantomjs.exe mac_jp.js

無事メニュー一覧を取得できました。

文字化け

文字コードEUC-JPだと文字化けするようです、UTF-8はOK、Shift-Jisは未検証。
週間ディーバステーションの更新履歴がEUC-JPで書かれていて気がつきました。
http://miku.sega.jp/info/?diary_list
phantomjsに文字コードの設定くらいありそうなんだが・・・

サンプル

SEGA「PSP2インフィニティ スペシャル体験版」運営サイトの更新履歴をダンプ表示してみた。

//psp2i.js
if (phantom.state.length === 0) {
    phantom.state = 'psp2i';
    phantom.open('http://www.psp2infinity.jp/pc/trial/');
} else {
    var list = document.querySelectorAll('div.conts');
    for(var i=0;i<list.length ; ++i){
        console.log(list[i].innerText);
    }
    phantom.exit();
}

実行結果がこちら。

google suggestの解析をしてみる

google検索すると出てくる「もしかして」のアレです。

'mikumiku'で試してみた。

//google_suggest.js
if (phantom.state.length === 0) {
    phantom.state = 'suggest';
    phantom.open(encodeURI('http://google.com/complete/search?output=toolbar&q=mikumiku'));
} else {
    var suggestion = document.querySelectorAll('toplevel > CompleteSuggestion > suggestion');
    for (var i = 0; i < suggestion.length; ++i) {
        console.log(suggestion[i].getAttribute('data'));
    }
    phantom.exit();
}

実行結果

秀丸エディタ正規表現で抜き出す必要がないので手間が省ける、これは便利だ!!


と思いきや、
キーワードに日本語を使うと「suggestion.length==0」となってしまう。

phantom.open('http://google.com/complete/search?output=toolbar&q=%e3%81%ae%e3%81%b3%e3%81%9f');
phantom.open(encodeURI('http://google.com/complete/search?output=toolbar&q=のびた'));

encodeURIを付けたり外したりしてみたがうまくいかず・・・
javascript初心者にこれ以上はきつい、また後日。