【问题标题】:How can I make my function run only if there is no fetched data?只有在没有获取数据的情况下,我才能让我的函数运行?
【发布时间】: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


    【解决方案1】:

    我认为自定义公式不适用于您的情况,因为自定义公式应该独立于范围,即它不应该检查 特定 单元格或范围是否具有值或不是。

    您最好创建一个调用 COMBINED2 的常规 Apps 脚本函数,然后使用脚本 UI 手动触发它,或者可能将其分配给一个按钮。

    // this function calls COMBINED2()
    function call_COMBINED2() {
      var ss = SpreadsheetApp.getActiveSheet();
      var text = ss.getRange("A2").getValue();
      var data = COMBINED2(text);
      var dest = ss.getRange("B2:G2");
      dest.setValues(data);
    }
    

    【讨论】:

    • 你的建议很有趣,因为它朝着我最终希望进行这个项目的方向发展。我正在制作这些表格来记录我被推荐或研究/审查的旅行地点的数量。在这些旅行之后,随着时间的推移,这些表格变得过时了。我曾希望创建一个按钮来刷新整个工作表,并可能在单元格更新的信息与已经存在的信息不同时更改单元格的颜色。这符合您建议的能力吗?还是我应该做一些更大的事情来实现这一目标?
    • 很像。无论如何,使用自定义公式来执行 Google API 通常不是一个好主意。
    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 2020-09-05
    • 2021-08-03
    • 1970-01-01
    相关资源
    最近更新 更多