VBAでカラーミーショップAPIを使って在庫更新してみた①


VBAでカラーミーショップAPIを使って商品の在庫、価格を更新をやってみました。
 
カラーミーショップでたくさんの商品を取り扱っている方なら共感してくれると思うんですが、カラーミー上で商品情報の編集をするのって凄く面倒臭いんですよね。オプション価格を設定している人は特に。

私もそうなんですが、わざわざその商品の編集ページに入らないといけないため一点一点修正すると手間が凄く掛かります。
(以前はオプション一括編集画面あったのになぁ・・・)

 オプション設定の画面

 
あと、滞在時間に関係無く画面遷移してるだけでいきなりセッション切れてログイン画面出される時がある。うーんこのポンコツっぷり。
 
というわけでちまちま編集画面操作してられないと思ったので、APIを叩いて在庫と商品価格を直接変更できる様にしました。執筆現在、Accessで作った自前のDBと連携させることに成功しています。すごく便利
 
ではエクセルでさくっと更新できる様な簡単なものを作ってみましょう。
用語の解説なんかはあんまりしません。「こまけぇこたぁいいんだよ!」って言う人向けです。

用意するもの

・Excel(記事中では2010を使用しています)
・ファイルを置くためのサーバー(どこでも良いです。私はロリポップサーバーを使用しています)
・カラーミーデベロッパーアカウント
・カラーミーアクセストークン

カラーミーデベロッパーアカウントを取得する

以下のURLにアクセスし、登録するメールアドレス、パスワードを設定する。
https://api.shop-pro.jp/developers/sign_up

入力したメールアドレスに仮登録メールが送信されるので、メールの到着を待つ。

カラーミーデベロッパーアカウント登録のご案内」というメールがくるので、「登録完了URL」のリンクを押してデベロッパー登録を完了させる。

アクセストークンを取得する

完了後の画面でログインを行うと、以下の画面に進みます。


右上の「アプリケーションを追加する」という青いボタンを押して、以下の画面に進みます。


アプリケーション名は何でもいいので、好きな名前をつけましょう。
私は以下の様に入力しました。

アプリケーション名:StockManager
リダイレクトURL:http://契約サーバのURL/auth.php

入力が終わったら「保存」を押します。

上記の画面まで表示されたら、「クライアントID」、「クライアントシークレット」に表示されている文字列をコピーして下さい。以降この画面は使用しませんので、閉じても問題ありません。

今は「認可」ボタンを押しても意味がありませんので、押さなくて大丈夫です。

 
それでは先ほどリダイレクトURLを入力した際に「auth.php」という文字を入力したと思います。早速このファイルを作っていきましょう。

まずはメモ帳を開いて下さい。

その次に、以下のコードをそのままメモ帳に貼り付けて下さい。

<?php

define(“OAUTH2_SITE”, ‘https://api.shop-pro.jp’);
define(“OAUTH2_CLIENT_ID”,’XXXXX‘);      // クライアントIDを入力します。
define(“OAUTH2_CLIENT_SECRET”, ‘XXXXX‘); // クライアントシークレットを入力します。
define(“OAUTH2_REDIRECT_URI”, ‘XXXXX‘);

$code = $_GET[‘code’];
// 認可ページへリダイレクトする
if (empty($code)) {
    $params = array(
        ‘client_id’     => OAUTH2_CLIENT_ID,
        ‘redirect_uri’  => OAUTH2_REDIRECT_URI,
        ‘response_type’ => ‘code’,
        ‘scope’         => ‘read_products write_products read_sales write_sales’
    );
    $auth_url = OAUTH2_SITE . ‘/oauth/authorize?’ . http_build_query($params);
    header(‘Location: ‘ . $auth_url);
    exit;
}

// 認可後
$params = array(
    ‘client_id’     => OAUTH2_CLIENT_ID,
    ‘client_secret’ => OAUTH2_CLIENT_SECRET,
    ‘code’          => $code,
    ‘grant_type’    => ‘authorization_code’,
    ‘redirect_uri’  => OAUTH2_REDIRECT_URI
);
$request_options = array(
    ‘http’ => array(
        ‘method’  => ‘POST’,
        ‘content’ => http_build_query($params)
    )
);
$context = stream_context_create($request_options);

$token_url = OAUTH2_SITE . ‘/oauth/token’;
$response_body = file_get_contents($token_url, false, $context);
$response_json = json_decode($response_body);

echo $response_body;

最初の3~5行目部分を見て下さい。
赤文字にしている部分を、上から順に以下の通りに置き換えて下さい。

“OAUTH2_CLIENT_ID”,’XXXXX‘ ⇒ メモしたクライアントID

“OAUTH2_CLIENT_SECRET”, ‘XXXXX‘ ⇒ メモしたクライアントシークレット

“OAUTH2_REDIRECT_URI”, ‘XXXXX‘ ⇒ 入力したリダイレクトURL

※文字列はシングルクォーテーション(’)で囲わないといけないので、消さない様に注意して下さい。

置き換えが終わったら保存して閉じて下さい。名前は適当で構いません。

保存後はファイル名を変更しましょう。

こんなメッセージが表示された場合は「はい」を押せば問題ありません。
「そもそも.txtなんて部分が表示されてないんだけど・・・」という方は、グーグル先生に「拡張子 表示」と聞いてみましょう。
 
 
作成したauth.phpをアップロードします。リダイレクトURLに入力した「http://契約サーバのURL/」の場所にファイルをアップロードして下さい。

アップロード後、ブラウザを開いてリダイレクトURLにアクセスすると、以下の様な画面が表示されます。

ここでは、あなたがツールと連携させたいショップアカウントでログインして下さい。ログイン後は以下の画面に遷移します。

ここで「承認する」を押します。
画面が切り替わり、ブラウザ上に何か文字が表示されていませんか?

{“access_token”:XXXXXXXXXXXX~」という形で何らかの文字列が表示されていれば成功です!

Warning:~」という文字が表示されていた場合は、「クライアントID」、「クライアントシークレット」、「リダイレクトURL」のいずれかが誤っている可能性がありますので、一度入力した内容を確認してみましょう。
 
 
 
アクセストークンは1回取得してしまえば期限無く使用することができます。これまでの手順も以降は行う必要がありませんので、取得したアクセストークンはしっかりと保存しておきましょう。

次は実際にVBAを組み、自分のショップから商品データを取得してみたいと思います。

 
 つづく

関連記事と広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. 林田浩和 より:

    林田と申します。
    ブログを拝見させていただきました。
    大変参考になる内容だと思い、
    私もワードプレスとカラーミーショップを連結させたくいと思っております。
    何度もやってはいるものの、私のやり方が間違っているようで、最後のところまでできたんですが、最後のトークン文字列がでませんm(__)m
    大変お手数だと思いますが、教えていただけないでしょうか?
    メモして変換、phpのファイルまでは間違ってないと思います。
    それをどこにアップロードしたらよいでしょうか?
    ワードプレスはcyber duckでアップロードを今までしています。

    よろしくお願い致します。

    • 藤美れいん より:

      アップロード先はどこでも良いですよ。
      契約したサーバでアップロード画面を開いてドメイン直下にアップロードしても良いですし、適当なフォルダ(temp)を作成してその中に入れても良いです。

      残念ながら私はもうカラーミーを退会してしまいましたので検証できないのですが、もしかしたらカラーミー側の仕様が変わっている可能性もあります。一度ヘルプやフォーラムの方を確認してみた方が良いかもしれませんね。