LoginSignup
2
5

More than 3 years have passed since last update.

GoogleAppsScriptでぐるなびAPIから取得した駅周辺のお店をスプレッドシートに書き出す

Posted at

経緯

googleアカウントのマイマップを作ろうと思って手作業でやるのは手間なので、上手くできないかなと思って調べてみました。

参考にさせていただいた記事はコチラになります。
https://qiita.com/ymk1102_1t/items/c7802205f6a54c88ba74

やること

ぐるなびのAPIを利用して駅周辺のスタバの情報を取得してきます。

使用するAPI

ぐるなびAPI

今回メインで使用するAPIです。利用のためには利用アカウントを作成する必要がありますが、今回は個人の趣味で利用するので一番登録内容が少ないが期間限定のアカウントを取得しました。

https://api.gnavi.co.jp/api/manual/restsearch/
ぐるなびWebサービスは、ぐるなびが所有する豊富な飲食店情報を提供する、無料のAPIです。
ぐるなびWebサービスは、新たなコンテンツを制作する開発者をサポートします。

駅情報取得API

直接ぐるなびAPIを叩いてもいいんですが、上手く絞り込みが出来なかったので、駅情報から緯度経度を取得するために利用しました。

http://express.heartrails.com/api.html
「HeartRails Express」 は、路線/駅名データ等の地理情報を、XML、JSON(P) 形式の API により無料でご提供させていただくサービスです。この API をご利用になることにより、お客様側ではサーバーサイドの処理を実装することなく、サンプルのようなアプリケーションを簡単に開発することができます。

作業手順

  1. ぐるなびAPIにて利用アカウントを登録し、取得したアクセスキーを確認
  2. GASのスクリプトエディタを開く ※1
  3. 以下記載のソースを記載し、実行!! ※2

※1 詳細なやり方はコチラを参照(https://tonari-it.com/gas-script-editor/)
※2 1で取得したアクセスキーだけ自分で取得した値に変更する

function myFunction() {

  // 対象の駅
  var stationName = '新宿';

  // 駅名から緯度経度を取得
  var arrPosition = getPosition(stationName);
  var parPosition = '&latitude=' + arrPosition[0] + '&longitude=' + arrPosition[1] + '&range=3';

  var gurunaviAPI = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';//取得したアクセスキー
  var url = 'https://api.gnavi.co.jp/RestSearchAPI/v3/?';
  url = url + 'keyid='+ gurunaviAPI;

  // リクエストパラメータ
  url = url + '&name=スターバックス';
  url = url + '&hit_per_page=100';// 表示件数を限定
  url = url + '&pref=PREF13';// 東京都の都道府県コードで絞り込み
  url = url + parPosition //位置情報を付与する

  var response = UrlFetchApp.fetch(url);
  var json=JSON.parse(response.getContentText());

  var jsonLength = Object.keys(json.rest).length;//ヒットした件数を取得する
  var arrArea = [];//出力する値を入れるための配列

  if(jsonLength < 1){
    return;
  }

  for (var i=0;i<jsonLength;i++){
    // 出力したい情報を配列に入れていく
    arrArea.push([json.rest[i].name,
                  json.rest[i].address.slice(10),
                  json.rest[i].tel,
                  json.rest[i].opentime,
                  json.rest[i].holiday,
                  json.rest[i].access.station
                 ]);
  } 

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = sheet.getSheetByName('シート1');
  var rows = arrArea.length;
  var cols = arrArea[0].length;
  sheet1.getRange(3,2,rows,cols).setValues(arrArea);//スプレッドシートに書き込む
}


function getPosition(name){
  // 駅情報取得 API
  var url = 'http://express.heartrails.com/api/json?method=getStations&';//

  // リクエストパラメータ
  url = url + '&name=' + name;

  var response = UrlFetchApp.fetch(url);
  var json=JSON.parse(response.getContentText());

  var arrpin = [];
  arrpin[0]=json.response.station[0].y;
  arrpin[1]=json.response.station[0].x;

  return arrpin;
}
2
5
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
5