国立国会図書館サーチAPIを利用したKindleの蔵書整理

 コンピュータ  1321

日本十進分類法(NDC)でKindleのコレクションを整理するための補助ツールを作った。python3で動作確認。

import xml.etree.ElementTree
import urllib.parse
import requests
import csv
import re

namespaces = {'openSearch':'http://a9.com/-/spec/opensearchrss/1.0/',
                  'dc':'http://purl.org/dc/elements/1.1/',
                  'rdf':'http://www.w3.org/1999/02/22-rdf-syntax-ns#'}

def searchNDC(title,author):

    # 検索に不都合な要素を削除
    title = re.sub('【.+?】', ' ', title)
    title = re.sub('(.+?)', ' ', title)
    title = re.sub('〈.+?〉', ' ', title)
    title = re.sub('\(.+?\)', ' ', title)

    title = title.replace(' ', ' ')
    author = author.replace(':', ' ')

    url = "https://iss.ndl.go.jp/api/opensearch?cnt=5&title=" + urllib.parse.quote(title) + "&creator=" + urllib.parse.quote(author) +  "&dpid=iss-ndl-opac"

    res = requests.get(url)
    root = xml.etree.ElementTree.fromstring(res.text)

    totalResults = root.findall('.//openSearch:totalResults',namespaces) 
    for title_element in totalResults:
            print("Results=" + title_element.text + " Search=" + title + " " + author)
        
    for item in root.iter('item'):
        
        ary=[]
        for name in item.iter('title'):
            ary.append(name.text)
        
        for name in item.iter('author'):
            ary.append(name.text)

        title_elements = item.findall('.//dc:subject',namespaces) 
        for title_element in title_elements:
            ary.append(title_element.text)

        print(ary)

csv_file = open("./download.csv", "r", encoding="utf_8", errors="", newline="" )
#csv 読み込み
f = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)

# Main
for i,row in enumerate(f):

    print("Row:" + str(i))
    searchNDC(row[1],row[2])

動作確認

使用するためには、別途Kindleの蔵書一覧を抽出したCSVファイルが必要となる。抽出方法については、以前の記事で紹介している。

抽出したCSVの一部(download.csv)
python_serchNDCの実行結果

タイトルに「合本版」や「新装版」などと入っている本については検索結果が0となっている。これらを取り除く処理を入れると検索できるのだが、バリエーションが多いので、とりあえず必要と思われる処理だけ入れた。

蔵書整理した結果。(コレクションへの追加は手動)

問題点

・検索結果が複数ある場合、どのNDCを使うか個別に確認する必要がある。
・Kindleのコレクションに追加する作業は手作業。(かなり面倒くさい)
→ APIはなさそうなので、画像認識を利用して自動化する予定。

参考HP

東京都立図書館 - NDCって何?
https://www.library.metro.tokyo.lg.jp/support_school/research/for_study/report_guide/tool/ndc/

国立国会図書館サーチ - APIのご利用について
https://iss.ndl.go.jp/information/api/

国立国会図書館サーチ - インタフェース仕様書(第2.1版)
https://iss.ndl.go.jp/information/wp-content/uploads/2021/03/ndlsearch_api_20210329_jp.pdf



関連記事