🔍Pythonで作る図書検索ツール|CiNii APIで大学図書館の蔵書をExcel化する実践レシピ

目次
  1. 🔍 “調べたいキーワードを入れるだけ”で書籍リストが完成する世界
  2. 🧭 完成までの流れを俯瞰する
  3. ⌨️ ステップ1:input()で対話形式のスクリプトに
  4. 🌐 ステップ2:CiNii Books APIで蔵書を検索
  5. 📦 ステップ3:必要なデータを取り出す
  6. 📊 ステップ4:pandasで整形してExcel出力
  7. 🛒 学習を加速させる相棒アイテム
  8. ❓ よくある質問(FAQ)
  9. 🌟 まとめ:APIと自動化の組み合わせは“魔法の生産性”

🔍 “調べたいキーワードを入れるだけ”で書籍リストが完成する世界

「気になるテーマの書籍を一覧でほしい」「研究テーマに合う本をサクッと洗い出したい」——そんな願いを叶えてくれるのがPythonとWeb APIの組み合わせです。コマンドラインから検索ワードを入力するだけで、大学図書館の蔵書情報がExcelファイルにまとまって出力される。そんな“自分専用の検索ツール”が、わずか数十行のコードで作れてしまいます✨

使うのは、登録不要・無料で叩けるCiNii Books API。大学図書館の蔵書を横断検索できる定番サービスで、レポート・論文・読書ノートづくりの強力な味方になってくれます。Pythonのrequestsでデータを取って、pandasでDataFrameに整形して、to_excel()で書き出す——この一連の流れを身につければ、他のWeb APIにもそのまま応用できる“横展開できるスキル”が手に入ります。

🧭 完成までの流れを俯瞰する

処理を分解すると、ゴールまでの道筋がスッと見えてきます。

  • ⌨️ ステップ1input()でキーボードから検索キーワードを受け取る
  • 🌐 ステップ2:CiNii Books APIにリクエストを投げてJSONで結果を取得
  • 📊 ステップ3:pandasのDataFrameに変換して必要な列だけ抽出
  • 📝 ステップ4:検索ワードをファイル名にしてExcelに書き出す

⌨️ ステップ1:input()で対話形式のスクリプトに

Pythonの組み込み関数input()を使うと、ターミナルやコマンドプロンプトから入力された文字列をそのまま変数に格納できます。これだけで“対話型ツール”の基本骨格が完成です。

def main():
    word = input("検索キーワード:")
    print(word)

if __name__ == "__main__":
    main()

実行すると「検索キーワード:」と表示されてカーソルが点滅。好きな単語を入れてEnterを押せば、その文字列がwordに代入されます。何度でも違うキーワードで再実行できる柔軟さが魅力です。

🌐 ステップ2:CiNii Books APIで蔵書を検索

🔗 リクエストURLを組み立てる

CiNii Books APIのドキュメントには、ベースURLとクエリパラメータの一覧が載っています。今回はJSONで結果を受け取りたいのでformat=json、フリーワード検索なのでq=検索ワードを指定します。

import os
import requests
import pprint

def main():
    word = input("検索キーワード:")
    url = (
        "https://ci.nii.ac.jp/books/opensearch/search"
        f"?format=json&q={word}"
    )
    res = requests.get(url)
    res.raise_for_status()
    pprint.pprint(res.json())

if __name__ == "__main__":
    main()

🛡️ raise_for_status()で“静かな失敗”を防ぐ

requests.get()が失敗してもPythonは勝手に止まってくれません。raise_for_status()を呼んでおけば、HTTPエラー(404・500など)の際に例外を発生させ、後続の処理が暴走するのを防げます。Web API活用の鉄則です。

🎨 pprintで“見やすく”表示する

受け取ったJSONをそのままprint()するとぐちゃっとした1行になりがち。pprint.pprint()を使えば、辞書やリストがインデント付きで読みやすく整形されます。デバッグ作業の時短アイテム✨

📦 ステップ3:必要なデータを取り出す

🗝️ ネストされたJSONから書籍情報へアクセス

CiNiiのレスポンスは入れ子構造になっていて、書籍情報は@graph[0]["items"]の中にリストで入っています。リストの要素数は常に1つなので、[0]で辞書だけを取り出すのがコツです。

graph = res.json()["@graph"][0]

if "items" not in graph.keys():
    print("該当する書籍は見つかりません")
    return

items = graph["items"]

❓ 「ヒット0件」と「APIエラー」は別物として扱う

該当書籍が0件のケースは“不具合”ではなく“正常な検索結果”。例外を投げずにprint()returnでやさしく終わらせるのが親切設計です。一方、URLミスやサーバー障害はraise_for_status()でしっかり例外化——この切り分けが堅牢なスクリプトの第一歩です。

📊 ステップ4:pandasで整形してExcel出力

📐 表示の最大幅を広げる

pandasのDataFrameは長い文字列を省略表示するため、CiNiiのデータをそのまま見ると中身が読めません。set_option()で表示幅を広げてあげれば、デバッグがぐっとはかどります。

import pandas as pd
pd.set_option("display.max_colwidth", 20)

🪄 列の抽出・リネーム・出力をメソッドチェーンで一気に

「列を絞る → 名前を日本語に変える → Excelに書き出す」を1つの式で繋げて書けるのがメソッドチェーン。中間変数を作らずに済むので、コードがスッキリします。

df = pd.DataFrame(graph["items"])

(df
    .rename(columns={
        "title": "タイトル",
        "dc:creator": "著者名",
        "dc:date": "出版年",
    })
    .loc[:, ["タイトル", "著者名", "出版年"]]
    .to_excel(f"{word}.xlsx"))

