Hugoの外部API利用機能
1. Hugoで外部APIデータの取得
1-1. HugoでData-Driven Content機能を利用する
Hugoで外部APIのURLで取得したCSVやJSONデータを利用できるData-Driven Content機能があります。
文書生成時で取得したデータです(ページ表示の毎アクセス時ではありません)。
1-2. WEB APIのテスト
http://project.iw3.org/zip_search_x0401/ - ZIP SEARCH API SERVICE 「JIS X0401」対応版ver 1.0.0
サンプル例としてIW3 PROJECTのページで紹介されている以下の例でテスト。
http://api.thni.net/jzip/X0401/JSON/郵便番号上3桁の数値/郵便番号下4桁の数値.js
郵便番号 => 住所を返してくれるWEB APIだ。
$ curl http://api.thni.net/jzip/X0401/JSON/753/0070.js
{ "state":"35", "stateName":"山口県", "city":"山口市", "street":"白石" }
1-3. Shortcode呼び出しを作成
Data-Driven Contentは記事のMarkdownファイルではなく、HTMLで記述する部分で機能するものであるため、 Shortcodeを作ってその中に記述します。
- layouts/shortcodes/zipaddress.html
{{ $dataJ := getJSON "http://api.thni.net/jzip/X0401/JSON/" (.Get 0) "/" (.Get 1) ".js" }}
<ul>
<li>state = {{ $dataJ.state}}</li>
<li>stateName = {{ $dataJ.stateName}}</li>
<li>city = {{ $dataJ.city}}</li>
<li>street = {{ $dataJ.street}}</li>
</ul>
Hugo文書のMarkdown中で
{ {< zipaddress "753" "0070" >} }
:置き換え{{}}
とすると表示上Shortcodeで変換されて
state = 35
stateName = 山口県
city = 山口市
street = 白石
これはページ閲覧のたびに毎回データが取得されなおされるのではなく、Hugoはあくまでも静的なサイトジェネレーターであるので、ページがビルドされる時に取得されます。
またページがビルドされる時にも一度取得されたJSONデータがあると、データがキャッシュされて再利用されます。
1-4. Data-Driven Contentのデータキャッシュ
Data-Driven Contentでは一度取得されたデータは公式サイトの説明にあるようにキャッシュされます。
hugoに–ignoreCacheオプションを渡せば、キャッシュされませんが、デフォルトでは一旦取得した結果は $TMPDIR/hugo_cache/以下に保存されます。$TMPDIRはシステムや環境によってディレクトリは違います。
サーバー起動してビルドが走った際のキャッシュデータ
$ ls $TMPDIR/hugo_cache/my-blog/filecache/getjson/
尚、キャッシュのディレクトリを変更する場合、config.tomlで設定します。