NDL Authorities APIをPythonで呼び出す。

More than 1 year has passed since last update.


はじめに


NDL Authoritiesとは

国立国会図書館(NDL)の運営する典拠データの検索サイトです。

https://id.ndl.go.jp/auth/ndla


典拠データ

典拠データとは以下の通りです。


国立国会図書館では、利用者が求める資料を探し出せるように、タイトル、著者等を記録した書誌データを作成しています。書誌データには、著者名や件名として記録する人物、団体、テーマ等に複数の表記方法や同義語がある場合は一つにまとめ、同じ名称で異なるものを指す場合はそれぞれ区別して検索ができるように、「標目」を付与します。

これらの「標目」を統制するために、標目の別表記や同義語、標目として選んだ根拠を示す資料等の情報をまとめて記録したのが「典拠データ」です。

https://id.ndl.go.jp/information/about/



典拠データの利便性の例

*人名で検索した場合、時代によって呼び名が異なったり、言語によって綴りが違う場合も、同一のものとして扱うことができます

*特定のキーワードに対する上位語、下位語、同義語、関連語と、図書館の分類(NDC)を調べることができます。

 これによって、そのキーワードに関係する語句を効率よく拾い出すことができ、NDCからその分類の本をまとめて検索することができます。


WebAPI

国会図書館はNDL Authoritiesの検索WEB APIの仕様を公開しています。

http://id.ndl.go.jp/information/sparql/

これを元に、Python でAPIを呼び出すサンプルプログラムを作成しました。


SPARQLについて

WEBAPI呼び出し後のデータベースへの実質的なアクセスは、SPARQLのクエリが行っています。

その仕様についてはこちらを確認して下さい。

http://id.ndl.go.jp/information/sparql/

PythonはあくまでAPIの呼び出しまでを行うということです。


プログラム


Git Hub

アップロードしてあります。

https://github.com/AvocadoWasabi/Call-NDLAuthorities-API


要点

SPARQLクエリをパラメータとしてURLエンコードしたものを、

エンドポイントのURLと結合させ、GETします。

今回はJSONで結果を取得しています。

(searchメソッドで一連のメソッドを呼び出しています)


コード

以下はクラス化したコードの一部です。


sample

import requests

import json
import urllib.parse

def main():
end_point = 'http://id.ndl.go.jp/auth/ndla'
keyword = 'インターネット' #means Internet in Japanese.

#make query
#Make SPARQL Query, which searches authority data of the keyword
query = ('PREFIX xl: <http://www.w3.org/2008/05/skos-xl#>'
'PREFIX skos: <http://www.w3.org/2004/02/skos/core#>'
'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>'
'PREFIX rda: <http://RDVocab.info/ElementsGr2/>'
'PREFIX ndl: <http://ndl.go.jp/dcndl/terms/>'
'PREFIX foaf: <http://xmlns.com/foaf/0.1/>'
'SELECT ?uri1 WHERE{'
' ?uri1 rdfs:label "' + keyword + '"'
'}')

#URL encode
parameter = urllib.parse.urlencode({'query' : query, 'output' : 'json'})
#make whole URL
url = end_point + '?' + parameter

result = requests.get(url)
try:
data = json.loads(result.text)
except json.decoder.JSONDecodeError:
#JSONDecodeError happens if query is incorrect
#print API's Error message
print(result.text)

#print result
print(data)

if __name__ == '__main__':
main()



結果

検索した「インターネット」の典拠データについて、

普通件名のアドレスhttp://id.ndl.go.jp/auth/ndlsh/00841024と、

団体名インターネット株式会社http://id.ndl.go.jp/auth/ndlna/001144835

の結果が得られました。

{'head': {'vars': ['uri1']}, 'results': {'bindings': [{'uri1': {'type': 'uri', 'value': 'http://id.ndl.go.jp/auth/ndlsh/00841024'}}, {'uri1': {'type': 'uri', 'value': 'http://id.ndl.go.jp/auth/ndlna/001144835'}}]}}