Help us understand the problem. What is going on with this article?

AmazonAPIの商品を保存するデータベース設計

More than 1 year has passed since last update.

Amazonの商品を格納するデータベース設計の紹介です。
AmazonAPIを使ったWebサービスを作る時の参考になれば幸いです。

今回は以下の2つを紹介していきます。

  • Amazonの商品情報をどのようにデータベースへ保存するか
  • UI側でどのように表示させるか

テーブル設計

  • id
  • maker_id
  • asin(例:B00AROMMFA)
  • ean(例:0021112435085)
  • amazon_detail_page_url
  • title(例:【国内正規品】SteelSeries QCK heavy マウスパッド)
  • name(QCK heavy)
  • price
  • amazon_image_id

メーカー名

  • maker_id

makersというテーブルにカテゴリーとメーカーを保存しておきます。idとnameカラムからなる単純なテーブルです。
メーカー名はAmazonAPIのレスポンスに含まれています。

ASINとEAN

  • asin(例:B00AROMMFA)
  • ean(例:0021112435085)

ASINはAmazonのユニークな商品コードです。
.co.jp.comなど、別リージョンでは使えないです。

EANは日本で最も普及している商品識別コードです。私は使っていませんが、一応データベースへ保存しています。

ASINの用途

  • Amazonへのリンク生成
  • AmazonAPIを使った商品価格の更新など

以下のように、ASINから簡単にAmazonへのリンクを生成できます。
https://www.amazon.co.jp/dp/B0160USMW6

アフィリエイトリンクにする場合には?tag=myapp-22のようにパラメーターを付ければ良いのですが、それだとAmazonのAPI規約の「APIから取得したURL経由での売上がまったく無い場合、30日ごとに1日あたりのリクエスト数上限を0.1ずつ減少」という項目に引っ掛かってしまいます。
そのため、API取得時に返ってきた商品リンクをamazon\_detail\_page_urlカラムに保存するようにします。

参考:Product Advertising API (PA-API) の利用ガイドライン

商品タイトル

  • title(例:【国内正規品】SteelSeries QCK heavy マウスパッド)
  • name(QCK heavy)(nullable)

ユーザーへのタイトル表示

APIから取得した商品名を生のまま表示するのはダサいです。
(例:【国内正規品】SteelSeries QCK heavy マウスパッド 63008)

そのため、メーカーのnameカラムと組み合わせて商品名を表示するようにしています。
例えばSteelSeriesというメーカー名と、nameカラムのQCK Heavyと組み合わせてSteelSeries QCK Heavyのように表示します。

私の場合、このnameカラムはサイト管理者が自由に編集できるような仕組みにしています。

ユーザー側で個別のタイトルを用いたい場合

もし各商品をユーザーと紐付けるようなサービスの場合、ユーザーが個別のタイトルを持ちたいかも知れません。その場合はユーザーとの中間テーブルなどにユーザーが自由に編集できる新しいカラムを作ります。

タイトル表示の優先順位としては以下のようになります。

  1. ユーザーが設定した商品名(中間テーブルのカラム)
  2. maker.name + name
  3. title

商品価格

  • price(unsigned int型)

定期的にAPIで自動更新しています。(ついでにtitleカラムなども)

商品イメージ

  • amazon_image_id(例:31SdYqkJNEL)

Amazonには商品イメージにIDっぽいものが存在します。この値自体はAPIの戻り値にありませんが、商品の画像リンクからIDを抜き出し、それをカラムに保存しておけば活用できます。

https://images-fe.ssl-images-amazon.com/images/I/{$amazonImageId}._SL{$size}_.jpg
https://images-fe.ssl-images-amazon.com/images/I/31SdYqkJNEL._SL120_.jpg

上のURLように、商品イメージの横幅を自由に指定できます。おそらくリクエスト時に画像を動的にリサイズして、それをCDNに保存しているのだと思われます。

以上がAmazonの商品を保存するデータベース設計です

AmazonのAPIは回数制限に余裕があるにも関わらずリミットエラーが返ってきたり、JSONではなくXMLだったりと少々不便な面がありますが、やはり商品のアフィリエイトとしては非常に強いです。
上手く使いこなしていきましょう。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away