Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9309

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

$
0
0
はじめに ぐるなび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へアクセスして飲食店名をキーに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"); } } } }

Viewing all articles
Browse latest Browse all 9309

Trending Articles