List of Aozora-Api - text.Baldanders.info
tag:text.Baldanders.info,2020-10-02:/tags
2020-10-02T16:40:54+09:00
帰ってきた「しっぽのさきっちょ」
https://text.baldanders.info/images/avatar.jpg
https://text.baldanders.info/images/avatar.jpg
Go 製のツールとパッケージをまとめてアップデートした
tag:text.Baldanders.info,2020-10-02:/release/2020/10/released-tools-and-packages-by-golang/
2020-10-02T07:40:54+00:00
2021-12-04T02:40:05+00:00
Update gpgpdump, books-data, gnkf, pa-api, aozora-api, openbd-api, gocli, and errs packages
Spiegel
https://baldanders.info/profile/
<p><a href="https://github.com/">GitHub</a> リポジトリにある <a href="https://go.dev/">Go 言語</a>製のツールやパッケージについて <a href="https://github.com/">GitHub</a> Actions で CI (Continuous Integration) を回す目処が立ったので,設定を変更しリリースし直すことにした。
今回リリースしたツール・パッケージのうち主なものは以下の通り。</p>
<ul>
<li><a href="https://github.com/spiegel-im-spiegel/gpgpdump/releases/tag/v0.9.1">Release v0.9.1 · spiegel-im-spiegel/gpgpdump · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/books-data/releases/tag/v0.5.8">Release v0.5.8 · spiegel-im-spiegel/books-data · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/gnkf/releases/tag/v0.1.3">Release v0.1.3 · spiegel-im-spiegel/gnkf · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/pa-api/releases/tag/v0.7.2">Release v0.7.2 · spiegel-im-spiegel/pa-api · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/aozora-api/releases/tag/v0.2.6">Release v0.2.6 · spiegel-im-spiegel/aozora-api · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/openbd-api/releases/tag/v0.2.6">Release v0.2.6 · spiegel-im-spiegel/openbd-api · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/gocli/releases/tag/v0.10.3">Release v0.10.3 · spiegel-im-spiegel/gocli · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/errs/releases/tag/v1.0.2">Release v1.0.2 · spiegel-im-spiegel/errs · GitHub</a></li>
</ul>
<p>若干 lint に叱られたり軽微なバグを指摘されたりしたものもあるが,機能上の追加・変更はない。</p>
<p>それじゃあ,次のステージに行きましょう♪</p>
<h2>ブックマーク</h2>
<ul>
<li>
<p><a href="https://text.baldanders.info/release/gpgpdump/">OpenPGP パケットを可視化する gpgpdump</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/release/books-data/">書籍データ取得ツール books-data</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/release/gnkf/">GNKF: Network Kanji Filter by Golang</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/release/pa-api-v5/">Go 言語用 PA-API v5 クライアント・パッケージ</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/release/aozora-api-package-for-golang/">Go 言語用青空文庫 API クライアント・パッケージ</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/release/openbd-api-package-for-golang/">Go 言語用 openBD クライアント・パッケージ</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/release/gocli-package-for-golang/">Go 言語用 CLI プログラミング支援パッケージ</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/release/errs-package-for-golang/">Go 言語用エラーハンドリング・パッケージ</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/golang/using-golangci-lint-action/">golangci-lint を GitHub Actions で使う</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/golang/check-for-vulns-in-golang-dependencies/">Go 依存パッケージの脆弱性検査</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/golang/cross-compiling-in-github-actions-with-goreleaser/">GitHub Actions でクロス・コンパイル(GoReleaser 編)</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/remark/2020/10/github-code-scanning-with-golang/">Go のコードでも GitHub Code Scanning が使えるらしい</a></p>
</li>
</ul>
<h2>参考図書</h2>
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/B099928SJD?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/416Stewy0NS._SL160_.jpg" width="123" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/B099928SJD?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">プログラミング言語Go</a></dt>
<dd>アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)</dd>
<dd>丸善出版 2016-06-20 (Release 2021-07-13)</dd>
<dd>Kindle版</dd>
<dd>B099928SJD (ASIN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想は<a href="https://text.baldanders.info/remark/2016/07/go-programming-language/" >こちら</a>。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2021-05-22">2021-05-22</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- プログラミング言語Go -->
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/B01MZ8UA8O?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/516hKjO3t-L._SL160_.jpg" width="160" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/B01MZ8UA8O?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">射手座☆午後九時Don't be late</a></dt>
<dd>シェリル・ノーム starring May'n (メインアーティスト)</dd>
<dd>FlyingDog 2008-05-08 (Release 2017-01-16)</dd>
<dd>MP3 ダウンロード</dd>
<dd>B01MZ8UA8O (ASIN)</dd>
<dd>評価<abbr class="rating fa-sm" title="4"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="far fa-star"></i></abbr></dd>
</dl>
<p class="description">移動中に聴くとノリノリになれる(笑)</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2020-10-02">2020-10-02</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- 射手座☆午後九時 Don't be late -->
エラーハンドリング・パッケージ errs v1.0.0 他のリリース【Go 1.15 リリース記念】
tag:text.Baldanders.info,2020-08-13:/release/2020/08/errs-package-v1_0_0-is-released/
2020-08-13T00:48:44+00:00
2021-12-04T02:40:05+00:00
機能追加なし。不具合修正もなし。 go.mod と Travis CI 設定を変更しただけの簡単なお仕事デス。
Spiegel
https://baldanders.info/profile/
<p>この前 v0.7.0 を出したばかりだが,<a href="https://text.baldanders.info/release/2020/08/errs-package-v0_7_0-is-released/" title="Go 言語用エラーハンドリング・パッケージ errs v0.7.0 をリリースした">予告した</a>とおり, <a href="https://text.baldanders.info/release/2020/08/go-1_15-is-released/" title="">Go 1.15 リリース</a>を記念して <a href="https://github.com/spiegel-im-spiegel/errs" title="spiegel-im-spiegel/errs: Error handling for Golang">spiegel-im-spiegel/errs</a> パッケージのメジャー・バージョンを上げることにした。</p>
<ul>
<li><a href="https://github.com/spiegel-im-spiegel/errs/releases/tag/v1.0.0">Release v1.0.0 · spiegel-im-spiegel/errs · GitHub</a></li>
</ul>
<p>機能追加なし。
不具合修正もなし。
<code>go.mod</code> と <a href="https://travis-ci.org/" title="Travis CI - Test and Deploy Your Code with Confidence">Travis CI</a> の設定を変更して <a href="https://go.dev/">Go</a> 1.15 に対応させただけの簡単なお仕事デス。</p>
<p>今後は後方互換性をきちんと考えて改修していく予定です <code>m(_ _)m</code></p>
<p>ついでに <a href="https://github.com/spiegel-im-spiegel/errs" title="spiegel-im-spiegel/errs: Error handling for Golang">spiegel-im-spiegel/errs</a> パッケージを利用している主なパッケージやツールもバージョンを上げた。</p>
<ul>
<li><a href="https://github.com/spiegel-im-spiegel/pa-api/releases/tag/v0.7.1">Release v0.7.1 · spiegel-im-spiegel/pa-api · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/openbd-api/releases/tag/v0.2.5">Release v0.2.5 · spiegel-im-spiegel/openbd-api · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/aozora-api/releases/tag/v0.2.5">Release v0.2.5 · spiegel-im-spiegel/aozora-api · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/gpgpdump/releases/tag/v0.7.2">Release v0.7.2 · spiegel-im-spiegel/gpgpdump · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/books-data/releases/tag/v0.5.6">Release v0.5.6 · spiegel-im-spiegel/books-data · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/gnkf/releases/tag/v0.1.2">Release v0.1.2 · spiegel-im-spiegel/gnkf · GitHub</a></li>
<li><a href="https://github.com/spiegel-im-spiegel/mklink/releases/tag/v0.1.20">Release v0.1.20 · spiegel-im-spiegel/mklink · GitHub</a></li>
</ul>
<p>基本的には <a href="https://github.com/spiegel-im-spiegel/errs" title="spiegel-im-spiegel/errs: Error handling for Golang">spiegel-im-spiegel/errs</a> パッケージのバージョンを上げただけ。
まぁ <a href="https://text.baldanders.info/release/2020/08/errs-package-v0_7_0-is-released/" title="Go 言語用エラーハンドリング・パッケージ errs v0.7.0 をリリースした">v0.7.0 で後方互換性をぶっ壊している</a>ので,手直しが多かったけど(笑)</p>
<h2>32ビット・バイナリの提供を止めました</h2>
<p><a href="https://github.com/spiegel-im-spiegel/gpgpdump/" title="spiegel-im-spiegel/gpgpdump: OpenPGP packet visualizer">gpgpdump</a>, <a href="https://github.com/spiegel-im-spiegel/books-data/" title="spiegel-im-spiegel/books-data: Search for Books Data">books-data</a>, <a href="https://github.com/spiegel-im-spiegel/gnkf/" title="spiegel-im-spiegel/gnkf: Network Kanji Filter by Golang">gnkf</a>, <a href="https://github.com/spiegel-im-spiegel/mklink/" title="spiegel-im-spiegel/mklink: Make Link with Markdown Format">mklink</a> の各ツールはバイナリでの提供も行っているが,今回から32ビット・バイナリの提供を止めることにした(ARM アーキテクチャを除く)。</p>
<p>きっかけは <a href="https://go.dev/">Go</a> 1.15 で <code>darwin/386</code> のサポートが終了したこと。</p>
<figure lang="en">
<blockquote><q>As <a href="https://golang.org/doc/go1.14#darwin">announced</a> in the Go 1.14 release notes, Go 1.15 drops support for 32-bit binaries on macOS, iOS, iPadOS, watchOS, and tvOS (the <code>darwin/386</code> and <code>darwin/arm</code> ports). Go continues to support the 64-bit <code>darwin/amd64</code> and <code>darwin/arm64</code> ports</q>.</blockquote>
<figcaption><div>via <q><a href="https://golang.org/doc/go1.15">Go 1.15 Release Notes - The Go Programming Language</a></q></div></figcaption>
</figure>
<p>クロスコンパイルは <a href="https://goreleaser.com/">GoReleaser</a> を使ってるのでそんなに面倒ではないんだけど… もう32ビット流行らんべ。
Windows で古い32ビット機を(しかも拙作を)使ってる人は多分いないだろうし <a href="https://www.ubuntu.com/" title="The leading operating system for PCs, IoT devices, servers and the cloud | Ubuntu">Ubuntu</a> も最新 LTS では遂に32ビット・アーキテクチャのサポートを終了したしね。</p>
<p>まぁ Pure <a href="https://go.dev/">Go</a> で書いてるのでダウンロード&ビルドは難しくないし,たいした問題ではないだろう,うんうん。</p>
<h2>ブックマーク</h2>
<ul>
<li><a href="https://text.baldanders.info/release/gpgpdump/">OpenPGP パケットを可視化する gpgpdump</a></li>
<li><a href="https://text.baldanders.info/release/books-data/">書籍データ取得ツール books-data</a></li>
<li><a href="https://text.baldanders.info/release/gnkf/">GNKF: Network Kanji Filter by Golang</a></li>
<li><a href="https://text.baldanders.info/release/aozora-api-package-for-golang/">Go 言語用青空文庫 API クライアント・パッケージ</a></li>
<li><a href="https://text.baldanders.info/release/openbd-api-package-for-golang/">Go 言語用 openBD クライアント・パッケージ</a></li>
<li><a href="https://text.baldanders.info/release/pa-api-v5/">Go 言語用 PA-API v5 クライアント・パッケージ</a></li>
<li><a href="https://text.baldanders.info/release/errs-package-for-golang/">Go 言語用エラーハンドリング・パッケージ</a></li>
</ul>
<ul>
<li><a href="https://text.baldanders.info/golang/make-link-with-markdown-format/">Markdown 形式のリンクを生成するツールを作ってみた</a></li>
<li><a href="https://text.baldanders.info/golang/cross-compiling-in-travis-ci-with-goreleaser/">Travis CI でクロス・コンパイル(GoReleaser 編)</a></li>
</ul>
<h2>参考図書</h2>
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/B099928SJD?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/416Stewy0NS._SL160_.jpg" width="123" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/B099928SJD?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">プログラミング言語Go</a></dt>
<dd>アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)</dd>
<dd>丸善出版 2016-06-20 (Release 2021-07-13)</dd>
<dd>Kindle版</dd>
<dd>B099928SJD (ASIN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想は<a href="https://text.baldanders.info/remark/2016/07/go-programming-language/" >こちら</a>。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2021-05-22">2021-05-22</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- プログラミング言語Go -->
書籍データ取得ツール books-data
tag:text.Baldanders.info,2019-09-08:/release/books-data/
2019-09-08T06:22:41+00:00
2022-04-03T07:00:58+00:00
本ツールは PA-API, openBD および 青空文庫 API より書籍情報を取得・加工するための CLI ツールである。
Spiegel
https://baldanders.info/profile/
<ul>
<li><a href="https://github.com/goark/books-data">goark/books-data: Search for Books Data</a></li>
</ul>
<p>本ツールは <a href="https://affiliate.amazon.co.jp/assoc_credentials/home" title="Product Advertising API">PA-API</a>, <a href="https://openbd.jp/" title="openBD | 書誌情報・書影を自由に">openBD</a> および <a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API より書籍情報を取得・加工するための CLI (Command-Line Interface) ツールである。</p>
<p><a href="https://github.com/goark/books-data/actions"><img src="https://github.com/goark/books-data/workflows/vulns/badge.svg" alt="check vulns"></a>
<a href="https://github.com/goark/books-data/actions"><img src="https://github.com/goark/books-data/workflows/lint/badge.svg" alt="lint status"></a>
<a href="https://raw.githubusercontent.com/goark/books-data/master/LICENSE"><img src="https://img.shields.io/badge/license-Apache%202-blue.svg" alt="GitHub license"></a>
<a href="https://github.com/goark/books-data/releases/latest"><img src="https://img.shields.io/github/release/goark/books-data.svg" alt="GitHub release"></a></p>
<h2>ダウンロードとビルド</h2>
<p><a href="https://github.com/goark/books-data" title="goark/books-data: Search for Books Data">books-data</a> は以下の <a href="https://go.dev/">Go</a> コマンドでビルドとインストールができる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go install github.com/goark/books-data@latest
</span></span></code></pre></div><p>なおビルドには <a href="https://go.dev/">Go</a> 1.16 以上が必要になる。
ご注意を。</p>
<p>各プラットフォーム用のバイナリも用意している。
<a href="https://github.com/goark/books-data/releases/latest">最新バイナリはリリースページから取得</a>できる。</p>
<h2>簡単な使い方</h2>
<p><code>-h</code> オプションで簡単なヘルプを表示できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data -h
</span></span><span class="line"><span class="cl">Search for books data
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Usage:
</span></span><span class="line"><span class="cl"> books-data [flags]
</span></span><span class="line"><span class="cl"> books-data [command]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Available Commands:
</span></span><span class="line"><span class="cl"> help Help about any command
</span></span><span class="line"><span class="cl"> history Lookup review data from history log
</span></span><span class="line"><span class="cl"> review Make review data
</span></span><span class="line"><span class="cl"> search Search for books data
</span></span><span class="line"><span class="cl"> version Print the version number
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Flags:
</span></span><span class="line"><span class="cl"> --access-key string Config: PA-API Access Key ID
</span></span><span class="line"><span class="cl"> -c, --aozora-card string Aozora-bunko card no.
</span></span><span class="line"><span class="cl"> -a, --asin string Amazon ASIN code
</span></span><span class="line"><span class="cl"> --associate-tag string Config: PA-API Associate Tag
</span></span><span class="line"><span class="cl"> --config string Config file (default /home/username/.config/books-data/config.yaml)
</span></span><span class="line"><span class="cl"> --debug for debug
</span></span><span class="line"><span class="cl"> -h, --help help for books-data
</span></span><span class="line"><span class="cl"> -i, --isbn string ISBN code
</span></span><span class="line"><span class="cl"> --marketplace string Config: PA-API Marketplace (default "www.amazon.co.jp")
</span></span><span class="line"><span class="cl"> -l, --review-log string Config: Review log file (JSON format)
</span></span><span class="line"><span class="cl"> --secret-key string Config: PA-API Secret Access Key
</span></span><span class="line"><span class="cl"> -t, --template-file string Template file for formatted output
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Use "books-data [command] --help" for more information about a command.
</span></span></code></pre></div><h3>設定ファイル</h3>
<p><a href="https://github.com/goark/books-data" title="goark/books-data: Search for Books Data">books-data</a> のオプションの一部は設定ファイルであらかじめ指定しておくことができる。
指定可能なオプションは以下の通り</p>
<table>
<thead>
<tr>
<th>オプション名</th>
<th>既定値</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>marketplace</code></td>
<td><code>www.amazon.co.jp</code></td>
<td><a href="https://affiliate.amazon.co.jp/assoc_credentials/home" title="Product Advertising API">PA-API</a> サーバ名</td>
</tr>
<tr>
<td><code>associate-tag</code></td>
<td>なし</td>
<td><a href="https://affiliate.amazon.co.jp/assoc_credentials/home" title="Product Advertising API">PA-API</a> アソシエイト・タグ(アカウント名)</td>
</tr>
<tr>
<td><code>access-key</code></td>
<td>なし</td>
<td><a href="https://affiliate.amazon.co.jp/assoc_credentials/home" title="Product Advertising API">PA-API</a> アクセスキー</td>
</tr>
<tr>
<td><code>secret-key</code></td>
<td>なし</td>
<td><a href="https://affiliate.amazon.co.jp/assoc_credentials/home" title="Product Advertising API">PA-API</a> 秘密キー</td>
</tr>
<tr>
<td><code>review-log</code></td>
<td>なし</td>
<td>レビューデータ作成時の保存ログファイル名</td>
</tr>
</tbody>
</table>
<p>設定ファイルの書式は YAML 形式で以下のような感じに記述する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ cat ~/.config/books-data/config.yaml
</span></span><span class="line"><span class="cl">marketplace: www.amazon.co.jp
</span></span><span class="line"><span class="cl">associate-tag: mytag-20
</span></span><span class="line"><span class="cl">access-key: AKIAIOSFODNN7EXAMPLE
</span></span><span class="line"><span class="cl">secret-key: 1234567890
</span></span><span class="line"><span class="cl">review-log: /home/username/.local/share/books-data/review-log.json
</span></span></code></pre></div><p>設定ファイルは以下のパスに置いておけば <a href="https://github.com/goark/books-data" title="goark/books-data: Search for Books Data">books-data</a> 起動時に自動的に読み込まれる。</p>
<ul>
<li>Windows
<ul>
<li><code>%AppData%\books-data\config.yaml</code></li>
</ul>
</li>
<li>Darwin (macOS)
<ul>
<li><code>$HOME/Library/Application Support/books-data/config.yaml</code></li>
</ul>
</li>
<li>Plan 9
<ul>
<li><code>$home/lib/books-data/config.yaml</code></li>
</ul>
</li>
<li>UNIX 系 OS (Linux 他)
<ul>
<li><code>$XDG_CONFIG_HOME/books-data/config.yaml</code> (<code>$XDG_CONFIG_HOME</code> 環境変数が指定されている場合)</li>
<li><code>$HOME/.config/books-data/config.yaml</code></li>
</ul>
</li>
</ul>
<p>また <a href="https://github.com/goark/books-data" title="goark/books-data: Search for Books Data">books-data</a> 起動時に <code>--config</code> オプションで設定ファイルを直接指定することも可能だ。
設定ファイルの内容には秘密情報が含まれる(<a href="https://affiliate.amazon.co.jp/assoc_credentials/home" title="Product Advertising API">PA-API</a> を利用する場合)ためファイルのアクセス設定に注意すること。</p>
<h3>書籍情報の検索</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data search -h
</span></span><span class="line"><span class="cl">Search for books data
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Usage:
</span></span><span class="line"><span class="cl"> books-data search [flags]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Flags:
</span></span><span class="line"><span class="cl"> -h, --help help for search
</span></span><span class="line"><span class="cl"> --raw Output raw data from API
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Global Flags:
</span></span><span class="line"><span class="cl"> --access-key string Config: PA-API Access Key ID
</span></span><span class="line"><span class="cl"> -c, --aozora-card string Aozora-bunko card no.
</span></span><span class="line"><span class="cl"> -a, --asin string Amazon ASIN code
</span></span><span class="line"><span class="cl"> --associate-tag string Config: PA-API Associate Tag
</span></span><span class="line"><span class="cl"> --config string Config file (default /home/username/.config/books-data/config.yaml)
</span></span><span class="line"><span class="cl"> --debug for debug
</span></span><span class="line"><span class="cl"> -i, --isbn string ISBN code
</span></span><span class="line"><span class="cl"> --marketplace string Config: PA-API Marketplace (default "www.amazon.co.jp")
</span></span><span class="line"><span class="cl"> -l, --review-log string Config: Review log file (JSON format)
</span></span><span class="line"><span class="cl"> --secret-key string Config: PA-API Secret Access Key
</span></span><span class="line"><span class="cl"> -t, --template-file string Template file for formatted output
</span></span></code></pre></div><p>たとえば ASIN コード <code>B07TYKJQFK</code> のアイテムの情報を取得する場合は以下のコマンドラインで起動する(<a href="https://affiliate.amazon.co.jp/assoc_credentials/home" title="Product Advertising API">PA-API</a> を利用可能な場合)。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data search -a B07TYKJQFK
</span></span><span class="line"><span class="cl">{"Type":"paapi","ID":"B07TYKJQFK","Title":"数学ガールの秘密ノート/ビットとバイナリー","URL":"https://www.amazon.co.jp/dp/B07TYKJQFK?tag=mytag-20\u0026linkCode=ogi\u0026th=1\u0026psc=1","Image":{"URL":"https://m.media-amazon.com/images/I/41Q0Hyr8g3L._SL160_.jpg","Height":160,"Width":111},"ProductType":"Kindle版","Creators":[{"Name":"結城 浩","Role":"著"}],"Publisher":"SBクリエイティブ","Codes":[{"Name":"ASIN","Value":"B07TYKJQFK"}],"PublicationDate":"2019-07-19","LastRelease":"2019-07-20","Service":{"Name":"PA-APIv5","URL":"https://affiliate.amazon.co.jp/assoc_credentials/home"}}
</span></span></code></pre></div><p>実行結果は JSON 形式で出力される。</p>
<p>他に指定可能な検索オプションは以下の通り。</p>
<table>
<thead>
<tr>
<th>オプション</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>-a, --asin</code></td>
<td>Amazon ASIN コード</td>
</tr>
<tr>
<td><code>-i, --isbn</code></td>
<td>ISBN 番号</td>
</tr>
<tr>
<td><code>-c, --aozora-card</code></td>
<td><a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a>図書カード No.</td>
</tr>
</tbody>
</table>
<p>これらは同時に指定可能だが Amazon ASIN コード → ISBN 番号 → <a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a>図書カード No. の順で検索を行う。
検索キーとして ISBN コードを指定した場合は <a href="https://openbd.jp/" title="openBD | 書誌情報・書影を自由に">openBD</a> による検索を行う。</p>
<h3>レビュー・データの作成</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data review -h
</span></span><span class="line"><span class="cl">Make review data
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Usage:
</span></span><span class="line"><span class="cl"> books-data review [flags] [description]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Flags:
</span></span><span class="line"><span class="cl"> --bookpage-url string URL of book page
</span></span><span class="line"><span class="cl"> -h, --help help for review
</span></span><span class="line"><span class="cl"> --image-url string URL of book cover image
</span></span><span class="line"><span class="cl"> --pipe Import description from Stdin
</span></span><span class="line"><span class="cl"> -r, --rating int Rating of product
</span></span><span class="line"><span class="cl"> --review-date string Date of review
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Global Flags:
</span></span><span class="line"><span class="cl"> --access-key string Config: PA-API Access Key ID
</span></span><span class="line"><span class="cl"> -c, --aozora-card string Aozora-bunko card no.
</span></span><span class="line"><span class="cl"> -a, --asin string Amazon ASIN code
</span></span><span class="line"><span class="cl"> --associate-tag string Config: PA-API Associate Tag
</span></span><span class="line"><span class="cl"> --config string Config file (default /home/username/.config/books-data/config.yaml)
</span></span><span class="line"><span class="cl"> --debug for debug
</span></span><span class="line"><span class="cl"> -i, --isbn string ISBN code
</span></span><span class="line"><span class="cl"> --marketplace string Config: PA-API Marketplace (default "www.amazon.co.jp")
</span></span><span class="line"><span class="cl"> -l, --review-log string Config: Review log file (JSON format)
</span></span><span class="line"><span class="cl"> --secret-key string Config: PA-API Secret Access Key
</span></span><span class="line"><span class="cl"> -t, --template-file string Template file for formatted output
</span></span></code></pre></div><p>ASIN, ISBN または <a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a>図書カード No. で指定した書籍情報に対してレビュー情報を作成する。
レビュー情報として以下のオプションを指定できる。</p>
<table>
<thead>
<tr>
<th>オプション</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>--bookpage-url</code></td>
<td>書籍ページへの URL</td>
</tr>
<tr>
<td><code>--image-url</code></td>
<td>書影(画像データ)への URL</td>
</tr>
<tr>
<td><code>--rating</code></td>
<td>評価ポイント (<code>0-5</code>) ※ <code>0</code>なら評価なし</td>
</tr>
<tr>
<td><code>--review-date</code></td>
<td>レビュー日</td>
</tr>
</tbody>
</table>
<p>コマンドラインはこんな感じで記述する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data review -a B07TYKJQFK -r 5 --review-date 2019-09-08 "面白かった!"
</span></span><span class="line"><span class="cl">{"Book":{"Type":"paapi","ID":"B07TYKJQFK","Title":"数学ガールの秘密ノート/ビットとバイナリー","URL":"https://www.amazon.co.jp/dp/B07TYKJQFK?tag=mytag-20\u0026linkCode=ogi\u0026th=1\u0026psc=1","Image":{"URL":"https://m.media-amazon.com/images/I/41Q0Hyr8g3L._SL160_.jpg","Height":160,"Width":111},"ProductType":"Kindle版","Creators":[{"Name":"結城 浩","Role":"著"}],"Publisher":"SBクリエイティブ","Codes":[{"Name":"ASIN","Value":"B07TYKJQFK"}],"PublicationDate":"2019-07-19","LastRelease":"2019-07-20","Service":{"Name":"PA-APIv5","URL":"https://affiliate.amazon.co.jp/assoc_credentials/home"}},"Date":"2019-09-08","Rating":5,"Star":[true,true,true,true,true],"Description":"面白かった!"}
</span></span></code></pre></div><p>実行結果は JSON 形式で出力される。
また <code>--pipe</code> オプションを付けることで標準入力から description を入力できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ echo "面白かった!" | books-data review -a B07TYKJQFK -r 5 --review-date 2019-09-08 --pipe
</span></span><span class="line"><span class="cl">{"Book":{"Type":"paapi","ID":"B07TYKJQFK","Title":"数学ガールの秘密ノート/ビットとバイナリー","URL":"https://www.amazon.co.jp/dp/B07TYKJQFK?tag=mytag-20\u0026linkCode=ogi\u0026th=1\u0026psc=1","Image":{"URL":"https://m.media-amazon.com/images/I/41Q0Hyr8g3L._SL160_.jpg","Height":160,"Width":111},"ProductType":"Kindle版","Creators":[{"Name":"結城 浩","Role":"著"}],"Publisher":"SBクリエイティブ","Codes":[{"Name":"ASIN","Value":"B07TYKJQFK"}],"PublicationDate":"2019-07-19","LastRelease":"2019-07-20","Service":{"Name":"PA-APIv5","URL":"https://affiliate.amazon.co.jp/assoc_credentials/home"}},"Date":"2019-09-08","Rating":5,"Star":[true,true,true,true,true],"Description":"面白かった!\n"}
</span></span></code></pre></div><h3>レビュー履歴の参照</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data history -h
</span></span><span class="line"><span class="cl">Lookup review data from history log
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Usage:
</span></span><span class="line"><span class="cl"> books-data history [flags]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Flags:
</span></span><span class="line"><span class="cl"> -h, --help help for history
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Global Flags:
</span></span><span class="line"><span class="cl"> --access-key string Config: PA-API Access Key ID
</span></span><span class="line"><span class="cl"> -c, --aozora-card string Aozora-bunko card no.
</span></span><span class="line"><span class="cl"> -a, --asin string Amazon ASIN code
</span></span><span class="line"><span class="cl"> --associate-tag string Config: PA-API Associate Tag
</span></span><span class="line"><span class="cl"> --config string Config file (default /home/spiegel/.config/books-data/config.yaml)
</span></span><span class="line"><span class="cl"> --debug for debug
</span></span><span class="line"><span class="cl"> -i, --isbn string ISBN code
</span></span><span class="line"><span class="cl"> --marketplace string Config: PA-API Marketplace (default "www.amazon.co.jp")
</span></span><span class="line"><span class="cl"> -l, --review-log string Config: Review log file (JSON format)
</span></span><span class="line"><span class="cl"> --secret-key string Config: PA-API Secret Access Key
</span></span><span class="line"><span class="cl"> -t, --template-file string Template file for formatted output
</span></span></code></pre></div><p><code>--review-log</code> オプションでレビュー結果を保存している場合は <code>history</code> コマンドで過去の履歴を呼び出せる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data history -a B07TYKJQFK
</span></span><span class="line"><span class="cl">{"Book":{"Type":"paapi","ID":"B07TYKJQFK","Title":"数学ガールの秘密ノート/ビットとバイナリー","URL":"https://www.amazon.co.jp/dp/B07TYKJQFK?tag=mytag-20\u0026linkCode=ogi\u0026th=1\u0026psc=1","Image":{"URL":"https://m.media-amazon.com/images/I/41Q0Hyr8g3L._SL160_.jpg","Height":160,"Width":111},"ProductType":"Kindle版","Creators":[{"Name":"結城 浩","Role":"著"}],"Publisher":"SBクリエイティブ","Codes":[{"Name":"ASIN","Value":"B07TYKJQFK"}],"PublicationDate":"2019-07-19","LastRelease":"2019-07-20","Service":{"Name":"PA-APIv5","URL":"https://affiliate.amazon.co.jp/assoc_credentials/home"}},"Date":"2019-09-08","Rating":5,"Star":[true,true,true,true,true],"Description":"面白かった!\n"}
</span></span></code></pre></div><h3>出力の整形</h3>
<p><code>-t</code> または <code>--template-file</code> オプションででテンプレートファイルを指定することにより <code>search</code>, <code>review</code>, <code>history</code> 各コマンドの実行結果の出力を整形できる。</p>
<p>たとえば以下のようなテンプレートファイルを用意すれば</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ cat reviews/template.bib.txt
</span></span><span class="line"><span class="cl">@BOOK{Book:{{ .Book.ID }},
</span></span><span class="line"><span class="cl"> TITLE = "{{ .Book.Title }}",
</span></span><span class="line"><span class="cl"> AUTHOR = "{{ with .Book.Creators }}{{ range $i, $v := . }}{{ if ne $i 0 }} and {{ end }}{{ . }}{{ end }}{{ end }}"{{ if .Book.Publisher }},
</span></span><span class="line"><span class="cl"> PUBLISHER = {{ "{" }}{{ .Book.Publisher }}{{ "}" }}{{ end }}{{ if gt .Book.PublicationDate.Year 1 }},
</span></span><span class="line"><span class="cl"> YEAR = {{ .Book.PublicationDate.Year }}{{ end }}
</span></span><span class="line"><span class="cl">}
</span></span></code></pre></div><p>このような出力になる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data history -a B07TYKJQFK -t reviews/template.bib.txt
</span></span><span class="line"><span class="cl">@BOOK{Book:B07TYKJQFK,
</span></span><span class="line"><span class="cl"> TITLE = "数学ガールの秘密ノート/ビットとバイナリー",
</span></span><span class="line"><span class="cl"> AUTHOR = "結城 浩 (著)",
</span></span><span class="line"><span class="cl"> PUBLISHER = {SBクリエイティブ},
</span></span><span class="line"><span class="cl"> YEAR = 2019
</span></span><span class="line"><span class="cl">}
</span></span></code></pre></div><p><code>search</code> コマンドで取得した書籍データのフォーマットは以下の通り。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">//Book is entity class of information for book
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Book</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Type</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"> <span class="nx">ID</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Title</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"> <span class="nx">SubTitle</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">SeriesTitle</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">OriginalTitle</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">URL</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Image</span> <span class="nx">BookCover</span>
</span></span><span class="line"><span class="cl"> <span class="nx">ProductType</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Creators</span> <span class="p">[]</span><span class="nx">Creator</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Publisher</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Codes</span> <span class="p">[]</span><span class="nx">Code</span>
</span></span><span class="line"><span class="cl"> <span class="nx">PublicationDate</span> <span class="nx">values</span><span class="p">.</span><span class="nx">Date</span>
</span></span><span class="line"><span class="cl"> <span class="nx">LastRelease</span> <span class="nx">values</span><span class="p">.</span><span class="nx">Date</span>
</span></span><span class="line"><span class="cl"> <span class="nx">PublicDomain</span> <span class="kt">bool</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">FirstAppearance</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Service</span> <span class="nx">Service</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//Code is entity class of book code
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Code</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Name</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Value</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//Creator is entity class of creator info.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Creator</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Name</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Role</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//BookCover is entity class of book cover image info.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">BookCover</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">URL</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Height</span> <span class="kt">uint16</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Width</span> <span class="kt">uint16</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//Service is entity class of API service info.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Service</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Name</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"> <span class="nx">URL</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>また <code>review</code>, <code>history</code> コマンドで取得したレビュー・データのフォーマットは以下の通り。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">//Review is entity class for review info.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Review</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Book</span> <span class="o">*</span><span class="nx">entity</span><span class="p">.</span><span class="nx">Book</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Date</span> <span class="nx">values</span><span class="p">.</span><span class="nx">Date</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Rating</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Star</span> <span class="p">[</span><span class="nx">MAX_STAR</span><span class="p">]</span><span class="kt">bool</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Description</span> <span class="kt">string</span> <span class="s">`json:",omitempty"`</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>ちなみに,このブログにおけるレビューカードのテンプレートは以下の内容になっている。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"><div class="hreview">{{ if .Book.Image.URL }}
</span></span><span class="line"><span class="cl"> <div class="photo">{{ if .Book.URL }}<a class="item url" href="{{ .Book.URL }}">{{ end }}<img src="{{ .Book.Image.URL }}" width="{{ with .Book.Image.Width }}{{ . }}{{ else }}110{{ end }}" alt="photo">{{ if .Book.URL }}</a>{{ end }}</div>{{ end }}
</span></span><span class="line"><span class="cl"> <dl class="fn">
</span></span><span class="line"><span class="cl"> <dt>{{ if .Book.URL }}<a href="{{ .Book.URL }}">{{ end }}{{ .Book.Title }}{{ with .Book.SubTitle }} {{ . }}{{ end }}{{ with .Book.SeriesTitle }} ({{ . }}){{ end }}{{ if .Book.URL }}</a>{{ end }}</dt>{{ if .Book.OriginalTitle }}
</span></span><span class="line"><span class="cl"> <dd>原題: {{ .Book.OriginalTitle }}</dd>{{ end }}{{ if .Book.FirstAppearance }}
</span></span><span class="line"><span class="cl"> <dd>(初出: {{ .Book.FirstAppearance }})</dd>{{ end }}{{ if .Book.Creators }}
</span></span><span class="line"><span class="cl"> <dd>{{ range $i, $v := .Book.Creators }}{{ if ne $i 0 }}, {{ end }}{{ $v }}{{ end }}</dd>{{ end }}
</span></span><span class="line"><span class="cl"> <dd>{{ .Book.Publisher }}{{ if not .Book.PublicationDate.IsZero }} {{ .Book.PublicationDate }}{{ end }}{{ if not .Book.LastRelease.IsZero }} (Release {{ .Book.LastRelease }}){{ end }}</dd>
</span></span><span class="line"><span class="cl"> <dd>{{ .Book.ProductType }}{{ if .Book.PublicDomain }} (Public Domain){{ end }}</dd>{{ if .Book.Codes }}
</span></span><span class="line"><span class="cl"> <dd>{{ range $i, $v := .Book.Codes }}{{ if ne $i 0 }}, {{ end }}{{ $v }}{{ end }}</dd>{{ end }}{{ if gt .Rating 0 }}
</span></span><span class="line"><span class="cl"> <dd>評価<abbr class="rating fa-sm" title="{{ .Rating }}">{{ range .Star }}&nbsp;{{ if . }}<i class="fas fa-star"></i>{{ else }}<i class="far fa-star"></i>{{ end }}{{ end }}</abbr></dd>{{ end }}
</span></span><span class="line"><span class="cl"> </dl>
</span></span><span class="line"><span class="cl"> <p class="description">{{ .Description }}</p>
</span></span><span class="line"><span class="cl"> <p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="{{ .Date }}">{{ .Date }}</abbr> (powered by {{ if .Book.Service.URL }}<a href="{{ .Book.Service.URL }}">{{ end }}{{ .Book.Service.Name }}{{ if .Book.Service.URL }}</a>{{ end }})</p>
</span></span><span class="line"><span class="cl"></div>
</span></span></code></pre></div><p>テンプレート・ファイルを作成する際の参考にどうぞ。</p>
<h2>参考情報</h2>
<ul>
<li><a href="https://text.baldanders.info/release/gocli-package-for-golang/">Go 言語用 CLI プログラミング支援パッケージ</a></li>
<li><a href="https://text.baldanders.info/release/errs-package-for-golang/">Go 言語用エラーハンドリング・パッケージ</a></li>
<li><a href="https://text.baldanders.info/release/aozora-api-package-for-golang/">Go 言語用青空文庫 API クライアント・パッケージ</a></li>
<li><a href="https://text.baldanders.info/release/openbd-api-package-for-golang/">Go 言語用 openBD クライアント・パッケージ</a></li>
<li><a href="https://text.baldanders.info/release/pa-api-v5/">Go 言語用 PA-API v5 クライアント・パッケージ</a></li>
</ul>
書籍データ取得ツール books-data v0.4.2 のリリース,他
tag:text.Baldanders.info,2019-09-08:/release/2019/09/books-data-v0_4_2-is-released/
2019-09-08T06:22:41+00:00
2021-12-04T02:40:05+00:00
機能的な変更は殆どないが Go 1.13 のリリースに併せて内部をいろいろ変更している。
Spiegel
https://baldanders.info/profile/
<p>書籍データ取得ツール <a href="https://github.com/spiegel-im-spiegel/books-data" title="spiegel-im-spiegel/books-data: Search for Books Data">books-data</a> v0.4.2 をリリースした。</p>
<ul>
<li><a href="https://github.com/spiegel-im-spiegel/books-data/releases/tag/v0.4.2">Release v0.4.2 · spiegel-im-spiegel/books-data · GitHub</a></li>
</ul>
<p>パッチバージョンが妙に進んでいるが気にしないように(笑)</p>
<p>機能的な変更は殆どないが <a href="https://go.dev/">Go</a> 1.13 のリリースに併せて内部をいろいろ変更している。
リファクタリングというやつである。</p>
<p>そうそう。
設定ファイルの既定の置き場所を変更して <a href="https://standards.freedesktop.org/basedir-spec/latest/" title="XDG Base Directory Specification">XDG Base Directory</a> に対応した。
詳しくは以下の記事を参照のこと。</p>
<ul>
<li><a href="https://text.baldanders.info/release/books-data/">書籍データ取得ツール books-data</a></li>
</ul>
<p>他には <a href="https://openbd.jp/" title="openBD | 書誌情報・書影を自由に">openBD</a> クライアント側のハンドリング・パッケージを自前のもの <a href="https://github.com/spiegel-im-spiegel/openbd-api" title="spiegel-im-spiegel/openbd-api: APIs for openBD by Golang">spiegel-im-spiegel/openbd-api</a> に換装した。
<a href="https://github.com/spiegel-im-spiegel/aozora-api" title="spiegel-im-spiegel/aozora-api: APIs for Aozora-bunko RESTful Service by Golang">spiegel-im-spiegel/aozora-api</a> もバージョンアップしている。</p>
<ul>
<li><a href="https://text.baldanders.info/release/aozora-api-package-for-golang/">Go 言語用青空文庫 API クライアント・パッケージ</a></li>
<li><a href="https://text.baldanders.info/release/openbd-api-package-for-golang/">Go 言語用 openBD クライアント・パッケージ</a></li>
</ul>
<h2>ブックマーク</h2>
<ul>
<li><a href="https://text.baldanders.info/release/2019/09/errs-package-is-released/">Go 言語用エラーハンドリング・パッケージをリリースした</a></li>
<li><a href="https://text.baldanders.info/release/2019/09/gocli-v0_10_1-is-released/">spiegel-im-spiegel/gocli v0.10.1 のリリース</a></li>
</ul>
Go 言語用青空文庫 API クライアント・パッケージ
tag:text.Baldanders.info,2019-09-07:/release/aozora-api-package-for-golang/
2019-09-07T13:10:02+00:00
2022-04-03T07:00:58+00:00
本パッケージは青空文庫 API を通じて青空文庫に収録されている作品情報等を取得できる。
Spiegel
https://baldanders.info/profile/
<ul>
<li><a href="https://github.com/goark/aozora-api">goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang</a></li>
</ul>
<p>本パッケージは<a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API へアクセスできる <a href="https://golang.org/" title="The Go Programming Language">Go 言語</a>用クライアント・パッケージだ。
API を通じて<a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a>に収録されている作品情報等を取得できる。</p>
<p>なお <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang">goark/aozora-api</a> パッケージは <a href="https://go.dev/">Go</a> 1.16 以上を要求する。
ご注意を。</p>
<p><a href="https://github.com/goark/aozora-api/actions"><img src="https://github.com/goark/aozora-api/workflows/vulns/badge.svg" alt="check vulns"></a>
<a href="https://github.com/goark/aozora-api/actions"><img src="https://github.com/goark/aozora-api/workflows/lint/badge.svg" alt="lint status"></a>
<a href="https://raw.githubusercontent.com/goark/aozora-api/master/LICENSE"><img src="https://img.shields.io/badge/license-Apache%202-blue.svg" alt="GitHub license"></a>
<a href="https://github.com/goark/aozora-api/releases/latest"><img src="https://img.shields.io/github/release/goark/aozora-api.svg" alt="GitHub release"></a></p>
<h2>インポート</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">"github.com/goark/aozora-api"</span>
</span></span></code></pre></div><h2>簡単な使い方</h2>
<h3>作品情報の取得</h3>
<p>たとえばタイトル名「天に積む宝」著者名「富田倫生」を検索キーとして<a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API から作品情報を取得してみる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s">"bytes"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"fmt"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"io"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"os"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="s">"github.com/goark/aozora-api"</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">b</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchBooksRaw</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithBookTitle</span><span class="p">(</span><span class="s">"/天に積む宝/"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithBookAuthor</span><span class="p">(</span><span class="s">"富田倫生"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">io</span><span class="p">.</span><span class="nf">Copy</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">bytes</span><span class="p">.</span><span class="nf">NewReader</span><span class="p">(</span><span class="nx">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>検索オプションは以下の関数と連動している。
これらの関数を<a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.SearchBooksRaw()</code> 関数の引数に指定する。</p>
<table>
<thead>
<tr>
<th style="text-align:right">オプション名</th>
<th>対応する関数</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:right"><code>title</code></td>
<td><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.WithBookTitle(string)</code></td>
</tr>
<tr>
<td style="text-align:right"><code>author</code></td>
<td><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.WithBookAuthor(string)</code></td>
</tr>
<tr>
<td style="text-align:right"><code>fields</code></td>
<td><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.WithBookFields(string)</code><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></td>
</tr>
<tr>
<td style="text-align:right"><code>limit</code></td>
<td><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.WithBookLimit(int)</code></td>
</tr>
<tr>
<td style="text-align:right"><code>skip</code></td>
<td><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.WithBookSkip(int)</code></td>
</tr>
<tr>
<td style="text-align:right"><code>after</code></td>
<td><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.WithBookAfter(time.Time)</code></td>
</tr>
</tbody>
</table>
<p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.SearchBooksRaw()</code> 関数は API を通じて取得した結果(JSON 形式)をそのまま返す。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go run sample.go | jq .
</span></span><span class="line"><span class="cl">[
</span></span><span class="line"><span class="cl"> {
</span></span><span class="line"><span class="cl"> "book_id": 59489,
</span></span><span class="line"><span class="cl"> "title": "「天に積む宝」のふやし方、へらし方",
</span></span><span class="line"><span class="cl"> "title_yomi": "「てんにつむたから」のふやしかた、へらしかた",
</span></span><span class="line"><span class="cl"> "title_sort": "てんにつむたからのふやしかたへらしかた",
</span></span><span class="line"><span class="cl"> "subtitle": "著作権保護期間延長が青空文庫にもたらすもの",
</span></span><span class="line"><span class="cl"> "subtitle_yomi": "ちょさくけんほごきかんえんちょうがあおぞらぶんこにもたらすもの",
</span></span><span class="line"><span class="cl"> "original_title": "",
</span></span><span class="line"><span class="cl"> "first_appearance": "",
</span></span><span class="line"><span class="cl"> "ndc_code": "",
</span></span><span class="line"><span class="cl"> "font_kana_type": "新字新仮名",
</span></span><span class="line"><span class="cl"> "copyright": true,
</span></span><span class="line"><span class="cl"> "release_date": "2019-01-01T00:00:00.000Z",
</span></span><span class="line"><span class="cl"> "last_modified": "2018-12-24T00:00:00.000Z",
</span></span><span class="line"><span class="cl"> "card_url": "https://www.aozora.gr.jp/cards/000055/card59489.html",
</span></span><span class="line"><span class="cl"> "base_book_1": "インターネット図書館 青空文庫",
</span></span><span class="line"><span class="cl"> "base_book_1_publisher": "はる書房",
</span></span><span class="line"><span class="cl"> "base_book_1_1st_edition": "2005(平成17)年11月15日",
</span></span><span class="line"><span class="cl"> "base_book_1_edition_input": "2005(平成17)年11月15日初版第1刷",
</span></span><span class="line"><span class="cl"> "base_book_1_edition_proofing": "2005(平成17)年11月15日初版第1刷",
</span></span><span class="line"><span class="cl"> "base_book_1_parent": "",
</span></span><span class="line"><span class="cl"> "base_book_1_parent_publisher": "",
</span></span><span class="line"><span class="cl"> "base_book_1_parent_1st_edition": "",
</span></span><span class="line"><span class="cl"> "base_book_2": "",
</span></span><span class="line"><span class="cl"> "base_book_2_publisher": "",
</span></span><span class="line"><span class="cl"> "base_book_2_1st_edition": "",
</span></span><span class="line"><span class="cl"> "base_book_2_edition_input": "",
</span></span><span class="line"><span class="cl"> "base_book_2_edition_proofing": "",
</span></span><span class="line"><span class="cl"> "base_book_2_parent": "",
</span></span><span class="line"><span class="cl"> "base_book_2_parent_publisher": "",
</span></span><span class="line"><span class="cl"> "base_book_2_parent_1st_edition": "",
</span></span><span class="line"><span class="cl"> "input": "富田晶子",
</span></span><span class="line"><span class="cl"> "proofing": "雪森",
</span></span><span class="line"><span class="cl"> "text_url": "https://www.aozora.gr.jp/cards/000055/files/59489_txt_66663.zip",
</span></span><span class="line"><span class="cl"> "text_last_modified": "2018-12-24T00:00:00.000Z",
</span></span><span class="line"><span class="cl"> "text_encoding": "ShiftJIS",
</span></span><span class="line"><span class="cl"> "text_charset": "JIS X 0208",
</span></span><span class="line"><span class="cl"> "text_updated": 0,
</span></span><span class="line"><span class="cl"> "html_url": "https://www.aozora.gr.jp/cards/000055/files/59489_66714.html",
</span></span><span class="line"><span class="cl"> "html_last_modified": "2018-12-24T00:00:00.000Z",
</span></span><span class="line"><span class="cl"> "html_encoding": "ShiftJIS",
</span></span><span class="line"><span class="cl"> "html_charset": "JIS X 0208",
</span></span><span class="line"><span class="cl"> "html_updated": 0,
</span></span><span class="line"><span class="cl"> "authors": [
</span></span><span class="line"><span class="cl"> {
</span></span><span class="line"><span class="cl"> "person_id": 55,
</span></span><span class="line"><span class="cl"> "last_name": "富田",
</span></span><span class="line"><span class="cl"> "first_name": "倫生"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> ]
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl">]
</span></span></code></pre></div><p>図書カード No. が分かっている場合は <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.LookupBookRaw()</code> 関数で作品情報を取得できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line hl"><span class="cl"> <span class="nx">b</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupBookRaw</span><span class="p">(</span><span class="mi">59489</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">io</span><span class="p">.</span><span class="nf">Copy</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">bytes</span><span class="p">.</span><span class="nf">NewReader</span><span class="p">(</span><span class="nx">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.SearchBooks()</code> または <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.LookupBook()</code> 関数を使うと結果を <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Book</code> 構造体で返す。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">book</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupBook</span><span class="p">(</span><span class="mi">59489</span><span class="p">)</span>
</span></span></code></pre></div><p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Book</code> 構造体の構成は以下の通り。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">//Author is entity class of author and translator info.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Author</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">PersonID</span> <span class="kt">int</span> <span class="s">`json:"person_id"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">LastName</span> <span class="kt">string</span> <span class="s">`json:"last_name"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">FirstName</span> <span class="kt">string</span> <span class="s">`json:"first_name"`</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//Book is entity class of book info.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Book</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BookID</span> <span class="kt">int</span> <span class="s">`json:"book_id"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Title</span> <span class="kt">string</span> <span class="s">`json:"title"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">TitleYomi</span> <span class="kt">string</span> <span class="s">`json:"title_yomi"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">TitleSort</span> <span class="kt">string</span> <span class="s">`json:"title_sort"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Subtitle</span> <span class="kt">string</span> <span class="s">`json:"subtitle"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">SubtitleYomi</span> <span class="kt">string</span> <span class="s">`json:"subtitle_yomi"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">OriginalTitle</span> <span class="kt">string</span> <span class="s">`json:"original_title"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">FirstAppearance</span> <span class="kt">string</span> <span class="s">`json:"first_appearance"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">NDCCode</span> <span class="kt">string</span> <span class="s">`json:"ndc_code"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">FontKanaType</span> <span class="kt">string</span> <span class="s">`json:"font_kana_type"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Copyright</span> <span class="kt">bool</span> <span class="s">`json:"copyright"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">ReleaseDate</span> <span class="nx">Date</span> <span class="s">`json:"release_date"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">LastModified</span> <span class="nx">Date</span> <span class="s">`json:"last_modified"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">CardURL</span> <span class="kt">string</span> <span class="s">`json:"card_url"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBook1</span> <span class="kt">string</span> <span class="s">`json:"base_book_1"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookPublisher1</span> <span class="kt">string</span> <span class="s">`json:"base_book_1_publisher"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookFirstEdition1</span> <span class="kt">string</span> <span class="s">`json:"base_book_1_1st_edition"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookEditionInput1</span> <span class="kt">string</span> <span class="s">`json:"base_book_1_edition_input"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookEditionProofing1</span> <span class="kt">string</span> <span class="s">`json:"base_book_1_edition_proofing"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookParent1</span> <span class="kt">string</span> <span class="s">`json:"base_book_1_parent"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookParentPublisher1</span> <span class="kt">string</span> <span class="s">`json:"base_book_1_parent_publisher"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookParentFirstEdition1</span> <span class="kt">string</span> <span class="s">`json:"base_book_1_parent_1st_edition"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBook2</span> <span class="kt">string</span> <span class="s">`json:"base_book_2"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookPublisher2</span> <span class="kt">string</span> <span class="s">`json:"base_book_2_publisher"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookFirstEdition2</span> <span class="kt">string</span> <span class="s">`json:"base_book_2_1st_edition"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookEditionInput2</span> <span class="kt">string</span> <span class="s">`json:"base_book_2_edition_input"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookEditionProofing2</span> <span class="kt">string</span> <span class="s">`json:"base_book_2_edition_proofing"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookParent2</span> <span class="kt">string</span> <span class="s">`json:"base_book_2_parent"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookParentPublisher2</span> <span class="kt">string</span> <span class="s">`json:"base_book_2_parent_publisher"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">BaseBookParentFirstEdition2</span> <span class="kt">string</span> <span class="s">`json:"base_book_2_parent_1st_edition"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Input</span> <span class="kt">string</span> <span class="s">`json:"input"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Proofing</span> <span class="kt">string</span> <span class="s">`json:"proofing"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">TextURL</span> <span class="kt">string</span> <span class="s">`json:"text_url"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">TextLastModified</span> <span class="nx">Date</span> <span class="s">`json:"text_last_modified"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">TextEncoding</span> <span class="kt">string</span> <span class="s">`json:"text_encoding"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">TextCharset</span> <span class="kt">string</span> <span class="s">`json:"text_charset"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">TextUpdated</span> <span class="kt">int</span> <span class="s">`json:"text_updated"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">HTMLURL</span> <span class="kt">string</span> <span class="s">`json:"html_url"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">HTMLLastModified</span> <span class="nx">Date</span> <span class="s">`json:"html_last_modified"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">HTMLEncoding</span> <span class="kt">string</span> <span class="s">`json:"html_encoding"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">HTMLCharset</span> <span class="kt">string</span> <span class="s">`json:"html_charset"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">HTMLUpdated</span> <span class="kt">int</span> <span class="s">`json:"html_updated"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Translators</span> <span class="p">[]</span><span class="nx">Author</span> <span class="s">`json:"translators"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Authors</span> <span class="p">[]</span><span class="nx">Author</span> <span class="s">`json:"authors"`</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3>作家情報の取得</h3>
<p>今度は作家名「富田倫生」を検索キーとして<a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API から作家情報を取得してみる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">b</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchPersonsRaw</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithPersonName</span><span class="p">(</span><span class="s">"富田倫生"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">io</span><span class="p">.</span><span class="nf">Copy</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">bytes</span><span class="p">.</span><span class="nf">NewReader</span><span class="p">(</span><span class="nx">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>実行結果は以下の通り。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go run sample.go | jq .
</span></span><span class="line"><span class="cl">[
</span></span><span class="line"><span class="cl"> {
</span></span><span class="line"><span class="cl"> "person_id": 55,
</span></span><span class="line"><span class="cl"> "last_name": "富田",
</span></span><span class="line"><span class="cl"> "first_name": "倫生",
</span></span><span class="line"><span class="cl"> "last_name_yomi": "とみた",
</span></span><span class="line"><span class="cl"> "first_name_yomi": "みちお",
</span></span><span class="line"><span class="cl"> "last_name_sort": "とみた",
</span></span><span class="line"><span class="cl"> "first_name_sort": "みちお",
</span></span><span class="line"><span class="cl"> "last_name_roman": "Tomita",
</span></span><span class="line"><span class="cl"> "first_name_roman": "Michio",
</span></span><span class="line"><span class="cl"> "date_of_birth": "1952-04-20",
</span></span><span class="line"><span class="cl"> "date_of_death": "2013-08-16",
</span></span><span class="line"><span class="cl"> "author_copyright": true
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl">]
</span></span></code></pre></div><p>作家 No. が分かっている場合は <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.LookupPersonRaw()</code> 関数で作品情報を取得できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line hl"><span class="cl"> <span class="nx">b</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupPersonRaw</span><span class="p">(</span><span class="mi">55</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">io</span><span class="p">.</span><span class="nf">Copy</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">bytes</span><span class="p">.</span><span class="nf">NewReader</span><span class="p">(</span><span class="nx">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.SearchPersons()</code> または <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.LookupPerson()</code> 関数を使うと結果を <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Person</code> 構造体で返す。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">person</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupPerson</span><span class="p">(</span><span class="mi">55</span><span class="p">)</span>
</span></span></code></pre></div><p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Person</code> 構造体の構成は以下の通り。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">//Person is entity class of person info.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Person</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">PersonID</span> <span class="kt">int</span> <span class="s">`json:"person_id"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">LastName</span> <span class="kt">string</span> <span class="s">`json:"last_name"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">FirstName</span> <span class="kt">string</span> <span class="s">`json:"first_name"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">LastNameYomi</span> <span class="kt">string</span> <span class="s">`json:"last_name_yomi"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">FirstNameYomi</span> <span class="kt">string</span> <span class="s">`json:"first_name_yomi"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">LastNameSort</span> <span class="kt">string</span> <span class="s">`json:"last_name_sort"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">FirstNameSort</span> <span class="kt">string</span> <span class="s">`json:"first_name_sort"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">LastNameRoman</span> <span class="kt">string</span> <span class="s">`json:"last_name_roman"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">FirstNameRoman</span> <span class="kt">string</span> <span class="s">`json:"first_name_roman"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">DateOfBirth</span> <span class="nx">Date</span> <span class="s">`json:"date_of_birth"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">DateOfDeath</span> <span class="nx">Date</span> <span class="s">`json:"date_of_death"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">AuthorCopyright</span> <span class="kt">bool</span> <span class="s">`json:"author_copyright"`</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3>工作員情報の取得</h3>
<p>更に更に工作員名「雪森」を検索キーとして<a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API から工作員情報を取得してみる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">b</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchWorkersRaw</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithWorkerName</span><span class="p">(</span><span class="s">"雪森"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">io</span><span class="p">.</span><span class="nf">Copy</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">bytes</span><span class="p">.</span><span class="nf">NewReader</span><span class="p">(</span><span class="nx">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>実行結果は以下の通り。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go run sample.go | jq .
</span></span><span class="line"><span class="cl">[
</span></span><span class="line"><span class="cl"> {
</span></span><span class="line"><span class="cl"> "id": 845,
</span></span><span class="line"><span class="cl"> "name": "雪森"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl">]
</span></span></code></pre></div><p>工作員 No. が分かっている場合は <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.LookupWorkerRaw()</code> 関数で作品情報を取得できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line hl"><span class="cl"> <span class="nx">b</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupWorkerRaw</span><span class="p">(</span><span class="mi">845</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">io</span><span class="p">.</span><span class="nf">Copy</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">bytes</span><span class="p">.</span><span class="nf">NewReader</span><span class="p">(</span><span class="nx">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.SearchWorkers()</code> または <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client.LookupWorker()</code> 関数を使うと結果を <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Worker</code> 構造体で返す。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">worker</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupWorker</span><span class="p">(</span><span class="mi">845</span><span class="p">)</span>
</span></span></code></pre></div><p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Worker</code> 構造体の構成は以下の通り。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">//Worker is entity class of worker info.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">Worker</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">WorkerID</span> <span class="kt">int</span> <span class="s">`json:"id"`</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Name</span> <span class="kt">string</span> <span class="s">`json:"name"`</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2>Server および Client インスタンスの生成</h2>
<p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client</code> インスタンスの生成は <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.DefaultClient()</code> 関数で簡単に行えるが,もう少し細かい制御もできる。</p>
<h3><a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API サーバを指定する</h3>
<p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.New()</code> 関数で <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Server</code> インスタンスを生成できるが,引数としてサーバを指定できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">server</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithScheme</span><span class="p">(</span><span class="s">"http"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithServerName</span><span class="p">(</span><span class="s">"pubserver2.herokuapp.com"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><p>これで<a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API サーバとして <code>http://pubserver2.herokuapp.com</code> を指定できた。</p>
<h3>http.Client を指定する</h3>
<p><a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Server.CreateClient()</code> 関数により <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.Client</code> インスタンスを生成できるが,引数として <code>http.Client</code> インスタンスを指定できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">client</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithScheme</span><span class="p">(</span><span class="s">"http"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithServerName</span><span class="p">(</span><span class="s">"pubserver2.herokuapp.com"</span><span class="p">),</span>
</span></span><span class="line hl"><span class="cl"><span class="p">).</span><span class="nf">CreateClient</span><span class="p">(</span><span class="nx">aozora</span><span class="p">.</span><span class="nf">WithHttpClient</span><span class="p">(</span><span class="o">&</span><span class="nx">http</span><span class="p">.</span><span class="nx">Client</span><span class="p">{}))</span>
</span></span></code></pre></div><p>ちなみに <a href="https://github.com/goark/aozora-api" title="goark/aozora-api: APIs for Aozora-bunko RESTful Service by Golang"><code>aozora</code></a><code>.DefaultClient()</code> 関数は以下の記述と同等である。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">client</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithScheme</span><span class="p">(</span><span class="s">"http"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithServerName</span><span class="p">(</span><span class="s">"www.aozorahack.net"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">).</span><span class="nf">CreateClient</span><span class="p">(</span><span class="nx">aozora</span><span class="p">.</span><span class="nf">WithHttpClient</span><span class="p">(</span><span class="o">&</span><span class="nx">http</span><span class="p">.</span><span class="nx">Client</span><span class="p">{}))</span>
</span></span></code></pre></div><h2>context.Context 付きのアクセス</h2>
<p><a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API アクセスの際に <a href="https://golang.org/pkg/context/" title="context - The Go Programming Language"><code>context</code></a><code>.Context</code> を付けることができる。</p>
<h3>作品情報の取得</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">rawjson</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchBooksRawContext</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithBookTitle</span><span class="p">(</span><span class="s">"/天に積む宝/"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithBookAuthor</span><span class="p">(</span><span class="s">"富田倫生"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">books</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchBooksContext</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithBookTitle</span><span class="p">(</span><span class="s">"/天に積む宝/"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithBookAuthor</span><span class="p">(</span><span class="s">"富田倫生"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">rawjson</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupBookRawContext</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span> <span class="mi">59489</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">book</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupBookContext</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span> <span class="mi">59489</span><span class="p">)</span>
</span></span></code></pre></div><h3>作家情報の取得</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">rawjson</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchPersonsRawContext</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithPersonName</span><span class="p">(</span><span class="s">"富田倫生"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">persons</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchPersonsContext</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithPersonName</span><span class="p">(</span><span class="s">"富田倫生"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">rawjson</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupPersonRawContext</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span> <span class="mi">55</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">person</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupPersonContext</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span> <span class="mi">55</span><span class="p">)</span>
</span></span></code></pre></div><h3>工作員情報の取得</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">rawjson</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchWorkersRawContext</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithWorkerName</span><span class="p">(</span><span class="s">"雪森"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">workers</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">SearchWorkersContext</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">aozora</span><span class="p">.</span><span class="nf">WithWorkerName</span><span class="p">(</span><span class="s">"雪森"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">rawjson</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupWorkerRawContext</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span> <span class="mi">845</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">worker</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">aozora</span><span class="p">.</span><span class="nf">DefaultClient</span><span class="p">().</span><span class="nf">LookupWorkerContext</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span> <span class="mi">845</span><span class="p">)</span>
</span></span></code></pre></div><h2>ブックマーク</h2>
<ul>
<li><a href="https://text.baldanders.info/remark/2019/08/about-aozorahack/">#aozorahack に関する覚え書き</a></li>
</ul>
<h2>参考図書</h2>
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/B099928SJD?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/416Stewy0NS._SL160_.jpg" width="123" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/B099928SJD?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">プログラミング言語Go</a></dt>
<dd>アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)</dd>
<dd>丸善出版 2016-06-20 (Release 2021-07-13)</dd>
<dd>Kindle版</dd>
<dd>B099928SJD (ASIN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想は<a href="https://text.baldanders.info/remark/2016/07/go-programming-language/" >こちら</a>。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2021-05-22">2021-05-22</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- プログラミング言語Go -->
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/4899840721?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/51V8S7TXJ5L._SL160_.jpg" width="112" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/4899840721?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">インターネット図書館 青空文庫</a></dt>
<dd>野口 英司 (著)</dd>
<dd>はる書房 2005-11-01</dd>
<dd>単行本</dd>
<dd>4899840721 (ASIN), 9784899840725 (EAN), 4899840721 (ISBN)</dd>
<dd>評価<abbr class="rating fa-sm" title="4"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="far fa-star"></i></abbr></dd>
</dl>
<p class="description">青空文庫の活動について紹介。作品を収録した DVD も付いてる! 巻末に載っている<a href="https://www.tomita-michio.jp/">富田倫生</a>さんの文章は<a href="https://www.aozora.gr.jp/cards/000055/card59489.html">青空文庫に収録</a>されている。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2019-01-02">2019-01-02</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- インターネット図書館 青空文庫 -->
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/4756117074?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/5131GA04AHL._SL160_.jpg" width="108" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/4756117074?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">本の未来 (Ascii books)</a></dt>
<dd>富田 倫生 (著)</dd>
<dd>アスキー 1997-02-01</dd>
<dd>単行本</dd>
<dd>4756117074 (ASIN), 9784756117076 (EAN), 4756117074 (ISBN)</dd>
<dd>評価<abbr class="rating fa-sm" title="4"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="far fa-star"></i></abbr></dd>
</dl>
<p class="description">e-book の未来を予見する試みの書。あるいは本とコンピュータの関係について。<a href="https://www.aozora.gr.jp/cards/000055/card56499.html">青空文庫にも収録</a>されている。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2019-01-02">2019-01-02</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- 本の未来 -->
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><code>fields</code> オプションは効いてない感じ? <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
書籍データ取得ツール books-data v0.3.0 をリリースした
tag:text.Baldanders.info,2019-08-12:/release/2019/08/books-data-v0_3_0-is-released/
2019-08-12T06:10:56+00:00
2020-01-05T11:59:50+00:00
ようやく青空文庫 API に対応したですよ。これで個人的に欲しい機能は一通り揃ったかな。
Spiegel
https://baldanders.info/profile/
<p>書籍データ取得ツール <a href="https://github.com/spiegel-im-spiegel/books-data" title="spiegel-im-spiegel/books-data: Search for Books Data">books-data</a> v0.3.0 をリリースした。</p>
<ul>
<li><a href="https://github.com/spiegel-im-spiegel/books-data/releases/tag/v0.3.0">Release v0.3.0 · spiegel-im-spiegel/books-data · GitHub</a></li>
</ul>
<p>ようやく<a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API に対応したですよ。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data -h
</span></span><span class="line"><span class="cl">Search for books data
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Usage:
</span></span><span class="line"><span class="cl"> books-data [flags]
</span></span><span class="line"><span class="cl"> books-data [command]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Available Commands:
</span></span><span class="line"><span class="cl"> help Help about any command
</span></span><span class="line"><span class="cl"> history Lookup review data from history log
</span></span><span class="line"><span class="cl"> review Make review data
</span></span><span class="line"><span class="cl"> search Search for books data
</span></span><span class="line"><span class="cl"> version Print the version number
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Flags:
</span></span><span class="line"><span class="cl"> --access-key string Config: PA-API Access Key ID
</span></span><span class="line hl"><span class="cl"> -c, --aozora-card string Aozora-bunko card no.
</span></span><span class="line"><span class="cl"> -a, --asin string Amazon ASIN code
</span></span><span class="line"><span class="cl"> --associate-tag string Config: PA-API Associate Tag
</span></span><span class="line"><span class="cl"> --config string Config file (default $HOME/.books-data.yaml)
</span></span><span class="line"><span class="cl"> --debug for debug
</span></span><span class="line"><span class="cl"> -h, --help help for books-data
</span></span><span class="line"><span class="cl"> -i, --isbn string ISBN code
</span></span><span class="line"><span class="cl"> --marketplace string Config: PA-API Marketplace (default "webservices.amazon.co.jp")
</span></span><span class="line"><span class="cl"> -l, --review-log string Config: Review log file (JSON format)
</span></span><span class="line"><span class="cl"> --secret-key string Config: PA-API Secret Access Key
</span></span><span class="line"><span class="cl"> -t, --template-file string Template file for formatted output
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Use "books-data [command] --help" for more information about a command.</span></span></code></pre></div>
<p>これに伴い <a href="https://github.com/spiegel-im-spiegel/aozora-api" title="spiegel-im-spiegel/aozora-api: APIs for Aozora-bunko RESTful Service by Golang">aozora-api</a> パッケージも公開し <a href="https://github.com/spiegel-im-spiegel/books-data" title="spiegel-im-spiegel/books-data: Search for Books Data">books-data</a> に組み込んでいる。
ちなみに <a href="https://github.com/spiegel-im-spiegel/aozora-api" title="spiegel-im-spiegel/aozora-api: APIs for Aozora-bunko RESTful Service by Golang">aozora-api</a> パッケージは<a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a> API をフルサポートしている。</p>
<p>たとえば谷崎潤一郎さんの「陰翳礼讃」の図書カードNo.は 56642 なので</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data search -c 56642 | jq .
</span></span><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl"> "Type": "aozora",
</span></span><span class="line"><span class="cl"> "ID": "56642",
</span></span><span class="line"><span class="cl"> "Title": "陰翳礼讃",
</span></span><span class="line"><span class="cl"> "URL": "https://www.aozora.gr.jp/cards/001383/card56642.html",
</span></span><span class="line"><span class="cl"> "Image": {
</span></span><span class="line"><span class="cl"> "URL": ""
</span></span><span class="line"><span class="cl"> },
</span></span><span class="line"><span class="cl"> "ProductType": "青空文庫",
</span></span><span class="line"><span class="cl"> "Authors": [
</span></span><span class="line"><span class="cl"> "谷崎 潤一郎"
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "Codes": [
</span></span><span class="line"><span class="cl"> {
</span></span><span class="line"><span class="cl"> "Name": "図書カードNo.",
</span></span><span class="line"><span class="cl"> "Value": "56642"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "PublicationDate": "2016-08-23",
</span></span><span class="line"><span class="cl"> "LastRelease": "2016-06-10",
</span></span><span class="line"><span class="cl"> "PublicDomain": true,
</span></span><span class="line"><span class="cl"> "FirstAppearance": "「経済往来」1933(昭和8)年12月号、1934(昭和9)年1月号",
</span></span><span class="line"><span class="cl"> "Service": {
</span></span><span class="line"><span class="cl"> "Name": "aozorahack",
</span></span><span class="line"><span class="cl"> "URL": "https://aozorahack.org/"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl">}
</span></span></code></pre></div><p>てな感じで情報が取れる。
翻訳作品も対応している。
たとえば「ニャルラトホテプ」なら</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data search -c 56839 | jq .
</span></span><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl"> "Type": "aozora",
</span></span><span class="line"><span class="cl"> "ID": "56839",
</span></span><span class="line"><span class="cl"> "Title": "ニャルラトホテプ",
</span></span><span class="line"><span class="cl"> "OriginalTitle": "NYARLATHOTEP",
</span></span><span class="line"><span class="cl"> "URL": "https://www.aozora.gr.jp/cards/001699/card56839.html",
</span></span><span class="line"><span class="cl"> "Image": {
</span></span><span class="line"><span class="cl"> "URL": ""
</span></span><span class="line"><span class="cl"> },
</span></span><span class="line"><span class="cl"> "ProductType": "青空文庫",
</span></span><span class="line"><span class="cl"> "Authors": [
</span></span><span class="line"><span class="cl"> "ラヴクラフト ハワード・フィリップス"
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "Creators": [
</span></span><span class="line"><span class="cl"> {
</span></span><span class="line"><span class="cl"> "Name": "大久保 ゆう",
</span></span><span class="line"><span class="cl"> "Role": "翻訳"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "Codes": [
</span></span><span class="line"><span class="cl"> {
</span></span><span class="line"><span class="cl"> "Name": "図書カードNo.",
</span></span><span class="line"><span class="cl"> "Value": "56839"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "PublicationDate": "2014-04-04",
</span></span><span class="line"><span class="cl"> "LastRelease": "2015-08-19",
</span></span><span class="line"><span class="cl"> "Service": {
</span></span><span class="line"><span class="cl"> "Name": "aozorahack",
</span></span><span class="line"><span class="cl"> "URL": "https://aozorahack.org/"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl">}
</span></span></code></pre></div><p>という感じ。</p>
<p><a href="https://www.aozora.gr.jp/" title="青空文庫 Aozora Bunko">青空文庫</a>は<a href="https://text.baldanders.info/remark/2019/03/book-cover-for-aozora-bunko/" title="「青空文庫」用の書影がほしい">書影データを持ってない</a>のが寂しい限りだが,自前で用意できるならレビューデータ作成時に <code>--image-url</code> オプションを使って</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ books-data review -c 56642 --image-url https://text.baldanders.info/images/aozora/card56839.svg -r 4 "SAN 値が下がる。" | jq .
</span></span><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl"> "Book": {
</span></span><span class="line"><span class="cl"> "Type": "aozora",
</span></span><span class="line"><span class="cl"> "ID": "56642",
</span></span><span class="line"><span class="cl"> "Title": "陰翳礼讃",
</span></span><span class="line"><span class="cl"> "URL": "https://www.aozora.gr.jp/cards/001383/card56642.html",
</span></span><span class="line"><span class="cl"> "Image": {
</span></span><span class="line"><span class="cl"> "URL": "https://text.baldanders.info/images/aozora/card56839.svg"
</span></span><span class="line"><span class="cl"> },
</span></span><span class="line"><span class="cl"> "ProductType": "青空文庫",
</span></span><span class="line"><span class="cl"> "Authors": [
</span></span><span class="line"><span class="cl"> "谷崎 潤一郎"
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "Codes": [
</span></span><span class="line"><span class="cl"> {
</span></span><span class="line"><span class="cl"> "Name": "図書カードNo.",
</span></span><span class="line"><span class="cl"> "Value": "56642"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "PublicationDate": "2016-08-23",
</span></span><span class="line"><span class="cl"> "LastRelease": "2016-06-10",
</span></span><span class="line"><span class="cl"> "PublicDomain": true,
</span></span><span class="line"><span class="cl"> "FirstAppearance": "「経済往来」1933(昭和8)年12月号、1934(昭和9)年1月号",
</span></span><span class="line"><span class="cl"> "Service": {
</span></span><span class="line"><span class="cl"> "Name": "aozorahack",
</span></span><span class="line"><span class="cl"> "URL": "https://aozorahack.org/"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> },
</span></span><span class="line"><span class="cl"> "Date": "2019-08-12",
</span></span><span class="line"><span class="cl"> "Rating": 4,
</span></span><span class="line"><span class="cl"> "Star": [
</span></span><span class="line"><span class="cl"> true,
</span></span><span class="line"><span class="cl"> true,
</span></span><span class="line"><span class="cl"> true,
</span></span><span class="line"><span class="cl"> true,
</span></span><span class="line"><span class="cl"> false
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "Description": "SAN 値が下がる。"
</span></span><span class="line"><span class="cl">}
</span></span></code></pre></div><p>などとすれば書影データを補完できる。
これで適当なテンプレートを噛ませれば</p>
<div class="hreview">
<div class="photo"><a href="https://www.aozora.gr.jp/cards/001699/card56839.html"><img src="https://text.baldanders.info/images/aozora/card56839.svg" width="110" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.aozora.gr.jp/cards/001699/card56839.html">ニャルラトホテプ</a></dt>
<dd>原題: NYARLATHOTEP</dd>
<dd>ラヴクラフト ハワード・フィリップス, 大久保 ゆう (翻訳)</dd>
<dd> 2014-04-04 (Release 2015-08-19)</dd>
<dd>青空文庫</dd>
<dd>56839 (図書カードNo.)</dd>
<dd>評価<abbr class="rating fa-sm" title="4"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="far fa-star"></i></abbr></dd>
</dl>
<p class="description">SAN 値が下がる。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2019-03-28">2019-03-28</abbr> (powered by <a href="https://aozorahack.org/">aozorahack</a>)</p>
</div> <!-- ニャルラトホテプ -->
<p>てな感じに仕上げることができる。</p>
<p>これで個人的に欲しい機能は一通り揃ったかな。</p>
<h2>ブックマーク</h2>
<ul>
<li><a href="https://text.baldanders.info/remark/2019/08/about-aozorahack/">#aozorahack に関する覚え書き</a></li>
<li><a href="https://text.baldanders.info/remark/2019/03/book-cover-for-aozora-bunko/">「青空文庫」用の書影がほしい</a></li>
<li><a href="https://text.baldanders.info/release/aozora-api-package-for-golang/">Go 言語用青空文庫 API クライアント・パッケージ</a></li>
</ul>