【发布时间】:2021-06-07 16:52:37
【问题描述】:
See here for a working example of my Google Sheet
See here to access my Google App Script for the Google Sheet
我一直在从事一个项目,该项目将能够在谷歌地图上输入一个地点的名称,然后使用 Places API 和地点详细信息来提取相关信息。
我提取的一点信息是营业时间,称为place.weekday_text,看起来像这样:
"[
"Monday: 2:00 – 10:00 PM",
"Tuesday: 2:00 – 10:00 PM",
"Wednesday: 2:00 – 10:00 PM",
"Thursday: 2:00 – 10:00 PM",
"Friday: 12:00 – 11:00 PM",
"Saturday: 12:00 – 11:00 PM",
"Sunday: 12:00 – 9:00 PM"
]"
我尝试在字符串化的末尾使用替换:
JSON.stringify(place.opening_hours.weekday_text, "", 1).replace("[", "").replace("\"", "").replace("\",", "").replace("]", "")
但这最多只能照顾星期一。
有没有办法删除多余的括号、逗号和引号,以便返回一个漂亮整洁的版本,看起来像这样?
Saturday 12PM–12AM
Sunday 12–8PM
Monday Closed
Tuesday Closed
Wednesday 3–11PM
Thursday 3–11PM
Friday 3PM–12AM
这是我的代码的相关部分:
//Gets the Place ID
function COMBINED(text) {
var API_KEY = 'AIzxxxxxxxxxxxxxxxxxxxxxxxxx';
var baseUrl = 'https://maps.googleapis.com/maps/api/place/findplacefromtext/json';
var queryUrl = baseUrl + '?input=' + text + '&inputtype=textquery&key=' + API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON;
var response = UrlFetchApp.fetch(queryUrl);
var json = response.getContentText();
var placeId = JSON.parse(json);
var ID = placeId.candidates[0].place_id;
var fields = 'name,formatted_address,formatted_phone_number,website,url,types,opening_hours';
var baseUrl2 = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=';
var queryUrl2 = baseUrl2 + ID + '&fields=' + fields + '&key='+ API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON;
if (ID == '') {
return 'Give me a Google Places URL...';
}
var response2 = UrlFetchApp.fetch(queryUrl2);
var json2 = response2.getContentText();
var place = JSON.parse(json2).result;
return [[ place.name,
place.formatted_address,
place.formatted_phone_number,
place.website,
place.url,
//JSON.stringify(place.opening_hours.weekday_text, "", 1).replace("[", "").replace("\"", "").replace("\",", "").replace("]", ""),
]];
}
如果我们在 Google 表格上输入“Big Alice Brewing”并转到生成的网页,您会看到以下内容
:
{
"html_attributions" : [],
"result" : {
"formatted_address" : "8-08 43rd Rd, Long Island City, NY 11101, USA",
"formatted_phone_number" : "(347) 688-2337",
"name" : "Big aLICe Brewing",
"opening_hours" : {
"open_now" : false,
"periods" : [
{
"close" : {
"day" : 0,
"time" : "2000"
},
"open" : {
"day" : 0,
"time" : "1200"
}
},
{
"close" : {
"day" : 1,
"time" : "2100"
},
"open" : {
"day" : 1,
"time" : "1600"
}
},
{
"close" : {
"day" : 2,
"time" : "2100"
},
"open" : {
"day" : 2,
"time" : "1600"
}
},
{
"close" : {
"day" : 3,
"time" : "2100"
},
"open" : {
"day" : 3,
"time" : "1600"
}
},
{
"close" : {
"day" : 4,
"time" : "2100"
},
"open" : {
"day" : 4,
"time" : "1600"
}
},
{
"close" : {
"day" : 5,
"time" : "2200"
},
"open" : {
"day" : 5,
"time" : "1200"
}
},
{
"close" : {
"day" : 6,
"time" : "2200"
},
"open" : {
"day" : 6,
"time" : "1200"
}
}
],
"weekday_text" : [
"Monday: 4:00 – 9:00 PM",
"Tuesday: 4:00 – 9:00 PM",
"Wednesday: 4:00 – 9:00 PM",
"Thursday: 4:00 – 9:00 PM",
"Friday: 12:00 – 10:00 PM",
"Saturday: 12:00 – 10:00 PM",
"Sunday: 12:00 – 8:00 PM"
]
},
"types" : [ "food", "point_of_interest", "establishment" ],
"url" : "https://maps.google.com/?cid=10003627310223249349",
"website" : "http://bigalicebrewing.com/"
},
"status" : "OK"
}
更新的代码仍然需要帮助:
var response2 = UrlFetchApp.fetch(queryUrl2);
var json2 = response2.getContentText();
var place = JSON.parse(json2).result;
var placeName = place.name;
var placeAddress = place.formatted_address;
var placePhoneNumber = place.formatted_phone_number;
var placeWebsite = place.website;
var placeURL = place.url;
var weekdayTextList = place.opening_hours.weekday_text;
weekdayTextList.forEach((weekdayText) => {
console.log( weekdayText );
} );
return [[ placeName,
placeAddress,
placePhoneNumber,
placeWebsite,
placeURL
]];
最终更新:这是最后一点帮助之后的工作代码。
function writeToSpreadsheet() {
var results = COMBINED2('');
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1, 1, 6).setValues(results);
}
function COMBINED2(text) {
var API_KEY = 'AIzcxxxxxxxxxxxxxxxxxxxxxxxxx';
var baseUrl = 'https://maps.googleapis.com/maps/api/place/findplacefromtext/json';
var queryUrl = baseUrl + '?input=' + text + '&inputtype=textquery&key=' + API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON;
var response = UrlFetchApp.fetch(queryUrl);
var json = response.getContentText();
var placeId = JSON.parse(json);
var ID = placeId.candidates[0].place_id;
var fields = 'name,formatted_address,formatted_phone_number,website,url,types,opening_hours';
var baseUrl2 = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=';
var queryUrl2 = baseUrl2 + ID + '&fields=' + fields + '&key='+ API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON;
if (ID == '') {
return 'Give me a Google Places URL...';
}
var response2 = UrlFetchApp.fetch(queryUrl2);
var json2 = response2.getContentText();
var place = JSON.parse(json2).result;
var placeName = place.name;
var placeAddress = place.formatted_address;
var placePhoneNumber = place.formatted_phone_number;
var placeWebsite = place.website;
var placeURL = place.url;
var weekdays = '';
place.opening_hours.weekday_text.forEach((weekdayText) => {
weekdays += ( weekdayText + '\r\n' );
} );
var data = [ [
place.name,
place.formatted_address,
place.formatted_phone_number,
place.website,
place.url,
weekdays.trim()
] ];
return data;
}
【问题讨论】:
标签: json google-apps-script google-sheets