AppSheetのフォームでバーコードをスキャンした際に、Yahoo商品検索APIを使って商品名と価格を自動取得し、アプリ内に反映する仕組みを構築したときの備忘録です。
このページでは、Apps ScriptのコードとAppSheet側のAutomation(Bot)の設定を中心にまとめています。
リンク
この記事でやること
- AppSheetのフォームでバーコード(JANコード)をスキャン入力
- Yahoo商品検索APIで商品情報(商品名・価格)を取得
- Apps Scriptを通じてAppSheetに商品情報を返す
- AppSheet側で自動入力・保存される仕組みを構築
使ったもの
種類 | 内容 |
---|---|
AppSheet | フォーム入力・Bot自動実行・データ保存 |
YahooショッピングAPI | https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch |
Apps Script | API連携とデータ整形 |
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 | 設定内容 |
---|---|---|
購入ID | Text | KEY? にチェック(主キー) |
セッションID | Number | 任意のグループ分け |
バーコード | Text | Scanにチェックを入れてスキャン入力可 |
商品名 | Text | GASの返り値から分割 |
金額 | Price | GASの返り値から分割 |
購入日時 | 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の可能性がぐっと広がります!
リンク
コメント