【Laravel】간단 구현, 라쿠텐 API로 상품 검색해 본다

PHP로 구현하는 기사는별로 없었기 때문에, 비망록으로서 남겨 둡니다.
이번은 라쿠텐 API를 두드려, 상품 검색을 할 수 있는 기능을 구현합니다. 아마존과 DMM은 어페리에이트 계정에서 심사가 있기 때문에, 마음껏 바로 만들면 라쿠텐을 추천합니다.

laravel 지식이 있다고 가정합니다. API 구현 부분 이외는 간략화하고 있습니다, 양해 바랍니다.

환경



PHP 7.3.8
라라벨 6.18.35
cURL

우선 구현 전의 아래 준비



Rakuten Developers 에서 앱 ID를 얻으십시오.
이번에 두드려 간다 라쿠텐 시장 상품 검색 API 는 입력 파라미터에 앱 ID를 건네주면 OK이므로, 토큰이나 제휴 ID는 불필요합니다.



다음 SDK를 소개합니다.
SDK란 소프트웨어 개발 키트(Software Development kit)의 약자로 API를 다루고 싸게 해주는 라이브러리라는 느낌일까요? 라쿠텐 SDK 을 도입하면, 대응하는 API 각각을 보다 간편하게 취급할 수가 있습니다.

아무튼 SDK를 사용하지 않아도 구현은 어렵지는 않습니다만, 이번은 준비되어 있는 라이브러리를 사용합니다.

composer.json
"require": {
        (略)
        "rakuten-ws/rws-php-sdk": "^1.1"
    },

PHP SDK를 composer로 설치하고 이동합니다. 그건 그렇고, Ruby SDK도 있습니다.
composer install

이제 아래 준비는 OK입니다.

자, API를 치자.



작법으로 env에 환경 변수를 써 config로 중계해 둡니다.
RAKUTEN_APPLICATION_ID=(アプリIDを書いてね)
RAKUTEN_APPLICATION_SEACRET=(application_secretを書いてね、今回は使わないよ)

config/app.php
'rakuten_id' => env('RAKUTEN_APPLICATION_ID', false),
'rakuten_key' => env('RAKUTEN_APPLICATION_SEACRET', false),

컨트롤러에 원하는 데이터를 꺼내 성형하는 곳까지 씁니다.

SearchController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
//忘れずにuseしておきましょう
use RakutenRws_Client;

class SearchController extends Controller
{
    public function index(Request $request)
    {
        //楽天APIを扱うRakutenRws_Clientクラスのインスタンスを作成します
        $client = new RakutenRws_Client();

        //定数化
        define("RAKUTEN_APPLICATION_ID"     , config('app.rakuten_id'));
        define("RAKUTEN_APPLICATION_SEACRET", config('app.rakuten_key'));

        //アプリIDをセット!
        $client->setApplicationId(RAKUTEN_APPLICATION_ID);

        //リクエストから検索キーワードを取り出し
        $keyword = $request->input('keyword');

        // IchibaItemSearch API から、指定条件で検索
        if(!empty($keyword)){ 
        $response = $client->execute('IchibaItemSearch', array(
            //入力パラメーター
            'keyword' => $keyword,
        ));
        // レスポンスが正しいかを isOk() で確認することができます
        if ($response->isOk()) {
        $items = array();
        //配列で結果をぶち込んで行きます
        foreach ($response as $item){
            //画像サイズを変えたかったのでURLを整形します
            $str = str_replace("_ex=128x128", "_ex=175x175", $item['mediumImageUrls'][0]['imageUrl']);
            $items[] = array(
                'itemName' => $item['itemName'],
                'itemPrice' => $item['itemPrice'],
                'itemUrl' => $item['itemUrl'],
                'mediumImageUrls' => $str,
                'siteIcon' => "../images/rakuten_logo.png",
            );
        }
        } else {
            echo 'Error:'.$response->getMessage();
          }
        } 

어떤 느낌으로 검색 결과를 얻을 수 있다고 하면

이런 느낌. 나머지는 끓여서 구워집니다.
할애하지만 요청을 전달하는 검색 양식과 결과를 표시하는 블레이드를 준비하면 완성됩니다 (텍토)


좋은 느낌이네요.



출력 파라미터 에 상품 이미지 64x64URL(smallImageUrls)과 상품 이미지 128x128URL(mediumImageUrls)가 있습니다만, 좀 더 큰 이미지를 원했으므로, 이 파라미터 부분(URL)을 원하는 사이즈로 치환하는 것으로 실현하고 있습니다.

그리고, 검색 결과의 취득 건수는 데포로 1페이지 30건으로 되어 있습니다. 페이지수를 지정할 수는 있습니다만, 페이지당의 취득 건수는 MAX30건이므로, 그 이상 취득하고 싶은 경우는 1페이지째 30건, 2페이지째 30건, 같은 처리가 필요하게 될 것 같습니다. 페이지 수는 최대 100개인 것 같습니다.

좋은 웹페이지 즐겨찾기