【发布时间】:2021-08-30 18:28:26
【问题描述】:
我有一个 Google Apps 脚本项目,我可以在其中输入 Google 表格的 A 列中的位置名称,并使用 Google Places API 获取多个方面。我一直在处理这个for a bit,我最近的修订旨在解决我的函数发出过多请求的问题,导致我在 Google Cloud 平台上消耗了 200 美元的免费信用。
我注意到,每次我打开我的 Google 表格时,它都必须再次获取所有数据,通过更多请求来查找它已经找到的信息。
为了获取所有信息并将其保存在我的工作表中,以便在每次打开工作表时不会对信息提出新的请求,我最好的选择是什么?只是一个 If 语句来检查一个单元格中是否已经存在一个值,一旦函数运行就会被填充?
下面是我的代码。现在,我只是在单元格 B2 中运行 =COMINED2(A2) 来获取 A2 中位置的信息,并将其放置在 B2、C2、D2、E2 等中。如果人们有其他建议,很高兴重新配置东西吗?
function COMBINED2(text) {
var API_KEY = 'AIzaSyvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQ';
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,geometry,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;
}
【问题讨论】:
标签: google-apps-script google-sheets google-places-api