【Google AppSheet備忘録】Automation編4:Yahoo 商品検索APIを使った商品検索

AppSheet

AppSheetのフォームでバーコードをスキャンした際に、Yahoo商品検索APIを使って商品名価格を自動取得し、アプリ内に反映する仕組みを構築したときの備忘録です。
このページでは、Apps ScriptのコードAppSheet側のAutomation(Bot)の設定を中心にまとめています。

スポンサーリンク

この記事でやること

  • AppSheetのフォームでバーコード(JANコード)をスキャン入力
  • Yahoo商品検索APIで商品情報(商品名・価格)を取得
  • Apps Scriptを通じてAppSheetに商品情報を返す
  • AppSheet側で自動入力・保存される仕組みを構築

使ったもの

種類内容
AppSheetフォーム入力・Bot自動実行・データ保存
YahooショッピングAPIhttps://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch
Apps ScriptAPI連携とデータ整形
GoogleスプレッドシートAppSheetのデータベースとして使用

Apps Scriptのコード

function getItemNameFromJanCode(janCode) {
  const appId = PropertiesService.getScriptProperties().getProperty("APP_ID");
  const apiUrl = `https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?appid=${appId}&jan_code=${janCode}&results=1`;

  try {
    const response = UrlFetchApp.fetch(apiUrl);
    const result = JSON.parse(response.getContentText());
    console.log(result);

    if (result && result.totalResultsReturned > 0 && result.hits && result.hits.length > 0) {
      const product = result.hits[0];
      //スラッシュが入る場合があるので削除
      const name = product.name.replace("/","");
      const price = product.price || "価格不明";
      
      Logger.log("商品名: " + name);
      Logger.log("価格: " + price);

      return `${name} / ${price}`;
    } else {
      Logger.log("商品が見つかりませんでした。");
      return "✖商品が見つかりませんでした。";
    }

  } catch (e) {
    Logger.log("API呼び出しエラー: " + e.message);
    return null;
  }
}

※ Yahoo! APIのClient ID(アプリケーションID)は事前に取得して、スクリプトプロパティに保存しておく必要があります。

ポイント

  • JANコードをもとに1件の商品情報を取得(results=1
  • 商品名に「/」が含まれていた場合、Split()処理に影響するため削除
  • name / price という形で文字列として返す

AppSheet側の設定

① テーブルのカラム構成

カラム名TYPE設定内容
購入IDTextKEY? にチェック(主キー)
セッションIDNumber任意のグループ分け
バーコードTextScanにチェックを入れてスキャン入力可
商品名TextGASの返り値から分割
金額PriceGASの返り値から分割
購入日時Date任意で初期値設定可

② Botの設定(Automation)

イベントトリガー:

  • テーブル:購入リスト
  • 条件:バーコードの値が入力されたとき

タスク①:

  • Call a script(Apps Script)
  • 関数名:getItemNameFromJanCode
  • パラメータ:janCode = [バーコード]
  • 戻り値:String(”商品名 / 金額” 形式)

タスク②:

  • Set row values
  • 商品名:Index(Split([Script Return Value], " / "), 1)
  • 金額:Index(Split([Script Return Value], " / "), 2)

この記事ではまったこと

  • バーコードの仕組みを勘違いしていた
    → バーコードの線そのものではなく、その下の数字(JANコード)を読み取って検索する仕組みと知って納得
  • APIの取得項目が多くて迷った
    → Yahoo APIは name, price, image, description などが取れるが、
    表示項目を絞る必要があったため商品名と価格のみに決定

その他注意点

  • バーコード列にはScanのチェックを必ず入れる(スマホで直接スキャン可能に)
  • APIのヒット率にはばらつきあり(JAN未登録の商品は結果が返らない)
  • Split()で分割する際に記号対策/などを除去しておくと安全)

まとめ

この記事では、AppSheetとYahoo商品検索APIを連携し、バーコードから商品名・価格を自動取得する仕組みを実装しました。
特にApps Scriptから戻り値を文字列として受け取り、AppSheetでSplitして複数列に保存する構成がポイントです。

実際に使ってみると、アプリで商品登録する手間が減り、バーコードでピッとすぐに情報が入るのでとても便利でした。
このように、外部APIと連携することでAppSheetの可能性がぐっと広がります!

コメント

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