NOT SO BADなブログ

ぼっちスタートアップが日々がんばっています。

作品の書き出しなども取得できるちょっと便利な青空文庫API「ZORAPI(ゾラピ)」ベータ版を公開しました

Sep 30, 2019

  • つくったもの
  • ブンゴウサーチ
  • 青空文庫

ブンゴウメールゾラサーチなど、青空文庫を活用したサービスを色々作っています。 その関係で青空文庫APIがほしくて眠れない日々が続いていたので、作りました。

「AOZORA」+「API」で「ZORAPI(ゾラピ)」です。

「ゾラサーチ」というのが青空文庫を読了時間で検索できるようにしたサービスで、このAPIはそのデータを誰でも使えるように一般公開したものです。 そのため通常の作品情報に加えて、作品の文字数や書き出し・青空文庫での累計アクセス数などの情報も返してくれるあたりがちょっといい感じかと思います。

例えばメロスだとこんな感じ:https://api.bungomail.com/v0/books/1567

まだまだ不具合もありそうだけど、一旦使えるようにはなったので公開してみます。 v0なのでいろいろ許してください(フィードバック大歓迎です)。

つくったもの

青空文庫には2019年9月現在で約1.6万件の作品データ、約1,000件程度の人物(著者・翻訳者など)データが登録されています。 公式がこれをまとめた巨大なCSVファイルを自動更新で公開してくれているので、基本的にこのデータを検索して返すAPIとなっています。

公式CSVをスプレッドシートに取り込んで公開してるので、どんなデータが返ってくるかはこれを見てもらうのが早いかと。 (実際のResponseフォーマットは一部異なるので、詳細はドキュメントをご参照ください)

青空文庫API用データ - Google スプレッドシート

公式CSVは毎日更新されてますが、ほとんどの場合そんなに最新のデータが必要になるわけじゃないと思うので、データ更新は不定期で対応する予定です。APIで取れるデータの最新情報は前述のスプレッドシートで確認してください。


使い方

books, personsそれぞれのエンドポイントに対して、カラム名での検索と、ID指定で特定ドキュメントの取得ができます。 検索は基本完全一致ですが、一部カラムはLIKE検索もサポートしています(後述)。

検索(一覧取得)

  • https://api.bungomail.com/v0/books?作品名=桃太郎
  • https://api.bungomail.com/v0/books?作品著作権フラグ=なし&文字遣い種別=新字新仮名&limit=5
  • https://api.bungomail.com/v0/persons?人物著作権フラグ=なし&limit=5
  • 検索対象となるのは、スプレッドシートでオレンジ色になっているカラムです。 対象カラムであれば、上記の例のように複数組み合わせて絞り込み(AND検索)することもできます。

    特定レコード取得

  • https://api.bungomail.com/v0/books/1567(作品ID)
  • https://api.bungomail.com/v0/persons/35(人物ID)
  • 詳細な使い方やレスポンスのフォーマットについてはドキュメントをご参照ください。


    アピールポイント

    作品の文字数・書き出し・累計アクセス数も取れる

    公式のCSVで得られる情報に加えて、「ゾラサーチ」で利用している独自データも追加しています。 具体的には「作品の文字数」「書き出し」「累計アクセス数」です。

    夢が広がりますね。

    LIKE検索も(一部)サポート

    Firestoreを使ってるので検索が弱く、基本的に検索は完全一致となります。 たださすがにフリーワード検索したいこともあるので、一部カラムでLIKE検索もサポートしました。

    booksの「作品名」、personsの「姓名」カラムが、それぞれLIKE検索に対応しています。

  • https://api.bungomail.com/v0/books?作品名=/走れ/&姓名=太宰治
  • のように//で囲んでお使いください。他のカラムとの併用も可能です。

    Firestoreで全文検索する方法はこちらの記事を参考にさせていただきました。

    控えめに言って天才としか言いようがないメソッドですので、Firestore使う方はぜひご参考ください。 感謝しすぎてreact使ったこともないのに「りあクト!」新刊買ってしまいましたw


    限界

    こんな感じのAPIなんですが、無料運営にこだわってFirestoreに依存している結果、弱点も多いです。許してください。

    並べ替えができない

    すべてのレスポンスが「累計アクセス数↓・作品ID↑」順でソートされております。 これ以外でのソートはできません。文字数とか名前とかで並べたいよね。ごめんね。

    しかし複合indexの組み合わせが爆発するので、とてもすべてはindexできそうにありません。 どうしてもこの条件でソートしなければ死ぬ、とかの要件があればご相談ください。 (でもそこまで追い詰められてたら自前でデータ取り込んで検索したほうがいいと思います)

    アクセス数が爆増したら登録制にするかも

    Firebaseの無料プランで運営しているため、当然使用量に制限があります。 検索結果は超長期でCDNキャッシュする予定ですが、それでもアクセスが多すぎる場合は登録制にして利用を制限するかもしれません。あらかじめご了承ください。たぶんそんなことにはならないと思うんですけど。

    また全データ取得の目的でAPI投げまくるとかを検討されている場合、たぶん公開してるスプレッドシートをダウンロードして直接読み込んでもらったほうがお互いハッピーだと思いますので、ぜひそちらをご検討ください。


    まとめ

    という感じで、まぁいろいろ制限はありますが何とか使えなくもないAPIができたんじゃないかと思います。

    がんばりすぎずに長生きしてほしいなと思ってますので、これでもいいよという方はぜひ使ってみてください。 バグや改善要望、使ってみたレポートもお待ちしておりますよ。

    おしまい。

    ← Go home