質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

0回答

1130閲覧

GoogleのPlaces apiを使ってスプレッドシートの情報を更新したい

BlindWith

総合スコア0

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2021/11/12 04:48

1 実現したいこと
GASとGoogleのPlaces apiを使ってスプレッドシートのA列にある施設名から、B列・C列・D列・E列に情報を記載したい

2 具体的な内容
巣プレっとシートのA列には、施設名が入力されており、GoogleのPlaces apiを使って、B列に施設名、C列に住所、D列に緯度、E列に経度を入力したいと考えています。
スプレッドシート名は「list」です。

3 試したこと
下記のコードをスプレッドシートのスクリプトに張り付けても、ver dataの行でエラーになってしまいます。
原因がわからず、教えていただけますと嬉しいです。

4 実際に使ったGAS

var APIKEY = "***" // APIキー

function Main() {
// インプットフォームの回答を設定する

SetInputList();

// 戻り値を格納する配列

var ArrRes = [];

for (var i = 0; i <= LastRow-2; i++) {

// PlacesAPI関数によるname,formatted_address,lat,lngの取得 var data = PlacesAPI(ArrInputList[i][0], APIKEY); // 戻り値を配列に格納する ArrRes[i] = []; ArrRes[i][0] = data[0]; // name ArrRes[i][1] = data[1]; // formatted_address ArrRes[i][2] = data[2]; // lat ArrRes[i][3] = data[3]; // lng

}

// 結果をスプレッドシートに出力する

var bk = SpreadsheetApp.getActiveSpreadsheet(); // アクティブなスプレッドシートを取得する

var sh = bk.getSheetByName('フォームの回答');    // Listシートを取得する

for (var i = 0; i <= LastRow-2; i++) {

// 値をセルに入力する sh.getRange(i + 2, 2).setValue(ArrRes[i][0]); // name sh.getRange(i + 2, 3).setValue(ArrRes[i][1]); // formatted_address sh.getRange(i + 2, 4).setValue(ArrRes[i][2]); // lat sh.getRange(i + 2, 5).setValue(ArrRes[i][3]); // lng

}
}

//**********************************************************************************************
// インプットフォームの回答を作成する関数
//**********************************************************************************************
function SetInputList() {

// addressシートの内容を配列に格納する

var bk = SpreadsheetApp.getActiveSpreadsheet(); // アクティブなスプレッドシートを取得する

var sh = bk.getSheetByName('フォームの回答');    // Listシートを取得する

LastRow = sh.getLastRow(); // 最終行を取得する

// var colLst = sh.getLastColumn(); // 最終列を取得する

Logger.log(LastRow);

// データを配列に格納する

// Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)

ArrInputList = sh.getRange(2, 1, LastRow-1, 1).getValues();

Logger.log(ArrInputList);
}

//**********************************************************************************************
// PlacesAPIを実行する関数
//**********************************************************************************************
function PlacesAPI(InputText, APIKEY){

// URLを作成する

var url = "https://maps.googleapis.com/maps/api/place/findplacefromtext/json?language=ja" +

"&input=" + InputText +             // for example, a name, address, or phone number "&inputtype=textquery" + // textquery or phonenumber "&fields=formatted_address,geometry,name" + // fields "&key=" + APIKEY; // API key

Logger.log(url);

// HTTPリクエストを行う

var res = UrlFetchApp.fetch(url,{muteHttpExceptions:true});

Logger.log(res);

// HTTPレスポンスを文字列として取得、JSON形式の文字列を解析してオブジェクトとして返す

var json = JSON.parse(res.getContentText());

Logger.log(json);

if (json["status"] == "OK") {

var json_formatted_address = json["candidates"][0]["formatted_address"]; var json_lat = json["candidates"][0]["geometry"]["location"]["lat"]; var json_lng = json["candidates"][0]["geometry"]["location"]["lng"];

var json_name = json["candidates"][0]["name"];

// 「日本、」「郵便番号」を除外 var formatted_address = json_formatted_address.split(' '); return [json_name,formatted_address[1],json_lat,json_lng];

} else {

//"status"が"OK"以外は空白として返却する return ["","","",""]

}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問