LaravelでAmazonの商品検索API呼び出しライブラリ「apai-io」を使う。(rezzafr33/apaiio-laravelの使い方)

Laravel PHP フレームワーク プログラミング

apai-io(Amazonの商品検索API呼び出しライブラリ)をLaravelで呼び出して使う方法を紹介します。
rezzafr33/apaiio-laravelを使う場合のやり方です。

素のPHPでAmazon商品検索する方法、以下の記事に書いてます。

【超簡単】Amazon Product Advertising APIを使って商品検索するPHPのコード
最新のドキュメント参照しつつ、Amazonの商品検索APIをたたくPHPのコードを書いてみます。結論としては、他の人が公開しているライブラリを使ってしまうのが楽でした。

 

Laravelからapai-ioを使う方法

Laravelから外部のライブラリを呼び出すにはサービスプロバイダ というものを定義してあげると楽です。
https://readouble.com/laravel/5.6/ja/providers.html

しかし自分で作るのがめんどくさそうだったので、人が作ったものを使わせてもらう事にしました。

rezzafr33/apaiio-laravelを使わせてもらう

rezzafr33/apaiio-laravelというLaravel用のapai-ioサービスプロバイダが公開されているのを発見しました。こちらを使わせて頂きます。
https://github.com/rezzafr33/apaiio-laravel

インストール

composerでインストールします。

composer require rezzafr33/apaiio-laravel

providersとaliasesにApaiioを追加する

config/app.php に以下を追記します。

<?php
return [
    'providers' => [
        …
        Apaiio\Laravel\ApaiIOServiceProvider::class, // 追記
    ],

    'aliases' => [
        …
        'Apaiio' => Apaiio\Laravel\ApaiIOFacade::class, // 追記
    ],

 

config/apaiio.phpを追加する

config/apaiio.phpというファイルを作り、中身を以下のようにします。

<?php
return [
    'AWS_API_KEY' => env('AWS_API_KEY', 'デフォルトのAPIキー'),
    'AWS_API_SECRET_KEY' => env('AWS_API_SECRET_KEY', 'デフォルトのシークレットキー'),
    'AWS_ASSOCIATE_TAG' => env('AWS_ASSOCIATE_TAG', 'デフォルトのアソシエイトタグ'),
    'ENDPOINT' => env('AWS_ENDPOINT', 'co.jp'),
    'REQUEST' => env('AWS_REQUEST', '\ApaiIO\Request\Rest\Request'),
    'RESPONSE' => env('AWS_RESPONSE', '\ApaiIO\ResponseTransformer\XmlToSimpleXmlObject')
];

 

ここに書いたものがapai-ioのconfigの値としてセットされます。

envを使うかどうかはお好みで良いと思います。

apai-ioをコントローラーで使う例

以下が使用例です。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Foundation\Application;
use ApaiIO\Operations\Search; // 検索パラメタを作るのに必要

class SampleController extends Controller
{
    public function index()
    {
        // 検索条件を設定する
        $search = new Search();
        $search->setCategory('VideoGames');
        $search->setSort('salesrank');
        $search->setBrowseNode('637872');
        $search->setResponseGroup(['Medium']);

        // 検索実行。結果を$resに保存。
        $res = \Apaiio::runOperation($search);

        // 結果は10件ずつしか取れない。
        // 2ページ目以降が欲しい時は検索条件に以下を追加して再検索する。
        // $search->setItemPage(ページ番号);

        // 総ページ数は以下で取得できる。
        // $res->Items->TotalPages;
    }
}

configの設定を書かなくてよくなり、スッキリしました。

runOperation()に渡すクラスを切り替える事で、APIの操作が変わるという仕組みです。

レスポンス形式について。

レスポンス形式はsetResponseGroup() で指定した値によって変わります。

Medium を指定した場合のレスポンス形式は以下のドキュメント参照です。
https://docs.aws.amazon.com/ja_jp/AWSECommerceService/latest/DG/RG_Medium.html

Small だと商品画像のULRが取得できなかったので、私はMedium を使っています。

 

以上、LaravelでAmazonの商品検索をする例でした。

参考になると嬉しいです。

コメント/ピンバック

タイトルとURLをコピーしました