OpenRefineを使って他のサイトからデータを取得する
Web APIを使えば他のサイトからデータを取得できるということは理解していても,実際にどうプログラミングすればよいのかわからず,自分でAPIを活用するというところまではできていませんでした。
そんなとき,たまたまOpenRefine というデータ分析・整形ソフトの存在を知って,わりと簡単にデータを取得することができたので,備忘のため記録しておきたいと思います。
試しに今回はNDLサーチのAPIを使用してNDLBibIDからJPNOを取得するということをしてみました。実際にデータを取得できたときは嬉しかったです。
1. OpenRefine をインストール
OpenRefine
http://openrefine.org/
日本語の解説動画もあります。
http://www.youtube.com/watch?
http://www.youtube.com/watch?
作業2. NDLBibID のリスト読み込み
失敗すると怖いのとNDLさんに負荷がかかるので下記の5件のIDで試してみました。
- NDLBibID.txt の作成
- 中味はただ単にIDをならべただけのテキストファイルです。
000000721617 000000737950 000000737752 000000433328 000008206906
- OpenRefine を起動
- Open ⇒ 参照 ⇒ NDLBibID.txt ⇒ Next(※Fixed-width field text files を選択して, Parse cell text into numbers, dates のチェックをはずさいないと,頭の0が消えてしまいます…。)
- Creat Project ボタンをクリック
3. NDLサーチの API を使用して NDLBibID から RDF を取得する
- 読み込んだNDLBibIDの列名の▼をクリック
- Edit column ⇒ Add column by fetching URLs
- Expression のボックスに下記の式?をコピペ
"http://iss.ndl.go.jp/books/R100000002-I" + value + "-00.rdf"
- New column name に適当な名前をつける
- Throttle delay を 500 に修正
- OK ボタン
- NDLサーチの API を使用して NDLBibID から RDF を取得
4. RDF から JPNO を抽出
- 取得した RDF 列の▼をクリック ⇒ Edit Cells ⇒ Transform
- 下記の式? をコピペ
if(contains(value, "http:\/\/id.ndl.go.jp\/jpno\/"),substring(value, indexOf(value, "http:\/\/id.ndl.go.jp\/jpno\/")+25, indexOf(value, "http:\/\/id.ndl.go.jp\/jpno\/")+33),"NO JPNO")
- OK
- JPNO があれば表示,なければNO JPNO と表示される
課題
- 一度に何件ぐらい変換できるのか不明…(あまり多いとNDLさんにも負荷がかかるので注意すること)
- 慣れた人ならもっとスマートなスクリプトをかけるような…特に Transform のところはもっと綺麗になるのではないだろうか。