レファ協APIを用いたマッシュアップについてのメモ

公開して半年以上になるのですが,2010年4月に実装されたレファ協APIを用いて作ってみたものがありますので,若干のメモを留めておこうと思います。

  • 作ったもの

http://pipes.yahoo.com/pipes/レファ協APIを組み合わせて,レファ協に登録された未解決事例のみを抽出したフィードを作成しました。
下記のURLからアクセスできます。
Unsolved Reference Questions and Answers on Collaborative Reference Database
http://pipes.yahoo.com/qkmode/unsolved_qa_on_crd

  • どうやって使うの?

RSSリーダにフィードを登録し未解決事例だけを読んでいく,ことが出来ます。レファ協を利用していると,未解決事例のみを見て行きたい場合があります。このような場合はレファ協が用意したWEBインターフェースから都度詳細検索を行う必要がありましたが,APIを用いて,検索結果をRSSフィードにしておけば,未解決事例だけをRSSリーダで読み進めることができ,とても便利です。私は,google readerRSSリーダとして使っていますので,それに登録しています。また,FireFoxライブブックマークにも登録しています。
RSSリーダに登録するには,上記URLから,「Get as RSS」のリンクを登録してください。Google readerブログパーツとして登録するのも簡単です。

  • どうやって使うの? その2

れふぁったー(@refatter) というツイッターのアカウントがあります。
このアカウントはid:nachumeid:yoshim32 が中の人だったりして,適当にレファ協関係のあれこれをつぶやいて遊んでいるのです。が,それ以外に,Twitterfeed と連携して,このフィードを自動的につぶやいてくれていますので,このアカウントをフォローしてみてください。TLには未解決事例が流れてきます。

  • どうやって作ったかの簡単な覚え書き

Pipes は基本的にはRSS をごにょごにょすることが出来る開発ツールです。複数のRSSフィードを一つのフィードにまとめたり,WEBサイトの更新情報を解析してRSSフィードを持たないサイトのフィードを作成したりすることができます。
レファ協APIと組み合わせ方ですが,概ね下記の流れです。
仕様(http://crd.ndl.go.jp/jp/library/api.html)を見てもらえれば分かるのですが,レファ協APIは,RESTで検索結果を返します。ということは,

  1. 必要な検索を満たすURLを作り,検索結果を得る。
  2. 得られた検索結果のXMLファイルをRSS形式に変換する

という大きく二つの段階を考えます。
ソースを見れば何をしているかは分かると思いますが,まず,「必要な検索を満たすURLを作る」です。
Pipesのモジュールで「URL Builder」を使います。検索用の項目はパラメータを追加していきます。「SOLUTION=1」(未解決である)と,「REG-DATE_from=19000101」(登録日付が「1900年1月1日以降」のもの=すべての登録データを検索対象としたいという意図。この条件は無くてもいいです。)の二つを組み合わせます。

すると「http://crd.ndl.go.jp/refapi/servlet/refapi.RSearchAPI?SOLUTION=1®-DATE_from=19000101」のようなURLが得られます。
第1段階はこれで終わり。あとはRSSに変換します。
検索結果には何件ヒットしたかなどの情報もありますが,RSSには必要ないので,必要な部分を抜き出していきます。この処理は「Fetch」モジュールを用います。検索結果のうちほしいのは「」で囲まれた個々の未解決事例ですので,モジュールで抜き出す部分を「result」と指定します。


これで,必要な部分を抜き出しました。
あとはRSSに変換します。RSSにはフォーマットがいくつかあるのですが,Pipesは2.0で出力してくれる(はず)なので,それにそって作っていきます。
RSSを作るのは「Create RSS」というモジュールです。得られた検索結果をマッピングしていくだけです。

「title=item.QUESTION」は,RSSのタイトルにはレファ協の質問文をあてる,という意味です。好きなような項目をマッピングすれば,好きなようにフィードを作り替えることが出来ます。
「title」,「Description」,「Link」,「PubDate」,「Author」,「GUID」の項目をそれぞれ「質問文」「回答」「事例のURL」「登録日付」「事例提供館」「システムID」というようにマッピングしました。
また,日付の処理ですが,レファ協の検索結果で得られる日付は「YYYYMMDDHHMM」の形式です。RSSの日付はDC準拠の「YYYY-MM-DDTHH:MM GMT」のような形式です(もっと詳細な表現方法もあります)。そこで,前者を後者に変換する処理を一つ加えています。

これをみて分かると思いますが,「Rename」モジュールで「item.REG-DATE」を「dc:date」へ変換し,明示的に日付として取り扱えるようにします。次に「Regex」モジュールで,日付を変換します。これは正規表現を用いて,置き換えを行うものですが,単純に数値を4桁・2桁・2桁・2桁…とグルーピングして,並べ替えて,必要な文字列を付与する,という処理ですので,難しいことはしていません。ここまでで,並べ替えが出来たので,あとはもう一つ「DateFormatter」というモジュールで,整形します。全部のレコードに対して処理を行いたいので,「Loop」モジュールと組み合わせます。この辺は若干プログラミングっぽいかもしれません。

日付の処理が正しいのかよく分かりません。もっとスマートなやり方もありそうですが,これで,未解決事例をPipesを使ってフィードにすることが出来ました。

ということで,レファ協APIを使ったマッシュアップの一例でした。他にも,次のようなものを作りました。

  • Participatory libraries Reference Questions and Answers on Collaborative Reference Database v.2

レファ協の提供館別フィードです。提供館コードを入力すると各図書館ごとのフィードを作成できます。
私のPipes公開ページでいろいろ遊んでいますので参考になれば幸いです。