在 Google 个工作表中使用应用程序脚本获取网站数据

Fetch website data using app scripts in Google sheets

早些时候我问了一个关于在 Google 表格中使用 =IMPORTXML 函数获取数据的问题。现在我已经开始工作了,但我明白脚本可以更好地工作以提高可靠性和可用性。

当前脚本(见下文)的问题是它只能从一个 url 获取数据。我想从多个 url 导入数据(每个国家/地区都有自己独特的 url)。我想为每个 URL 获取多个数据。这一切都与荷兰政府到其他国家的旅行建议有关。在我的 spreadsheet 中,我在 A 中添加了一个包含唯一 URL 的列,在 B 中添加了普通的 tekst 国家,在 C、D 和 E 列中添加了要获取的数据。

我要获取的数据

我希望你能帮助我改进脚本,以便更容易地从政府获取 'traveladvice' 数据。

function parseXml() {
  
  var url = 'https://opendata.nederlandwereldwijd.nl/v1/sources/nederlandwereldwijd/infotypes/traveladvice/a790e247-8ff8-4aa8-be93-9202ccaa180a';
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  str = xml.split("<paragraphtitle>Veiligheidsrisico’s</paragraphtitle>")[1]
  mySubString = str.match(new RegExp("<summary>" + "(.*)" + "</summary>"))[1];
  
  return mySubString;
}

(脚本来自:Marios,感谢 Marios!)然后在电子表格的单元格内 =parseXml() 以获取数据。

解决方案:

您可以使用以下三个自定义函数:

function parseXmlSummary(url) {
  
  try{
  var xml = UrlFetchApp.fetch(url).getContentText();
  mySubString = xml.match(new RegExp("<summary>" + "(.*)" + "</summary>"))[1];
  return mySubString;
  }
  catch(e){return "";}
}

function parseXmlMapURL(url) {
   
  try{
  var xml = UrlFetchApp.fetch(url).getContentText();
  mySubString = "https://"+xml.match(new RegExp("CDATA\[https://" + "(.*)" + ".png"))[1]+".png";
  return mySubString;
  }
  catch(e){return "";}
}


function parseXmlColours(url) {
  
  try{
  var xml = UrlFetchApp.fetch(url).getContentText();
  str = xml.split("<paragraphtitle>Veiligheidsrisico’s</paragraphtitle>")[1]
  var colours = ['Geel', 'Oranje', 'Rood'];
  res_colour = colours.filter(c => str.includes(c))[0];
  return res_colour;
  } 
  catch(e){return "";}

}

然后你可以像这样分别调用它们:

  • =parseXmlSummary(A7)
  • =parseXmlMapURL(A7)
  • =parseXmlColours(A7)

假设单元格 A7 包含给定的 URL.

对于下面的所有其他单元格(A8A9、..),您可以像往常一样向下拖动公式与其他公式。