JavaScript勉強会

JavaScriptの学習日記

ASINから商品データを取得する方法

Amazonの商品データを取得する方法をメモ。

 

jsstudy.hatenablog.com

 

今回は、ASINで検索して商品データを取得する方法です。

 

ASINとは?

Amazon.co.jp ヘルプ: ISBN/ASINについて

ASINは「Amazon Standard Identification Number」の略で、Amazonグループが取り扱う、書籍以外の商品を識別する10けたの番号です。

CD、DVD、ビデオ、ソフトウェア、ゲームなど、書籍以外の商品の詳細ページに記載されています。

 

Amazonでは、書籍はISBNという番号で識別されています。

ISBNは、「International Standard Book Number国際標準図書番号)」の略で、書籍を識別する10桁または13桁の番号です。

和書、洋書の詳細ページに記載されています。

 

とりあえず、ここでは「ASIN」と「ISBN」をまとめてAmazonの商品識別番号として扱い、単に「ASIN」といった場合でも「ISBN」を含めて扱うことにしておきます。

 

AmazonProduct Advertising APIでは、ASINやISBNをまとめて「ItemId」という項目名で扱っています。

 

ASINで検索

それでは、早速ASINで商品データを取得してみましょう。

前回用意したProduct Advertising APIを利用するライブラリーを使います。

 

jsstudy.hatenablog.com

 

ここでは、CodeIgniterで利用する方法をメモしときます。

CodeIgniterのモデルで「Search」クラスを作成、検索用に「search_asin」メソッドを作成します。

 

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Search_model extends CI_Model
{
    public function __construct() {
        parent::__construct();
        $this->load->library('amazon');
    }

    // search asin
    public function search_asin($asin = '', $ResponseGroup = 'Large') {
        $params['Operation'] = 'ItemLookup';
        $params['ItemId'] = $asin;
        $params['ResponseGroup'] = $ResponseGroup;
        $url = $this->amazon->encodeURL($params);
        $xml = file_get_contents($url);
        $array = $this->amazon->xml2array($xml);
        return $array;
    }

}

 

XMLデータをPHPの配列データに変換する「xml2array」メソッドは、以下のような内容です。

(ライブラリーのAmazonクラスのメソッドとして用意してあります。)

 

<?php
    // XMLを配列に変換
    function xml2array($xml = '') {
        $sx = simplexml_load_string($xml);
        return json_decode(json_encode($sx), true);
    }

 

上記のsearch_asinメソッドでASINを検索すると、Amazonから該当商品のデータを取得できます。

 

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Test extends CI_Controller {

    // ASIN 検索
    public function search_asin()
    {
        $this->load->model('search_model');
        $this->load->helper('debuglib');

        $asin = $this->input->post('asin'); // 例 4295003859
        $result = $this->search_model->search_asin($asin);
        
        $data['asin'] = $asin;
        $data['amazon_response'] = $result;
        $this->load->view('search_asin', $data);
    }

}

 

商品データ(配列)のデバッグ表示

PHPで配列をデバッグ表示するとき、見やすくするために配列表示用のライブラリーを利用してみます。

 

jsstudy.hatenablog.com

 

以前使った「debuglib」が便利だったので、これを使いましょう。

CodeIgniterで「debuglib」を使う方法は、次のサイトで解説されていました。

PHP/CodeIgniter/debuglib_helper - TOBY SOFT wiki

 

(1) GitHubからライブラリーをダウンロード

https://github.com/everton-ers/debuglib

画面右側にある「Clone or download」という緑色のボタンをクリックして「Download ZIP」を選びます。

ダウンロードした「debuglib-master.zip」を解凍します。

 

(2) 「debuglib.php」のコピーとリネーム

中にあった「debuglib.php」をCodeIgniterのヘルパーのフォルダにコピーして、さらに「debuglib_helper.php」というファイル名に変えます。(/application/helpers/debuglib_helper.php

 

(3) ヘルパー関数として呼び出し

CodeIgniterのコントローラーに「$this->load->helper('debuglib');」と書いて、ヘルパー関数として呼び出せるようにしておきます。

 

(4) 配列を整形して表示

CodeIngiterのビューで「<?php print_a($amazon_response); ?>」などと書けば、Amazonのレスポンスデータ(配列)を綺麗に表示してくれます。

 

f:id:jsstudy:20180820004008p:plain

 

ISBN = 4295003859 は「スラスラ読める JavaScript ふりがなプログラミング」という本です。

 

スラスラ読める JavaScript ふりがなプログラミング (ふりがなプログラミングシリーズ)

スラスラ読める JavaScript ふりがなプログラミング (ふりがなプログラミングシリーズ)

 

 

ItemIdにASINやISBNをセットして検索すると、上記のような商品データがAmazonから取得できます。

データは階層構造になっているので、必要な情報(商品名など)を取り出して、利用できます。

 

以上で、ASINで商品データを取得することができました。

 

 

スラスラわかるPHP

スラスラわかるPHP