Amazon アイテム検索・情報取得ツール v0.2.1 をリリースした
なんか Amakuri の作者の方が amazon-item について言及してくださっていて
公開しているツールとはいえ万人に優しい作りではないので,少々あせってたり。 せめてバイナリをリリースしておこう。
というわけで amazon-item v0.2.1 をリリースした。
各種プラットフォーム用の実行バイナリを用意したので Go 言語のビルド環境なしに利用できる。 コードには MIT ライセンスを付与している。 ソースコード,実行バイナリともに自由にご利用下さい。
前の記事と重複するが,以下に使い方を簡単に説明しておこう。
事前準備
amazon-item を使うには Amazon Associate ID を持っていて Amazon Product Advertising API の Access Key および Secret Key まで取得済みであることが前提となる。 PA-API の各キーの取得方法はググると色々出てくるので,ここでは割愛する。
- AmazonのProduct Advertising APIの使い方 | Apitore blog
- 「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ①-アソシエイトID(タグ)登録編- | HPcode
2019年1月23日より PA-API の利用ポリシーが変更になったため,状況によってキーが取得できないことがあるが悪しからず。 これについては後述する。
必要な情報が取得できたら $HOME
ディレクトリ1 に .paapi.yaml
ファイルを作って値を格納しておく(ファイル・アクセス管理に注意)。
たとえばこんな感じ。
associate-tag: mytag-20
access-key: AKIAIOSFODNN7EXAMPLE
secret-key: 1234567890
なお associate-tag
とは Amazon Associate ID のことである。
amazon-item のインストール
amazon-item のリリースページから各種プラットフォーム向けの書庫ファイルをダウンロードする。
たとえば Windows 64bit 版なら amazon-item_0.2.1_Windows_64bit.zip
をダウンロードすればよい。
書庫ファイルを展開すると実行ファイル(amazon-item
または amazon-item.exe
)があるので,これを $PATH
の通っているディレクトリに置けば完了である2。
amazon-item はコマンドライン・ツールなので各種 shell あるいはコマンド・プロンプト上で使用する。 試しに以下のコマンドを叩いて動作確認しておこう。
$ amazon-item version
amazon-item 0.2.1
また -h
オプションで簡単な使い方が表示される。
$ amazon-item -h
Searching Amazon Items, Powered by Product Advertising API
Usage:
amazon-item [flags]
amazon-item [command]
Available Commands:
help Help about any command
lookup Lookup Amazon Item
review Make review data for Amazon item
search Search Amazon Items
version Print the version number
Flags:
--access-key string Access Key ID
--associate-tag string Associate Tag
--config string config file (default $HOME/.paapi.yaml)
-h, --help help for amazon-item
--marketplace string Marketplace (default "webservices.amazon.co.jp")
--secret-key string Secret Access Key
Use "amazon-item [command] --help" for more information about a command.
なお,書庫ファイルに入っている template/
フォルダ内のファイルは出力整形用のテンプレートファイルのサンプルである。
Amazon アイテムの検索
キーワードをもとに Amazon アイテムを検索するには amazon-item search
コマンドを使う。
たとえば以下のような感じでキーワードを指定する。
$ amazon-item search "数学ガール+フェルマーの最終定理+kindle"
検索結果は JSON 形式で標準出力に出力される。
たとえば jq コマンドを使えば JSON 出力を任意にフィルタリング・整形できる。
$ amazon-item search "数学ガール+フェルマーの最終定理+kindle" | jq .
またテンプレート・ファイルを指定することで任意のテキスト形式に整形することもできる。
たとえばサンプルの template/item-list.md
ファイルを使えば
$ amazon-item search -t template/item-list.md 数学ガール+フェルマーの最終定理+kindle
| ASIN | Title | Author | Binding | Publisher | PublicationDate | URL |
| ---- | ----- | ------ | ------- | --------- | --------------- | --- |
| B00AXUD4EQ | 数学ガール フェルマーの最終定理 1 (MFコミックス フラッパーシリーズ) | 春日旬 | Kindle版 | KADOKAWA / メディアファクトリー | 2012-11-01 | https://www.amazon.co.jp/exec/obidos/ASIN/B00AXUD4EQ/mytag-20 |
| B00I8AT1CM | 数学ガール/フェルマーの最終定理 | 結城 浩 | Kindle版 | SBクリエイティブ | 2008-07-29 | https://www.amazon.co.jp/exec/obidos/ASIN/B00I8AT1CM/mytag-20 |
| B00DONBQAI | 数学ガール フェルマーの最終定理 3 (MFコミックス フラッパーシリーズ) | 春日 旬 | Kindle版 | KADOKAWA / メディアファクトリー | 2013-06-27 | https://www.amazon.co.jp/exec/obidos/ASIN/B00DONBQAI/mytag-20 |
| B00AXUD4F0 | 数学ガール フェルマーの最終定理 2 (MFコミックス フラッパーシリーズ) | 春日旬 | Kindle版 | KADOKAWA / メディアファクトリー | 2012-11-01 | https://www.amazon.co.jp/exec/obidos/ASIN/B00AXUD4F0/mytag-20 |
| B009T4TN7Y | 数学ガール 上 (MFコミックス フラッパーシリーズ) | 日坂 水柯 結城 浩 | Kindle版 | KADOKAWA / メディアファクトリー | 2012-09-01 | https://www.amazon.co.jp/exec/obidos/ASIN/B009T4TN7Y/mytag-20 |
| B009T4TNB0 | 数学ガール 下 (MFコミックス フラッパーシリーズ) | 日坂 水柯 結城 浩 | Kindle版 | KADOKAWA / メディアファクトリー | 2012-09-01 | https://www.amazon.co.jp/exec/obidos/ASIN/B009T4TNB0/mytag-20 |
| B0756XMQBN | 数学ガール フェルマーの最終定理 | 春日旬 春日 旬 | Kindle版 | | | https://www.amazon.co.jp/exec/obidos/ASIN/B0756XMQBN/mytag-20 |
| B00ZEIEY1E | [まとめ買い] 数学ガール フェルマーの最終定理(コミックフラッパー) | 春日旬 春日 旬 | Kindle版 | | | https://www.amazon.co.jp/exec/obidos/ASIN/B00ZEIEY1E/mytag-20 |
のように markdown の表形式で出力する。
ちなみに template/item-list.md
ファイルの中身は以下の通り。
| ASIN | Title | Author | Binding | Publisher | PublicationDate | URL |
| ---- | ----- | ------ | ------- | --------- | --------------- | --- |
{{ range .Items }}| {{ .ASIN }} | {{ .ItemAttributes.Title }} | {{ range .ItemAttributes.Author }} {{ . }}{{ end }} | {{ .ItemAttributes.Binding }} | {{ .ItemAttributes.Publisher }} | {{ .ItemAttributes.PublicationDate }} | {{ .URL }} |
{{ end }}
テンプレート制御は Go 言語の標準パッケージ text/template
を利用している。
文法にちょっとクセがあるが,最近はググれば色々と情報が出てくるのでサンプルと併せて各自でチューニングしてほしい。
なお文字エンコーディングは UTF-8 を前提としている3。 ご注意を。
レビュー用のメタデータを作成する
個々の Amazon アイテムの情報を取得するには amazon-item lookup
または amazon-item review
コマンドを使う4。
両者の機能はよく似ているが amazon-item review
コマンドはレビュー用の情報をセットできるのが特徴である。
今回は amazon-item review
コマンドを使ってレビューを含む Amazon アフィリエイト・リンクを作成する方法を紹介する。
amazon-item review
コマンドの使い方は以下の通り。
$ amazon-item review -h
Make review data for Amazon item, lookup item by ItemLookup Method
Usage:
amazon-item review [flags] description
Flags:
-h, --help help for review
-p, --id-type string IdType (default "ASIN")
-d, --item-id string ItemId
-r, --rating int Rating of product
-g, --response-group string ResponseGroup (default "Images,ItemAttributes,Small")
--review-date string Date of review
-t, --template string Template file
Global Flags:
--access-key string Access Key ID
--associate-tag string Associate Tag
--config string config file (default $HOME/.paapi.yaml)
--marketplace string Marketplace (default "webservices.amazon.co.jp")
--secret-key string Secret Access Key
たとえば ASIN コード B00I8AT1CM
の情報を出力するならコマンドラインを
$ amazon-item review -d B00I8AT1CM -r 4 "数学ガールめっさ面白い!"
などとする。
これも出力は JSON 形式だがテンプレート・ファイルを指定して出力を整形できる。
たとえばサンプルの template/review.html
ファイルを使うと
$ amazon-item review -d B00I8AT1CM -r 4 -t template/review.html "数学ガールめっさ面白い!"
<div class="hreview">
<div class="photo"><a class="item url" href="https://www.amazon.co.jp/exec/obidos/ASIN/B00I8AT1CM/mytag-20"><img src="https://images-fe.ssl-images-amazon.com/images/I/41vT2D6sERL._SL160_.jpg" width="113" alt="photo"></a></div>
<dl class="fn">
<dt><a href="https://www.amazon.co.jp/exec/obidos/ASIN/B00I8AT1CM/mytag-20">数学ガール/フェルマーの最終定理</a></dt>
<dd>結城 浩</dd>
<dd>SBクリエイティブ 2008-07-29 (Release 2014-03-12)</dd>
<dd>eBooks Kindle版</dd>
<dd>ASIN: B00I8AT1CM</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'>mytag-20</a> on <abbr class="dtreviewed" title="2019-01-27">2019-01-27</abbr> (powered by <a href="https://github.com/spiegel-im-spiegel/amazon-item" >amazon-item</a> v0.2.1)</p>
</div>
という感じになる。
レビューの description は標準入力から指定することもできる。 たとえば以下のように cat (Windows なら type) コマンドの出力をパイプで繋いで
$ cat B00I8AT1CM.txt
数学ガールめっさ面白い!
$ cat B00I8AT1CM.txt | amazon-item review -d B00I8AT1CM -r 4 --review-date 2019-01-27
<div class="hreview">
<div class="photo"><a class="item url" href="https://www.amazon.co.jp/exec/obidos/ASIN/B00I8AT1CM/mytag-20"><img src="https://images-fe.ssl-images-amazon.com/images/I/41vT2D6sERL._SL160_.jpg" width="113" alt="photo"></a></div>
<dl class="fn">
<dt><a href="https://www.amazon.co.jp/exec/obidos/ASIN/B00I8AT1CM/mytag-20">数学ガール/フェルマーの最終定理</a></dt>
<dd>結城 浩</dd>
<dd>SBクリエイティブ 2008-07-29 (Release 2014-03-12)</dd>
<dd>eBooks Kindle版</dd>
<dd>ASIN: B00I8AT1CM</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'>mytag-20</a> on <abbr class="dtreviewed" title="2019-01-27">2019-01-27</abbr> (powered by <a href="https://github.com/spiegel-im-spiegel/amazon-item" >amazon-item</a> v0.2.1)</p>
</div>
などとする。 これで Amazon アイテムデータの作成をバッチ処理化できる。
本当は SQLite か何かでデータベース化できればいいんだろうけど,私自身がそんなに頻繁に利用するツールではないので,それは後回しということで。
PA-API 利用ポリシーに注意
最初に述べたように2019年1月23日より PA-API の利用ポリシーが変更になった。
この記事から少し引用すると
となるらしい5。
また商品へのリンク URL についても https://www.amazon.co.jp/exec/obidos/ASIN/B00I8AT1CM/mytag-20
のような従来の形式ではなく PA-API が吐き出す長ったらしい URL を使う必要がある。
先程のテンプレート template/item-list.md
を例にすると
| ASIN | Title | Author | Binding | Publisher | PublicationDate | URL |
| ---- | ----- | ------ | ------- | --------- | --------------- | --- |
{{ range .Items }}| {{ .ASIN }} | {{ .ItemAttributes.Title }} | {{ range .ItemAttributes.Author }} {{ . }}{{ end }} | {{ .ItemAttributes.Binding }} | {{ .ItemAttributes.Publisher }} | {{ .ItemAttributes.PublicationDate }} | {{ .URL }} |
{{ end }}
{{ range .Items }} ... {{ .URL }} ... {{ end }}
の部分で {{ .URL }}
ではなく {{ .DetailPageURL }}
を使う必要があるわけだ。
うちのサイトは積極的に商売をしているわけではなく,書影などのメタデータを合法的に利用したいだけなので「発送済み商品売上が過去30日以内に発生していない」と PA-API の利用が停止されるというのは結構厳しい条件だったり6。
また Amazon アソシエイトや PA-API の利用資格を一度剥奪されると再取得が難しいみたいな話も聞く。 ホンマ個人ユーザにとっては面倒なことである。
ブックマーク
-
Windows の場合は
%USERPROFILE%
フォルダ直下に.paapi.yaml
ファイルを置くとよい。 ↩︎ -
PA-API が吐き出す XML データが UTF-8 というのもあるし Go 言語のコード自体が UTF-8 を前提にしているので他の文字エンコーディングを扱うのは少し面倒なのですよ。そういえば以前,遊びで「nkf っぽいなにか」を作ったな。 ↩︎
-
amazon-item review
コマンドは v0.2.0 で追加した。 ↩︎ -
WordPress プラグインの Amazon Link Builder は制限の例外らしい。よく分からない。 ↩︎
-
Amazon アソシエイト ID があるなら PA-API が利用できなくてもアソシエイト・ツールバー等が使えるそうだが,今更あんなの使えるかい。 ↩︎