如何从Google Apps脚本中的在线数据库进行查询?

时间:2017-10-30 00:47:45

标签: javascript google-apps-script rhino

我正在尝试使用谷歌应用程序脚本和谷歌工作表基本上每次NHL团队播放时自动更新带有统计信息的谷歌表。如何在Google Apps Scripts环境中查询nhl.com在线数据库?例如 - 我感兴趣的统计数据是某个团队的总积分。如何从Google Apps脚本中的nhl.com获取整数值?

1 个答案:

答案 0 :(得分:0)

您需要使用作为GAS服务的UrlFetchApp来发送http请求并接受回复。

您的代码可能类似于:

 function getMatchResults() {
    var options = {
        'method': 'get',
        //and any other additional parameters you might need
    };
    var url = 'http://www.nhl.com/stats/team?aggregate=0&gameType=2&report=teamsummary&teamId=24&reportType=season&seasonFrom=20172018&seasonTo=20172018&filter=gamesPlayed,gte,1&sort=points%22'
    var results = UrlFetchApp.fetch(url, options); 
    Logger.log(results);
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    //further on goes your code to actually save the results into your sheet
}

如果您需要定期运行此功能,则需要设置时间驱动的触发器,其描述为here

更新: 在您发表评论之后,第二部分就是第二部分。 起初,我假设nhl.com有某种API会以JSON格式返回响应,但事实并非如此。这就是你在JSON.parse上收到错误的原因 - 返回的结果不是JSON对象而是HTML网页。

因此,您的任务变得棘手:您尝试抓取页面并从html中获取结果或使用第三方API,例如MySportFeeds。您还可以看到此Quora discussion

如果您使用似乎免费供个人使用的MySportFeeds,则上述功能可能类似于:

function getMatchResults() {
  var headers = {
    'Authorization': 'username:password',
  };
  var options = {
    'method': 'get',
    'headers': headers,
    //and any other additional parameters you might need
  };
  var url = 'https://www.mysportsfeeds.com/api/feed/pull/nfl/2016-2017-regular/scoreboard.json?fordate=20161211'
  var results = UrlFetchApp.fetch(url, options); 
  Logger.log(results);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  //further on goes your code to actually save the results into your sheet
}

更新#2:

根据另外一条评论:)您实际上有3个选项:

  • 抓取整个页面(请参阅wikipedia article关于此问题和here
  • 使用某些第三方API(上面的MySportFeeds)
  • 查看页面来源并查找其加载数据的位置 - 有关详细信息,请参阅this answer

使用最后一个选项,代码如下:

function getMatchResults() {
  var headers = {
    "Origin": "http://http://www.nhl.com/"
  };
  var options = {
    'method': 'get',
    //and any other additional parameters you might need
  };
  var baseUrl = 'http://www.nhl.com/stats/rest/individual/team/basic/game/teamsummary'
  var urlParameters = '?cayenneExp=teamId=23';
  var url = baseUrl + urlParameters;
  var results = UrlFetchApp.fetch(url, options); 
  Logger.log(results);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  //further on goes your code to actually save the results into your sheet
}

您可以在此处看到http://www.nhl.com/stats/rest/individual/team/basic/game/teamsummary?cayenneExp=返回统计信息,并在cayenneExp参数中指定其他设置(例如teamId = 23,即示例中的温哥华)。这就是它在devtools中的样子:http://take.ms/fSH7H