はじめに

HugoでAmazonの商品へのリンクを作成するためにShortcodeを用意して利用しているのだけど、そのShortcodeで利用している amazon-product-json というツールをAmazon側のAPIの仕様がもろもろ変わったので、リニューアルした。

Amazon PA-API Proxy

longkey1/amazon-pa-api-proxy

主な変更点

  • 名前をamazon-pa-api-proxy へ変更
  • ファイルじゃなくて環境変数でいろいろ設定出来るように
  • PA-API v5に対応
  • APIのRate Limitに配慮
  • フレームワークを使うのをやめたので少し軽量化

使い方

環境変数を設定する。
例えば、こんな感じ。

export APAP_AMAZON_ASSOCIATE_TAG="longkey1-22"
export APAP_AMAZON_ACCESS_KEY="foo"
export APAP_AMAZON_SECRET_KEY="bar"
export APAP_AMAZON_LOCALE="Japan"

そして起動。

$ amazon-pa-api-proxy

無事起動したら、http://localhost:1323/items/{asin}のようにASINを渡せば、JSONが返ってきたらOK。

Hugoでの使用例

参考になるか分からないけど、自分のHugoでの使用例を載せておく。

config.toml

まずは、amazon-pa-api-proxyのベースURLを定義しておく。

amazonPAAPIProxyBaseURL = "http://localhost:1323/items/"

amazon.html

実際のshortcodeのテンプレートはこんな感じ。
自分の場合は、画像サイズを出し分けたいので、こんな感じで分けている。
あと、文中にテキストリンクを入れたいときもあるので、テキストオンリーのリンクも作れるようにしてある。

{{ $asin := .Get "asin" }}
{{ $type := .Get "type" }}
{{ $json := getJSON .Site.Params.AmazonPAAPIProxyBaseURL $asin }}
{{ $item := index $json.ItemsResult.Items 0 }}
{{ $title := $item.ItemInfo.Title.DisplayValue }}

<div class="amazon-box">
  {{- if eq $type "text" }}
    <a href="{{ $item.DetailPageURL }}" target="_blank">{{ $title }}</a>
  {{- else if eq $type "small" }}
    {{ $image := $item.Images.Primary.Medium }}
    <div class="amazon-image"><a href="{{ $item.DetailPageURL }}" target="_blank"><img src="{{ $image.URL }}" alt="{{ $title }}" width="{{ $image.Width }}" height="{{ $image.Height }}"></img></a></div>
    <p class="amazon-title"><a href="{{ $item.DetailPageURL }}" target="_blank">{{ $title }}</a></p>
  {{- else if eq $type "medium" }}
    {{ $image := $item.Images.Primary.Medium }}
    <div class="amazon-image"><a href="{{ $item.DetailPageURL }}" target="_blank"><img src="{{ $image.URL }}" alt="{{ $title }}" width="{{ $image.Width }}" height="{{ $image.Height }}"></img></a></div>
    <p class="amazon-title"><a href="{{ $item.DetailPageURL }}" target="_blank">{{ $title }}</a></p>
  {{- else if eq $type "large" }}
    {{ $image := $item.Images.Primary.Medium }}
    <div class="amazon-image"><a href="{{ $item.DetailPageURL }}" target="_blank"><img src="{{ $image.URL }}" alt="{{ $title }}" width="{{ $image.Width }}" height="{{ $image.Height }}"></img></a></div>
    <p class="amazon-title"><a href="{{ $item.DetailPageURL }}" target="_blank">{{ $title }}</a></p>
  {{- end -}}
</div>

各記事内でのタグ使用例

{{< amazon asin="{asin}" type="large" >}}

おわりに

公開して2年以上経つけど、GitHubのStarも全然付かないので、気兼ねなくリネームしてみた。
とはいえ、自分はかれこれ2年以上使っているので、作って良かったなと思う。
これからも使っていきたいので、ぼちぼちメンテしていくつもり。