BASE(ベイス)のAPIを使ってホームページ掲載用のデータを取得するPHPプログラム

プログラミング

ネットショップが簡単に開設できるWEBサービス『BASE』


BASEには開発者向けに『BASE API』というAPIが公開されていますが、このAPIを利用してホームページに商品一覧を掲載するためのデータ作成用プログラム を作成しましたので、今回紹介したいと思います。


BASEは無料で簡単にネットショップが作れる点が大きな魅力のサービスですが、 ここで作成したネットショップはBASEというサービス上に成り立つためにSEO的に弱く、検索からの利用者からの集客が行いずらいとも言われています。


そこでBASEが提供している『BASE API』を介してショップの商品情報を自分のホームページなど、他のサイトにも掲載ができれば、ホームページのアクセス数を利用して結果的にショップの集客や売り上げの向上が狙えるのではと思い、今回紹介するプログラムの作成するに至りました。


なるべく少ない手順でBASEの商品情報を取り寄せられるプログラムにしてみましたので、この機会に参考頂けたら嬉しく思います。

BASE(ベイス)のAPIを使ってホームページ掲載用のデータを取得する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);

プログラムの解説

「BASE API 」を介して自分のショップの商品情報を取得するプログラムになります。ここでは自分のホームページで商品一覧のデータを扱うための、中間データ(JSON)の作成までを扱っています。(ホームページ掲載用のデータの成型やページの作成は別途行う必要があります)



今回のプログラムの処理の大まかなイメージや流れは以下の通りになります。



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

BASEAPI利用イメージ.png


①認証

BASE APIをプログラムから利用するためBASEに対してユーザー認証を行います。


APIの利用には、ユーザーがBASEにログインしたことを示す「1.認可コード」と、APIのアクセス毎に必要でユーザーの識別情報となる「2.アクセストークン」が必要になります。BASE APIの 認証ではOauth2.0というプロトコル(仕組み)を介してBASE側の認証画面でログインすることでこれらが取得出来るようになっています。


APIの仕様上「1.認可コード」と「2.アクセストークン」には有効期限が存在しています。

(認可コードは有効期限不明、アクセストークンは有効期限は1時間程度とのこと)


なので、このプログラムではこれらの有効期限切れが原因でエラーにならない様、

以下の様な流れで認証を行う様にしています。


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

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

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


プログラムの作り上、実行する度にBASEにログインするという手間はあるかも知れませんが、

この方が認可コードやアクセストークンの有効期限はあまり気にせず確実に認証出来るかと思いましたのでシンプルに扱える様、この作りにしました。


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

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

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

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


②商品検索

BASEへの認証が完了したらログインしたユーザーのショップを検索して商品情報の一覧を取得します。商品検索には先の認証で取得したアクセストークンを引き続き利用します。このAPIは1回のコールにつき最大100件まで情報が取得できる様でしたので、ここではMAXの100件まで取得する様にしています。


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

docs.thebase.in/docs/api/items/


③情報更新

最後に商品一覧の取得APIから取得した情報を保存します。

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


プログラムの主な流れは以上になります。

あとはこのJSONファイル内のデータをホームページ側で使用していくことで、

商品一覧や詳細ページなどのコンテンツにBASEの商品情報が利用できると思います。


使い方

それでは本プログラムの使い方を説明したいと思います。

事前準備

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


▼BASE公式サイト

無料ショップ開設なら【BASE】


①ファイルの設置

上記のプログラムを書いたPHPファイルを作成して、サーバー上のドキュメントルート配下に設置します。プログラムの処理が上手くいったらJSONファイルを出力するのでディレクトリを新しく作ってまとめておくと分かり易いかも知れません。


例)プログラムの設置

・プログラム設置場所

/base/baseapi.php

・URLからの参照

http://your-site.com/base/baseapi.php


②BASE APIの設定

BASE Developers

developers.thebase.in/


BASE Developersのページにログインして、プログラムを利用するためのBASE API のアプリ設定を行います。

(アプリの作成が済んでいない場合は新しく作成します。)


BASEAPIアプリ設定.png


各設定内容の説明は以下の通りになります


<クライアントID>

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


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

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


<アプリURL>

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


<コールバックURL>

BASEへの認証後のリダイレクト先となるURLを指定します。

今回のプログラムではBASE側でのログイン後に元にいたプログラムの場所に戻る必要があるため、この”コールバックURL”にはプログラムの場所を示すURLを指定しておく必要があります。

例)http://your-site.com/base/baseapi.php


<利用権限>

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


※『クライアントID』『クライアントシークレット』『コールバックURL』の値は

後でプログラム内に設置するため値を控えておきます。

③プログラムの設定

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


先ほどのBASE API アプリの設定で取得した①クライアントID、②クライアントシークレット、③リダイレクトURLの値を、プログラムの指定カ所(以下図参考)に置き換えます。以上でプログラムの設定は完了になります。


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


④動作確認

以上でプログラムの作成・設定とBASE APIのアプリ設定が完了しました。

最後にプログラムの動作確認を行いいます。


先の手順までにサーバー上に設置したファイルのURLをブラウザで開きます。

例)http://your-site.com/base/baseapi.php


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


実行イメージ1.png


認証が済んだら元のプログラムに再度リダイレクトし、残りの処理を進めてプログラムが処理を完了します。プログラム完了後にPHPファイルを置いた同じ階層にJSONファイル「itemdata.json」が、プログラムの実行日時で作成されていれば成功です!


あとはBASEと連携先のホームページ上でJSONデータを必要に応じて使ってゆけば良いかと思います。


実行イメージ2.png


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


今回ホームページとBASEのショップを連携させるために『BASE API』の仕様を色々と調べた結果、この様なプログラムを作成する事が出来ましたので紹介させて頂きました。


ホームページで利用するための中間データとしてJSONファイルを出力するに留まりましたが、JSONと相性が良いPHP/Javascriptなどから利用することで、色々と使い道はあるのではとおもいます。


『BASE API』は現在ベータ版となっており将来的に仕様変更があるかもしれませんが、このような形でAPIを使うプログラムを最小限にとどめておけばAPIの仕様変更にも対応しやすいかもです。


今回は以上です。