Импорт XML для оценки НФЛ 2018 - Новый XML? - PullRequest
0 голосов
/ 07 сентября 2018

В прошлом году мне предоставили IMPORTXML, чтобы я мог получать живые обновления скоринга в Google Sheets. Я пошел использовать его сегодня, чтобы подготовиться к 2018 году, и он все еще тянет прошлогодние данные. Я не знаю, как я могу получить информацию, необходимую для этого года, если она изменилась или просто слишком рано. Я надеялся, что кто-то, обладающий немного большими знаниями, может направить меня или указать направление в правильном направлении?

=importxml("http://www.nfl.com/liveupdate/scorestrip/ss.xml","//g/@eid" )

Это было одно из полей, которые я использовал, и он все еще тянет 2017. Спасибо!

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Попробуйте это:

http://www.nfl.com/ajax/scorestrip?season=2018&seasonType=REG&week=1

Похоже, вы должны указать параметры строки запроса для сезона, типа и недели, но похоже, что выходные данные могут быть одинаковыми.

0 голосов
/ 03 августа 2019

Вот мой сценарий. Это работает хорошо. Не забудьте настроить триггеры скрипта для автоматического запуска его каждую минуту или как угодно часто.

function GetNFLScore(){

var url = ('http://www.nfl.com/liveupdate/scores/scores.json');
var res = UrlFetchApp.fetch(url);
var content = res.getContentText();
var json = JSON.parse(content);   
var bye = "";

// Extracts the keys (these change every week)
var keys = [];
for(var k in json) keys.push(k);

// Declare array for results
var NFLResults =[];

// Make a Title Row
NFLResults.push(["Qtr","Time","Home","Pts","Away","Pts","Pos.","Down","To Go","Yard Line","Note","Network"]);

// Extracts the Games one per line
for(n=0; n<keys.length; n++)  {   
  var Clock = json[keys[n]]["clock"];                 // Kickoff time if pregame, Game Clock if game time
  var Qtr = json[keys[n]]["qtr"];                     // Gamestate (Pre, or Final), Game quater if game time
  var Home = json[keys[n]]["home"]["abbr"];           // Home Team
  var HsT = json[keys[n]]["home"]["score"]["T"];      // Home Total Score
  var Away = json[keys[n]]["away"]["abbr"];           // Away Team
  var AsT = json[keys[n]]["away"]["score"]["T"];      // Away Total Score
  var TV = json[keys[n]]["media"]["tv"];              // TV Network (NBC, FOX, ESPN, ect..)
  var YardLine = json[keys[n]]["yl"];                 // Current scrimage yard line
  var PosTeam = json[keys[n]]["posteam"];             // Team with ball possession
  var RedZone = json[keys[n]]["redzone"];             // Redzone boolean
  var Down = json[keys[n]]["down"];                   // Current Down
  var ToGo = json[keys[n]]["togo"];                   // Current To Go yardage for 1st down
  var Note = json[keys[n]]["note"];                   // Scoring play (Touchdown, Field Goal, Extra Point, Safety)

  // Correcting team abbr
  if( Home == "JAC" ){ Home = "JAX";}                 // JAC > JAX
  else if( Home == "WAS" ){ Home = "WSH";}            // WAS > WSH
  else if( Home == "LA"  ){ Home = "LAR";}            // LA > LAR

  if( Away == "LA"  ){ Away = "LAR";}      
  else if( Away == "WAS" ){ Away = "WSH";}
  else if( Away == "JAC" ){ Away = "JAC";}

  // Clear non-score related game data if game is final
  if( Qtr == "Final" ){ 
    Clock = "";
    PosTeam = "";
    RedZone = "";
    Down = "";
    ToGo = "";
    Note = "";
    TV = "";
  } 
  else if( Qtr == "Final OT" ){ 
    Clock = "";
    PosTeam = "";
    RedZone = "";
    Down = "";
    ToGo = "";
    Note = "";
    TV = "";
  }

  // Display Game data
  NFLResults.push([Qtr,Clock,Home,HsT,Away,AsT,PosTeam,Down,ToGo,YardLine,Note,TV]);
}

// Clear the bottom of the scoreboard from lack of scores caused by bye weeks
var rows = NFLResults.length
for(n=0; n<(17-rows); n++) {
  NFLResults.push([bye,bye,bye,bye,bye,bye,bye,bye,bye,bye,bye,bye]);   // N'SYNC
}

// Create new tab 'NFL Scores' if it doesn't exist.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var itt = ss.getSheetByName('NFL Scores');
if (!itt) {

    ss.insertSheet('NFL Scores');
}

// Push Scoreboard to spreadsheet
SpreadsheetApp.getActive().getSheetByName('NFL Scores').getRange(1,1,17,12).setValues(NFLResults);

}
0 голосов
/ 07 сентября 2018

