HTMLファイルからmicrodataを抽出してJSON形式で出力
Webページにメタデータを埋め込むための規格はいくつかあります(microformats,RDFa,microdata,…)。このエントリーでは,Web上もしくはローカルにあるHTMLファイルからmicrodataを抽出してJSON形式で出力する,ということをローカルマシンでJavaScriptによって行う方法を書きます(なお,ちょっとの改変でTurtle形式での出力も可能になります)。
HTMLソースからmicrodataを抽出するのにjQueryプラグインであるMicrodataJSを使います。そしてローカルでJavaScriptを動かすために,Rhinoとenv.jsを使います。
Rhinoとenv.jsのインストール
はじめにRhinoとenv.jsをインストールします。env.jsのWebページから最新版(1.2)をダウンロードします。env.jsをダウンロードするともれなくRhinoが付いてきます。
無事にダウンロードし,解凍してディレクトリ名をenv-js/に変更したものとします。続いてインストールします。
$ cd env-js $ ant
MicrodataJSのインストール
続いて,MicrodataJSをインストールします。Webページから適当なBranch(ここではv0.1.0とします)をダウンロードします。無事にダウンロードし,解凍してディレクトリ名をmicrodatajs/に変更したものとして次に進みます。なお,jQueryはMicrodataJSのディレクトリに入っているものを使います。
Rhino+env.jsの対話型シェルでJavaScriptを実行
まずは,Rhiono+env.jsの対話型シェルで試してみましょう。とりあえず起動します。
$ ls env-js/ microdatajs/ $ java -jar ./env-js/rhino/js.jar Rhino 1.7 release 2 2009 03 22
はじめに,ライブラリーをロードします。
js> load('env-js/dist/env.rhino.js'); js> load('microdatajs/lib/jquery-1.4.1.min.js'); js> load('microdatajs/lib/json2.js'); js> load('microdatajs/jquery.microdata.js'); js> load('microdatajs/jquery.microdata.json.js');
続いて,適当なHTMLファイルをロードします。とりあえず「はてな開発ブログ」で試しましょう(もちろんローカルのHTMLファイルでもOKです)。
js> window.location = 'http://staff.hatenablog.com/'; http://staff.hatenablog.com/ js> jQuery.ready();
さあ,いよいよmicrodataを取得してJSONに変換しましょう(ここを書き換えればTurtleでも出力できます)。
js> var jsonText = $.microdata.json(); js> console.log(jsonText); { "items": [ { "type": "http://schema.org/Blog", "properties": { "name": [ "はてなブログ開発ブログ" ], "image": [ "http://hatenablog.com/images/top/service-top-logo.png" ] } } ] }
簡単でしたね!(ちょっと遅いけどね!) 以上の内容をファイルに書いて,次のようにコマンドから実行することもできます。
$ java -jar env-js/rhino/js.jar -opt -1 INFILE_JS > OUTFILE_JSON
さいごに
なんでわざわざJavaScript?ってことなのですが,自分が試した次の2つはきちんとメタデータを取得できないことがあってあきらめ,HTMLの解析はjQueryがベストなんじゃないか,ということでここに落ち着きました。今のところうまくいってます。
また,MicrodataJSはLive MicrodataというWebページの裏で使われているので,ここと環境が合わせられる,というメリットもあります。