google-apps-script - 谷歌金融股票价格的替代品

标签 google-apps-script google-sheets

我正在尝试为我的投资制作一个股票投资组合跟踪器。我已经了解如何使用谷歌金融,但 20 分钟的价格延迟是一个拖累。我已经将我的工作表的重新计算更新为每分钟更改一次,但延迟仍然会发生。所以我真正的问题是我是否以及如何将股票价格从纳斯达克提取到谷歌表中以获得更实时的感受。

最佳答案

您可以尝试使用脚本并让它每分钟触发一次。

我尝试从 NASDAQ 获取数据,但花费的时间太长。我改用了《华尔街日报》,但问题是由于我无法指出的事情,它会随机出错。因此,我添加了一列来标识上次更新数据的时间。不过请放心,它将在下一次运行中更新。

代码:

function getPrice() {
  var sheet = SpreadsheetApp.getActiveSheet(); 
  // tickers will be checked on column A starting 2nd row
  var values = sheet.getRange("A2:A" + sheet.getLastRow()).getValues().flat();
  sheet.getRange("A1:C1").setValues([["Tickers", "Price", "Last Updated"]]);
  values.forEach(function (ticker, index){
    var url = "https://www.wsj.com/market-data/quotes/" + ticker;
    Utilities.sleep(2000);
    var html = UrlFetchApp.fetch(url).getContentText();
    Utilities.sleep(2000);
    var price = html.match(/quote_val">([\d ,.]+)/);
    // since it randomly errors out on [1], check if price is null
    // add date and time too on column C to confirm when was the data last updated
    if(price){
      sheet.getRange(index + 2, 2).setValue(price[1].trim());
      sheet.getRange(index + 2, 3).setValue(new Date());
    }
  });
  // call to remove existing triggers and create another one
  createTrigger();
}

function createTrigger(){
  // Delete all existing triggers before creating one
  // Ensuring none will exist before creating trigger.
  var triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(function (trigger){
    ScriptApp.deleteTrigger(trigger);
  });

  // Create trigger after every run which is per minute
  ScriptApp.newTrigger('getPrice')
    .timeBased()
    .after(60 * 1000)
    .create();
}

示例输出:

sample output

备注:

  • 一天有 1440 分钟,Url Fetch 调用的配额是每天 20000 次,因此您最多只能有 13 个代码,因为当您达到配额时,它不会按预期运行。如果你想要更多的代码,你需要调整频率。 (例如,每 2 分钟更新一次,您最多可以拥有 27 个代码)

资源:

关于google-apps-script - 谷歌金融股票价格的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66121792/

相关文章:

javascript - Google Apps 脚本 HTML 服务 : Scroll to top of window

javascript - 如何在js中简单地使用带有Abs()的eval字符串公式(谷歌应用程序脚本)

csv - 将数据从 Google Drive 中的 CSV 文件导入到 Google Sheet

google-sheets - 在单个单元格中查找多个值(逗号分隔),然后将值返回到单个单元格(也以逗号分隔)

google-apps-script - 执行失败 : You do not have permission to call getProjectTriggers

javascript - 我获取 JSON 对象中的记录数的代码不起作用?

google-apps-script - 尝试授权脚本时出现 "Sign in with Google temporarily disabled for this app"错误

javascript - 有条件地对范围进行排序

python - Gspread - 无法检索电子表格

javascript - 在 Google 表格中使用命名范围作为变量