Похоже, что служба XML прекращена или ее не так просто найти.

Однако я считаю, что этот сайт является эквивалентом JSON.

http://www.nfl.com/liveupdate/scores/scores.json

и этот сайт также предоставляет данные в реальном времени, и вы можете выбирать по дате.

http://www.nfl.com/liveupdate/game-center/2018090600/2018090600_gtd.json

После того, как вы посмотрели на вывод по первой ссылке, похоже, что вы можете получить матчи в игре и запланировать их, а затем использовать ссылки, чтобы выбрать конкретный матч для получения полной информации о воспроизведении во второй ссылке. ссылка на сайт.

Ниже приведена функция, которую вы можете использовать http://www.nfl.com/liveupdate/scores/scores.json, чтобы получить результаты в Google-листах и ​​представить их в выбранных полях.

Чтобы установить и использовать его, прочитайте инструкцию здесь: https://developers.google.com/apps-script/guides/sheets/functions#using_a_custom_function

В вашем листе выберите ячейку и введите = ReadNFLResults ()

Чтобы периодически запускать скрипт (скажем, каждые 2 минуты), следуйте этим инструкциям https://www.quora.com/How-can-I-periodically-run-a-Google-Script-on-a-Spreadsheet

/** Imports NFL results to your spreadsheet Ex: ReadNFLResults()
* @customfunction
*/

function ReadNFLResults(){

  try{

    var res = UrlFetchApp.fetch("http://www.nfl.com/liveupdate/scores/scores.json");
    var content = res.getContentText();
    var json = JSON.parse(content);   

    // Extracts the keys (these change every week)
    var keys = [];
    for(var k in json) keys.push(k);

    // Declare array for results
    var NFLResults =[];

    // Make a Title Row
    NFLResults.push(["Date","Stadium","Time","Qtr","Home Team","Hs1","Hs2","Hs3","Hs4","HsT","Vis Team","As1","As2","As3","As4","AsT"]);

    // Extracts the Games one per line
    for(n=0; n<keys.length; n++){
      var Date = ""+keys[n];
      var Stadium = json[keys[n]]["stadium"];
      var Clock = json[keys[n]]["clock"];
      var TV = json[keys[n]]["media"]["tv"];
      var Qtr = json[keys[n]]["qtr"];
      var Home = json[keys[n]]["home"]["abbr"];
      var Hs1 = json[keys[n]]["home"]["score"]["1"];
      var Hs2 = json[keys[n]]["home"]["score"]["2"];
      var Hs3 = json[keys[n]]["home"]["score"]["3"];
      var Hs4 = json[keys[n]]["home"]["score"]["4"];
      var HsT = json[keys[n]]["home"]["score"]["T"];
      var Away = json[keys[n]]["away"]["abbr"];
      var As1 = json[keys[n]]["away"]["score"]["1"];
      var As2 = json[keys[n]]["away"]["score"]["2"];
      var As3 = json[keys[n]]["away"]["score"]["3"];
      var As4 = json[keys[n]]["away"]["score"]["4"];
      var AsT = json[keys[n]]["away"]["score"]["T"];
      NFLResults.push([Date,Stadium,Clock,Qtr,Home,Hs1,Hs2,Hs3,Hs4,HsT,Away,As1,As2,As3,As4,AsT]);
    }

   // Return array to Google-Sheets
    return (NFLResults);

  }
  catch(err){
      return "Error getting data";  
  }

}

Вот примерные результаты на 10 сентября 2018 года:

NFL results in progress

...