Europeana APIでIIIF manifestのURIを取得

 いよいよジャパンサーチのベータ版が公開され、日本でも統合検索が一層本格化しそうな流れになってきて素晴らしいことです。

 ところで、諸般の事情により、EuropeanaからIIIF manifest URIを取得する必要が生じたので、色々試してみました。一応、やりたいことはできるようになりましたが、しかし、「答え」や「やり方」をお知らせするほどきちんと理解できていないので、「どんなことを試みたか」を中心に、ちょっとご紹介して、そこから先はみなさまに取り組んでいただくという方向にしたいと思います。

 

 まず、メタデータをがばっと取りたいなら、本来は、OAI-PHMで一通り取得するのが筋のような気がします。とはいえ、58,000,000件のメタデータをダウンロードするのはちょっと大変そうですし、おそらく、こちらが必要としているデータはそのうちのごく一部のはずなので、とりあえずEuropeana Search APIの方で試してみることにしました。この種のAPIは、ローカルにダウンロードするというよりはWebサイト同士で動的にデータをやりとりすることが主目的ですので、ローカルダウンロードにはちょっと向いてない面もありますが、むしろ後々そういう使い方もしたいので、とりあえずSearch APIを試してみます。

 

 この種のものはWeb API等と呼ばれていて、コンピュータプログラムを使ってばんばん検索をかけることができるようになっています。コンピュータプログラムを使った検索では、1秒間に10回などといった途方もないアクセスを延々と続けることもできてしまうので、そういったアクセスを対象とするWeb APIは、大量アクセスに耐えられるようにサーバをかなり頑強に作っておくと同時に、あまりに目に余る大量アクセスが行われる場合には、ちょっとアクセスを遠慮していただくといった措置も必要になる場合があります。そこで、「APIキー」などと呼ばれるトークンのようなものをAPI利用者(≒プログラム作成者)に発行することでうっすらと管理することが多いようです。これが無料だったり有料だったりするわけですが、Europeanaの場合は、もちろん無料です。で、こちらから取得できるようです。

 APIキーを取得したら、いよいよ、ほしいデータをさくさく自動的に取得できるはずです。さて、IIIF Manifestの取得方法は…と思ってAPIの解説記事を見てみますが、どうもよくわかりません。ほしいのは、それを行うためのそのものずばりのやり方なのですが、そういう情報は公式ドキュメントではなかなか提供されないような感じです。そこで、とりあえずググってみるのですが、そうすると良い案配にGithubのissueが見つかりました。これによると、 q=sv_dcterms_conformsTo%3A*iiif* というクエリを投げると IIIF対応コンテンツをごそっと検索できるようなのですが、ヒット件数は 2,505,662 results となりました。フランス国立図書館のgallicaがほぼIIIF対応しているので、その数が 1,536,506件ということで圧倒的ですが、Europeana Newspapersというプロジェクト の一環で、403,549 件の新聞記事がIIIF対応で公開され、これらはOCRによるフルテキストデータもついているようで、こちらで検索もできるようです。

 さて、これでとりあえず検索のためのURLはわかりました。APIだと、以下のようになります。(以下のURLはクリックしただけでは動作しません。registrationページからAPI Keyを取得してそれを追記する必要があります)

https://www.europeana.eu/api/v2/search.json?query=sv_dcterms_conformsTo%3A%2Aiiif%2A&rows=10&wskey=ここにAPI keyを

ここからさらに、絞り込みをかけようと思ったら、たとえば以下のようにするとできるようです。(タイトルに「北斎」が含まれるもの、という絞り込みをしています)

https://www.europeana.eu/api/v2/search.json?query=sv_dcterms_conformsTo%3A%2Aiiif%2A&rows=10&qf=title%3A%2A%E5%8C%97%E6%96%8E%2A&wskey=ここに自分のAPI Key を

 

さて、このようにして、IIIF 対応しているコンテンツをAPIで検索できるようになりましたが、これだけではIIIF Manifest URIを取得するにはちょっと足りません。検索結果から、各アイテムのメタデータを取得することで入手できるようになります。

 各アイテムのメタデータの取得に際しては、各アイテムには「id」がついていますので、そのidをrecord APIに埋め込んで問い合わせを行います。たとえば、先ほどの北斎の例では、ヒットした一つ目のアイテムのid 「/9200518/ark__12148_btv1b8304309t」ですので、これを使って以下のようなURLを作成します。

https://www.europeana.eu/api/v2/record/9200518/ark__12148_btv1b8304309t.json?wskey=ここに自分のAPI Keyを

そうすると、dctermsIsReferencedBy というキーにIIIF Manifest URIが入っていることが多いようです。ただし、ここに IIIF Image APIのベースURIが入っている場合もあるので、処理に際しては注意が必要です。

 

それから、APIで取得できるのは1000件目までなのですが、gallicaがヒットしすぎて1000件を超えてしまい、gallica以外のコンテンツを探せないという事態が結構生じます。そこで、gallicaを除外する設定ができるとよいのですが、とりあえず以下のパラメータをSearch API向けのURLに追加すると除外できるようです。

&qf=-PROVIDER%3ABiblioth%C3%A8que%2Anationale%2Ade%2AFrance

 

 というわけで、あまり腕がなまってもいけないので、時々は素振りでもしておかなければと、 これをやや簡単にできるようにするためにPython3で以下のスクリプトを作成しました。

$ python3 europeana_mani_get.py 自分のAPI_Key 検索語

という風にすると、検索語.txtというファイルが生成され、dctermsIsReferencedByに入っている値(IIIF Manifest URIかIIIF Image APIのBase URI)が書き込まれるようになっています。gallicaを除外したいときは

$ python3 europeana_mani_get.py 自分のAPI_Key 検索語 exga

という風にしていただくと除外できます。

github.com

 

それから、この場合はSparql を使うとうまくいくのではないかと思って色々試してみたのですが、どうもうまくIIIF Manifest URIを取り出すことができませんでした。もしうまくいった人がおられましたらご教示いただけますと大変うれしいです。

 

この種の巨大統合検索としてはDPLAもありますので、いずれあちらもやらねばと思っておりますが、いずれにしましても、こういう感じでデータを取り出して、ジャパンサーチと良い案配につなげて便利なサービスを提供できるようになると、あるいは、そういうサービスを色んな人がちょこちょこ作れるようになるといいなあと思っております。