OpenRefineを使って他のサイトからデータを取得する

Web APIを使えば他のサイトからデータを取得できるということは理解していても,実際にどうプログラミングすればよいのかわからず,自分でAPIを活用するというところまではできていませんでした。

そんなとき,たまたまOpenRefine というデータ分析・整形ソフトの存在を知って,わりと簡単にデータを取得することができたので,備忘のため記録しておきたいと思います。

試しに今回はNDLサーチのAPIを使用してNDLBibIDからJPNOを取得するということをしてみました。実際にデータを取得できたときは嬉しかったです。

1. OpenRefine をインストール

OpenRefine
http://openrefine.org/


日本語の解説動画もあります。

http://www.youtube.com/watch?v=ROW-ZNkk3E8


http://www.youtube.com/watch?v=wv4sIY6YSPk

作業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 のところはもっと綺麗になるのではないだろうか。