全体を丸括弧()で囲むのがポイント。これでメソッドごとに改行しても“1つの式”として扱われ、可読性が一気に向上します。

🆕 最新書籍100件を取得するクエリ拡張

デフォルトでは20件しか取得できないうえ、出版年順でもありません。クエリパラメータにsortorder=4(出版年降順)とcount=100を追加すれば、最新の書籍100件まで一気に取得できます。

url = (
    "https://ci.nii.ac.jp/books/opensearch/search"
    f"?format=json&q={word}"
    "&sortorder=4&count=100"
)

💡 同じ仕組みは「Qiitaの記事検索」「楽天ブックスの書籍情報」「Open Weather Mapの天気情報」など、JSONを返すあらゆるWeb APIにそのまま応用できます。1つ作れば横展開がきくのが、API活用スキルの最大の武器です。

🛒 学習を加速させる相棒アイテム

Web API・JSON操作・pandasと、複数のスキルが交差するこのテーマ。手元の環境と教材を整えるだけで、学習スピードは段違いに伸びます。実際に手を動かす時間を増やせるアイテムを厳選しました💪

📕 まずはこの一冊:『Python実践入門』

標準ライブラリ・例外処理・パッケージ管理など“Pythonらしい書き方”を体系立てて解説。今回作ったスクリプトを「もっと美しく」リファクタリングするヒントが詰まっています。

📗 データ加工の決定版:『Pythonによるデータ分析入門』

pandasのDataFrame操作を、実データを使ったハンズオンで丁寧に解説。locrenameto_excelなどの“使えるテクニック”が一気に身につきます。

📘 Web APIを使いこなす:『Web API: The Good Parts』

APIの設計・利用・エラーハンドリングまで網羅した名著。CiNiiのような外部APIをもっと深く使いこなしたい人に必携の一冊です。

オライリージャパン
¥2,420(2026/05/15 12:39時点)

🖥️ 開発効率が一気に上がるモバイルモニター

左にコード、右にAPIドキュメント&生成されたExcelを並べると、確認・修正のサイクルが劇的に速くなります。USB-C一本で接続できるモバイルモニターは、机が狭くても気軽に2画面化できる頼れる相棒です。

⌨️ 長時間タイピングを支える静音メカニカルキーボード

対話型ツールはトライ&エラーの連続。指への負担を減らす静音赤軸のメカニカルキーボードがあれば、集中時間が伸びてバグ解決のスピードもグッと上がります。

❓ よくある質問(FAQ)

🤔 Q1. CiNii Books APIは無料で使えますか?

はい、登録不要・無料で利用できます。ただし大量リクエストや商用利用については公式ガイドラインの確認をおすすめします。学習や個人利用の範囲であれば、安心して試せる気軽さが魅力です。

🙋 Q2. 検索結果が0件のときに例外を投げないのはなぜ?

「ヒット0件」は不具合ではなく“正常な検索結果”だからです。一方、URLミスやサーバーダウンによる失敗は不具合なのでraise_for_status()で例外化。「ユーザーが想定外の状態」と「システムが想定外の状態」を切り分ける設計が、堅牢なスクリプトの基本です。

🧐 Q3. メソッドチェーンと変数代入、どちらで書くべき?

結果は同じなのでお好みでOKですが、メソッドチェーンには「中間変数を作らなくていい」「変数名を考える手間が省ける」というメリットがあります。慣れないうちは変数代入で書いて、慣れたらチェーン化していく流れがおすすめです。

🛡️ Q4. 同じ仕組みで他のWeb APIも扱えますか?

はい、requests.get()+JSON解析+pandas整形+Excel出力という流れは、ほぼ全てのWeb APIに共通します。Qiita・楽天・OpenWeatherMap・Alpha Vantageなど、興味のあるテーマで同じ手順を試すと、知識が一気に“使えるスキル”として定着します。

📚 Q5. 学習を続けるならどんな順番で進めるのがいい?

「input()で対話化 → requestsでAPI操作 → JSON操作 → pandasで整形 → Excel出力 → 例外処理&ログ」の順がおすすめ。1ステップずつ自分の興味あるテーマで再現してみると、記事や書籍の知識が自分の手に馴染んでいくのを実感できます。

🌟 まとめ:APIと自動化の組み合わせは“魔法の生産性”

Web APIで取ったデータをpandasで整え、Excelとして書き出す——この一連のフローを身につけてしまえば、検索・調査・レポート作成の時間が劇的に短くなります💼 今回紹介したCiNii BooksのスクリプトはたったA4半分ほどのコード量ですが、応用範囲はとてつもなく広いんです。

まずは手元でinput("検索キーワード:")から動かしてみて、自分の興味あるテーマでExcelを生成する成功体験を積んでみてください🐣 そこから書籍やデバイス環境への投資を組み合わせれば、学習スピードはさらに加速します。今日紹介したアイテムが、あなたの“APIを操るチカラ”を磨く頼れる相棒になりますように!

あざらし

はじめまして、あざらしです。 フリーターからエンジニア会社へ就職し、 現在はフリーランスのシステムエンジニアとして働いています。 本業のエンジニア業のかたわら、 ✍️ ブログ運営 と「収入の柱を増やす挑戦」を少しずつ続けています。 フリーター時代から比べると、 段階的に収入が増えていくのを実感できるのが素直にうれしい今日この頃。 このブログでは、日々の気づき・体験談 IT・ガジェット・ゲーム系の話 「調べて分かったこと」を噛み砕いた解説 などを中心に、ジャンルに縛られない雑記ブログとして発信しています。 「自分と同じように悩んでいる人のヒントになればいいな」 そんな気持ちで更新中です。 👉 プロフィール詳細は、名前「あざらし」をクリックしてください