プログラミングで人生を豊かに楽しく

BASE APIを使い商品情報のデータを取得するPHPプログラム

みやしも プログラミング

BASE(ベイス)はネットショップが簡単に作れる点が大きな魅力のWEBサービスです。



BASE公式サイト
※クリックすると別ウィンドウで開きます



そんなBASEで作成したショップの商品情報をサービス外で利用するには、『BASE API』を経由して取り出したデータを利用する必要があります。



今回は、BASEの商品情報を外部のWEBサイトなどの掲載に利用することを前提に、自分のショップからAPI経由で取り出した商品情報のデータをJSONに保存するPHPプログラムを作成しました。

なるべく少ない手順でBASEの商品情報を取り寄せられるプログラムにました。

PHPプログラムの紹介

今回紹介するプログラムは以下の通りです。



▼商品情報のデータを取得するPHPプログラム

/*
 * BASE API の商品情報を更新する
 *
 */
define("CLIANT_ID", "【クライアントID】");
define("CLIENT_SECRET", "【クライアントシークレット】");
define("REDIRECT_URL", "【リダイレクトURL】");

//============//
// 1.認証処理 //
//============//

// 「認可コード」を取得する
$code = null;
if(isset($_GET['code']) && !empty($_GET['code'])){
    $code = $_GET['code'];
}else{
    // 認可コードが無ければBASE側のログイン画面にリダイレクト
    $auth_url = '';
    $auth_url .= 'https://api.thebase.in/1/oauth/authorize';
    $auth_url .= '?response_type=code';
    $auth_url .= '&client_id='.CLIANT_ID;
    $auth_url .= '&redirect_uri='.REDIRECT_URL;
    $auth_url .= '&scope=read_items';
    header('Location:'.$auth_url);
    exit;
}
// 「アクセストークン」を取得する
$params = array(
    'client_id'     => CLIANT_ID,
    'client_secret' => CLIENT_SECRET,
    'code'          => $code,
    'grant_type'    => 'authorization_code',
    'redirect_uri'  => REDIRECT_URL,
);
$headers = array(
    'Content-Type: application/x-www-form-urlencoded',
);
$request_options = array(
    'http' => array(
        'ignore_errors' => true,
        'method'  => 'POST',
        'content' => http_build_query($params),
        'header'  => implode("\r\n", $headers),
    ),
);
$context = stream_context_create($request_options);
$response = file_get_contents('https://api.thebase.in/1/oauth/token', false, $context);
$response_array = json_decode($response,true);

// エラーがあれば表示して終了
if(isset($response_array['error']) && isset($response_array['error_description'])){
    echo $response_array['error_description'];
    exit;
}

//==================//
// 2.商品情報を取得 //
//==================//
$headers = array(
    'Authorization: Bearer ' . $response_array['access_token'],
);
$request_options = array(
    'http' => array(
        'ignore_errors' => true,
        'method' => 'GET',
        'header' => implode("\r\n", $headers),
    ),
);
$context = stream_context_create($request_options);
$response = file_get_contents('https://api.thebase.in/1/items?limit=100&offset=0', false, $context);
$response_array = json_decode($response,true);

// エラーがあれば表示して終了
if(isset($response_array['error']) && isset($response_array['error_description'])){
    echo $response_array['error_description'];
    exit;
}
//====================//
// 3.データを保存する //
//====================//
file_put_contents('./itemdata.json',$response);
PHPファイルにコピペしてドキュメントルート配下に設置すればそのまま利用可能です。
詳しい使い方やプログラムの内容について、続けて解説してゆきます!

プログラムの解説

『BASE API』を介して自分のショップの商品情報を取得するPHPプログラムとなります。このプログラムでは、WEBサイトなどで商品一覧のデータを扱うための中間データ(JSON)の作成までを扱います。



今回のプログラムの処理の流れは以下イメージの通りです。



▼プログラムの処理イメージ

BASEAPI利用イメージ.png

①認証

まずはBASE APIに対する認証を行います。



BASE APIを利用するには、ユーザーがログインしたことを示す『1.認可コード』と、ユーザーの識別情報となる『2.アクセストークン』が必要です。


これらは BASEのログイン画面で認証する・Oauth2.0プロトコルを介するなどして、それぞれ取得してゆきまが、 APIの仕様上、以下の点にも注意する必要があります。
APIの仕様上『1.認可コード』『2.アクセストークン』には有効期限があり、認可コードは有効期限不明、アクセストークンは有効期限は1時間程度とのことです。(※詳しい情報がありませんでした)

