【发布时间】: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