2
4

More than 1 year has passed since last update.

ホットペッパーAPIを使用して飲食店名からURL情報を取得してみた

Last updated at Posted at 2022-01-03

はじめに

ぐるなびWebサービスは2021年6月30日に無料APIサービスを終了してしまいました。

スクリーンショット 2022-01-03 23.32.20.png

リクルートWEBサービスのホットペッパーAPIを使用して飲食店名からURL情報を取得します。

APIキーの発行はこちら。

スクリーンショット 2022-01-03 21.33.06.png

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

スクリーンショット 2022-01-03 23.31.51.png

サンプルコード

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");
      }
    }
  }
}
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4