このため、プログラムでは有効期限切れが原因でエラーにならない様以下の流れで認証を行う様にしています。



  1. パラメーターに『認可コード』が無ければBASEログイン画面にリダイレクト

  2. BASEログイン後に『認可コード』付きのURLで元のプログラムにリダイレクト

  3. 『認可コード』からアクセストークンを発行して認証以降の処理を行う



つくり上『プログラムを実行する度にBASEのログイン画面で認証する』という手間が発生しますが、この方が認可コードやアクセストークンの有効期限を気にせず確実に実行出来ると思い、シンプルに扱えること優先しました。



▼参考情報

- BASE API ドキュメント(oauth/authorize)

https://docs.thebase.in/docs/api/oauth/authorize

- BASE API ドキュメント (oauth/access_token)

https://docs.thebase.in/docs/api/oauth/access_token

②商品検索

BASEへの認証が完了したら、ログインしたユーザーのショップを検索して商品情報の一覧を取得します。商品検索では先の認証で取得したアクセストークンも引き続き使用してゆきます。

このAPIは1回のコールにつき最大100件まで情報が取得できます。プログラムではMAXの100件まで取得する様にしています。

▼参考情報

- BASE API ドキュメント(GET /1/items)

https://docs.thebase.in/docs/api/items/

③情報更新

最後にAPIから取得した情報を保存します。



BASE APIのレスポンスはJSON形式で返ってくるため、PHPプログラムで受け取ったレスポンスを、そのまま『itemdata.json』というファイルに出力して保存しています。

プログラムの流れの解説は以上となります。

プログラムの使い方

それでは本プログラムの使い方を解説してゆきます。

事前準備

本プログラムを利用するためにはBASEのアカウントが必要になります。アカウントを持っていない場合は、あらかじめ作成しておく様にしましょう。



BASE公式サイト
※クリックすると別ウィンドウで開きます

①ファイルの設置

上記のプログラムを書いたPHPファイルを作成して、サーバー上のドキュメントルート配下に設置します。



例)プログラムの設置例

▼プログラム設置場所
/base/baseapi.php

▼参照URL
https://example.com/base/baseapi.php
プログラムの処理が上手くいったらJSONファイルを出力するので、ディレクトリでまとめておくと分かりやすいと思います。

②BASE APIの設定

▼BASE Developers

https://developers.thebase.in/



BASE Developersのページにログインして、プログラムを利用するためのBASE APIのアプリ設定を行います。(※アプリ作成が済んでいない場合は新しく作成します。)



BASEAPIアプリ設定.png



BASE Developersにおける設定内容はつぎの通りです。



<クライアントID>

登録したアプリに認証するために必要になる情報です


<クライアントシークレット>

登録したアプリに認証するために必要になる情報です


<アプリURL>

プログラムを利用するホームページURLを指定します


<コールバックURL>

BASEへの認証後のリダイレクト先となるURLを指定します。今回のプログラムでは、認証後に元にいた場所に戻る必要がありますので『コールバックURL』にはプログラムの場所を示すURLを指定しておきます。

例)https://example.com/base/baseapi.php

<利用権限>

ここは『ユーザー情報を見る』『商品情報を見る』の権限が設定されていれば大丈夫です

『クライアントID』『クライアントシークレット』『コールバックURL』の値は、後でプログラム内に設置するため値を控えておきます。

③プログラムの設定

サーバーに設置したPHPプログラムの設定を行います。



先ほどのBASE APIアプリの設定で取得した『①クライアントID』『②クライアントシークレット』『③リダイレクトURL』の値を、プログラムの以下のか所に置き換えます。



プログラム上書き換える箇所.png

以上でプログラムの設定は完了になります。

④動作確認

最後にプログラムの動作確認を行います。先の手順でサーバー上に設置したファイルのURLをWEBブラウザで開きましょう。

例)https://example.com/base/baseapi.php

ブラウザで開くと、先ずはBASE側のログイン画面が出てくるので『メールアドレス』『パスワード』を入力して認証を行います。



実行イメージ1.png



認証が済んだら元のプログラムに再度リダイレクトし、残りの処理を進めてプログラムを完了します。



プログラム完了後にPHPファイルを置いた同じ階層にJSONファイル「itemdata.json」が、プログラムの実行日時で作成されていれば成功です。



実行イメージ2.png

あとはサイト上でJSONデータを必要に応じて使ってゆけば良いと思います!

プログラムの使い方の説明は以上となります。

この記事のまとめ

BASEの商品情報を外部のWEBサイトで使用する必要があり『BASE API』について調べた結果、今回紹介したプログラムを作成にいたりました。

単純にAPI経由でJSONを吐き出すだけですが、WEBサイトで商品一覧を作るなど、使える場面は多いとも思います。

今回は以上となります。最後までお読みいただきありがとうございました。

関連記事

最新記事