【问题标题】:Error Parsing Google Maps Data from XML using Apps Script in Google Sheets使用 Google 表格中的 Apps 脚本从 XML 解析 Google 地图数据时出错
【发布时间】:2022-11-27 08:32:55
【问题描述】:

我正在尝试从使用 Google Maps API 创建的 XML 中提取“formatted_address”。我无法通过代码的 XML 部分。我收到错误“异常:错误请求:http://0(第 176 行)”。有什么我想念的吗?我该如何修改这个?任何指导表示赞赏。 第 176 行是“var extractXml = UrlFetchApp.fetch(addUrl);” 这个想法是查找一个“草率”的地址并在 Google 表格的另一个单元格中返回一个 Google 标准化版本。 片段是我粘贴 URL 时在浏览器中看到的 XML。 “格式化地址”部分是我要返回的内容。

   function addressFormat() {
   var ss = SpreadsheetApp.getActive();
   var sss = ss.getSheetByName("format");
   var addr = sss.getRange(1,1,).getValue();
   var apiKey = "API Key Here";
   var  addUrl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & addr & "&key=" & apiKey;
   var extractXml = UrlFetchApp.fetch(addUrl);
   var contentsXml = extractXml.getContentText;
   var xmlAdd = XmlService.parse(contentsXml);
   var response = xmlAdd.getRootElement();
   var records = response.getChild('GeocodeResponse');
   var recordList = records.getChild('result');
   var formattedAddd = recordList('formatted_address')

   return formattedAddd.getValue;

}

【问题讨论】:

  • 您是否正确编码了 URL?
  • 查找有关错误的信息。有些东西建议不正确的编码。我仍然不确定如何更改或检查它是什么。
  • 我想我现在看到了这个问题。当通过粘贴到浏览器中手动执行时,它确实会自动编码在搜索栏中。我可能需要在实际的 Google 工作表单元格中将其转换为完整的 URL,然后使用它而不是在 Apps 脚本中构建它。

标签: google-maps google-apps-script google-sheets xml-parsing


【解决方案1】:

修改点:

  • 我认为var addUrl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & addr & "&key=" & apiKey;应该是var addUrl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" + encodeURIComponent(addr) + "&key=" + apiKey;var addUrl = `https://maps.googleapis.com/maps/api/geocode/xml?address=${encodeURIComponent(addr)}&key=${apiKey}`;

  • 请将()添加到var contentsXml = extractXml.getContentText;

  • 从您的脚本中,我认为您可能想要检索 formatted_address 的值。在这种情况下,需要修改脚本以从 XML 数据中检索值。

当这些点都体现在你的脚本中时,下面的修改怎么样?

修改脚本:

function addressFormat() {
  var apiKey = "API Key Here"; // Please set your API key.

  var ss = SpreadsheetApp.getActive();
  var sss = ss.getSheetByName("format");
  var addr = sss.getRange(1, 1).getValue();
  var addUrl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" + encodeURIComponent(addr) + "&key=" + apiKey; // or var addUrl = `https://maps.googleapis.com/maps/api/geocode/xml?address=${encodeURIComponent(addr)}&key=${apiKey}`;
  var extractXml = UrlFetchApp.fetch(addUrl);
  var contentsXml = extractXml.getContentText();
  var xmlAdd = XmlService.parse(contentsXml);
  var root = xmlAdd.getRootElement();
  var ns = root.getNamespace();
  var formatted_address = root.getChild("result", ns).getChild("formatted_address", ns).getValue();
  return formatted_address;
}

笔记:

  • 从您显示的图像,我猜您的 API 密钥可用于 API。请注意这一点。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 2014-12-19
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    相关资源
    最近更新 更多