【问题标题】:UrlFetchApp working in Apps Script but not Google Sheets [duplicate]UrlFetchApp 在 Apps Script 中工作,但不在 Google Sheets [重复]
【发布时间】:2021-04-06 17:05:42
【问题描述】:

我构建了一个调用 API 并返回数据的简单函数。我将附上下面的代码。当我使用“VGI”运行 test() 函数时,它每次尝试都能完美运行。当我在 google 表格中调用 =DIVIDEND_HISTORY("VGI") 时,我得到一个 403 身份验证错误,90% 的时间都被阻止。是什么导致它在工作表和脚本中运行不同?有什么我可以做的吗?当实际 API 为:

https://seekingalpha.com/api/v3/symbols/vgi/dividend_history?group_by=quarterly&sort=-date

代码:

function test() {
  Logger.log(dividend_history("VGI"));
}

function dividend_history(sym) {

  var sym1 = String(sym).toLowerCase();

  var url = "https://seekingalpha.com/api/v3/symbols/"+sym1+"/dividend_history?group_by=quarterly&sort=-date";

  var jsonData = JSON.parse(UrlFetchApp.fetch(url).getContentText()).data;

  var processed_data = jsonData.map(({...item}) => item.attributes).map(({split_adj_factor, declare_date, year, date, record_date, amount, ...item}) => item);


  return [[processed_data[0].ex_date, processed_data[0].pay_date, processed_data[0].adjusted_amount, processed_data[0].freq]];
}

【问题讨论】:

  • 这实际上是由于 seekalpha 阻塞了请求。您可以在自定义函数中使用 UrlFetchApp。在将 URL 更改为不限制请求的提供商后,我能够毫无问题地为 100 多种证券获取相同的信息。
  • 哦,你是对的,我对 UrlFetchApp 有误解。

标签: google-apps-script google-sheets urlfetch custom-function


【解决方案1】:

我已经尝试过了,它在第一次运行时有效,但在脚本的每次后续运行中都失败了。这意味着函数是在脚本上运行还是在工作表上运行都没有关系。

对此的可能假设是服务器(seekingalpha)在运行脚本一次后阻止了您的 IP,因为它检测到您的会话/请求是生成的机器人/脚本。

【讨论】:

  • 你完全正确!我切换了网址,该功能现在可以正常工作。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多