はじめに
ぐるなびWebサービスは2021年6月30日に無料APIサービスを終了してしまいました。
リクルートWEBサービスのホットペッパーAPIを使用して飲食店名からURL情報を取得します。
APIキーの発行はこちら。
APIリファレンスはこちら。店名サーチAPIを使用しました。
Node.jsのサンプル
nodeとnpmコマンドは実行できることを前提とします。
$ npm -v
6.14.9
$ node -v
v14.15.3
準備
fsとnode-fetchモジュールを追加します。
$ npm init -y
$ npm i fs node-fetch
node-fetchモジュールを使用するためにpackage.jsonに
"type": "module",
の設定を追加します。
package.json
{
"name": "20220103",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "module",
"dependencies": {
"fs": "0.0.1-security",
"node-fetch": "^3.1.0"
}
}
サンプルコード
app.js
import fs from 'fs';
import fetch from 'node-fetch';
const API_KEY = '[APIキーを記載する]';
//const KEYWORD = 'おじんじょ';
const KEYWORD = 'らんまん食堂 恵比寿';
// https://webservice.recruit.co.jp/doc/hotpepper/reference.html
const URL = 'http://webservice.recruit.co.jp/hotpepper/shop/v1/?key=' + API_KEY + '&keyword=' + encodeURIComponent(KEYWORD) + '&format=json';
// console.log(URL);
async function main() {
try {
const res = await fetch(URL);
if (!res.ok) {
throw new Error(`${res.status} ${res.statusText}`);
}
const data = await res.text();
console.log(data)
const obj = JSON.parse(data)
console.log('店名:' +obj.results.shop[0].name)
console.log('住所:' +obj.results.shop[0].address)
console.log('URL ' +obj.results.shop[0].urls.pc)
} catch (err) {
console.error(err);
}
}
main();
コードの実行例
$ node app.js
{"results":{"api_version":"1.20","results_available":1,"results_returned":"1","results_start":1,"shop":[{"address":"東京都渋谷区恵比寿西1-4-1 内野ビル1F","desc":"1","genre":{"name":"居酒屋"},"id":"J000860199","name":"らんまん食堂 恵比寿店","name_kana":"らんまんしょくどうえびすてん","urls":{"pc":"https://www.hotpepper.jp/strJ000860199/?vos=nhppalsa000016"}}]}}
店舗名 らんまん食堂 恵比寿店
住所 東京都渋谷区恵比寿西1-4-1 内野ビル1F
URL https://www.hotpepper.jp/strJ000860199/?vos=nhppalsa000016
GAS (GoogleAppsScript)のサンプル
スプレッドシート
URL取得ボタンを押すとGASが実行され、ホットペッパーAPIへアクセスしてA列の飲食店名をキーにURL情報を取得してB列へ記入します。
B列に値が記載されている場合は処理をスキップします。(URL情報を取得する場合は空欄にします。)
シート名:「sheet1」
A列: 店名
B列: URL
サンプルコード
myFunction()
function myFunction() {
// スプレッドシートを開く
const SHEET_ID = "[シートIDを記載する]";
var spreadSheet = SpreadsheetApp.openById(SHEET_ID);
// シートを選択する
const SHEET_NAME = "sheet1";
var sheet = spreadSheet.getSheetByName(SHEET_NAME);
// 最終行数を取得する
var lastRow = sheet.getLastRow();
// Logger.log("debug01: " + lastRow);
var API_KEY = '[APIキーを記載する]'; // APIキー
var URL = 'http://webservice.recruit.co.jp/hotpepper/shop/v1/' + '?key=' + API_KEY;
// Logger.log("debug02: " + URL);
// 指定するセルの情報を取得
for (i=1; i <= lastRow; i++) {
var values = sheet.getRange(i, 1, 1, 2).getValues();
// Logger.log("debug03: " + values);
var flag = values[0][1];
// Logger.log("debug04: " + flag);
if (!flag) {
var SHOP_NAME = values[0][0];
// Logger.log("debug05: " + SHOP_NAME);
var URL_TMP = URL + '&keyword=' + encodeURI(SHOP_NAME) + '&format=json';
// Logger.log("debug06: " + URL_TMP);
var response = UrlFetchApp.fetch(URL_TMP);
// Logger.log("debug07: " + response);
var data = JSON.parse(response.getContentText());
if (data) {
if (data["results"]["results_available"]) {
var SHOP_URL = data["results"]["shop"][0]["urls"]["pc"];
// Logger.log("debug08: " + SHOP_URL);
// URLのセット
sheet.getRange(i, 2).setValue(SHOP_URL);
} else {
sheet.getRange(i, 2).setValue("NA");
// Logger.log("debug09: " + "NA");
}
} else {
sheet.getRange(i, 2).setValue("Err");
// Logger.log("debug10: " + "Err");
}
}
}
}