如何使用 UrlfetchApp 修复无效 url 错误?

How to fix invalid url error using UrlfetchApp?

我的 Gmail 收件箱中有一份预定报告可供下载 link。我需要弄清楚如何下载数据并将其添加到 Google Sheet 电子表格。

我已经设置了从 Gmail 中提取数据的脚本:

function getDownloadLink() {
  
  var label = GmailApp.getUserLabelByName('test')
  var threads = label.getThreads()
  
  for(var t in threads) {
    var messages = threads[t].getMessages()
    
    for(var i in messages) {
      var data = messages[i].getPlainBody()
      var regExp = new RegExp('[\n\r].*Download:\s*([^\n\r]*)')
      var link = regExp.exec(data)[1]
      
      return link
    }
  }
}

接下来,根据一些 google 搜索,我尝试使用 UrlFetchApp.fetch 方法从 link 中获取数据,但无法这样做。我收到与 URL 不是有效 URL 有关的错误。我的猜测是我没有正确使用 regex 函数来提取 URL (我在网上找到了 regex 表达式,它似乎适用于 regex101.com)

这是存储在 var data 中的数据:

[20-08-09 11:28:08:054 PDT] The Amazon Advertising report you requested is now available.

If you no longer need this report to be generated or if you do not need it to be generated as often, please update or delete your subscription.  To manage your report subscriptions, access the Amazon Advertising Report Center.
* Note, you will need to sign into your account before accessing Amazon Advertising.

Report name: SP KW - July'20 XXXXXX
Generated on: Sunday, 9 August, 2020
* This download link expires on Sunday, 16 August, 2020

Download: https://corvo-reports.s3.amazonaws.com/TRESAH/2020-08-09/f1a86607-1558-427b-8976-370438ceb182%402020-08-09%2017%3A19%3A00.0/SP%20KW%20-%20July%2720%20XXXXX%20XXXXXX.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20200809T172556Z&X-Amz-SignedHeaders=host&X-Amz-Expires=604800&X-Amz-Credential=AKIAY2R3XYZC46Q4PK5E%2F20200809%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=bde1f7039b4a005a6f531129183eed553e88c50999999152cca827bbe1838b

我稍微歪曲了 link 作为其机密数据,但这基本上是电子邮件的格式。 link 下载 .xlsx 文件。如何从邮件正文中的link获取数据,然后将数据获取到GoogleSheet?

当我看到你的 regExpvar data 示例数据时,我认为在你的情况下,检索到的 URL 就像 https://corvo-reports.s3.amazonaws.com...。第一个字符有 space.

    var regExp = new RegExp('[\n\r].*Download:\s*([^\n\r]*)')
  • regExp/[\n\r].*Download:s*([^\n\r]*)/

我认为这可能是您遇到问题的原因。那么下面的修改呢?

发件人:

var regExp = new RegExp('[\n\r].*Download:\s*([^\n\r]*)')

收件人:

var regExp = new RegExp('[\n\r].*Download:\s*([^\n\r]*)');
  • 通过此修改,https://corvo-reports.s3.amazonaws.com...可以从示例数据中检索出来。

注:

  • 我不确定你的 https://corvo-reports.s3.amazonaws.com... 的 URL 是否有效。所以如果URL不能使用,请再次确认URL。
  • 另外,当上述修改不能使用时,请尝试var link = regExp.exec(data)[1].trim()而不是var link = regExp.exec(data)[1]

参考: