web-dev-qa-db-fra.com

Obtenir des scores/statistiques de la NFL en direct à lire et à manipuler?

J'ai besoin d'une sorte de base de données ou de flux pour accéder aux scores en direct (et éventuellement aux statistiques des joueurs) de la NFL. Je veux pouvoir afficher les scores sur mon site pour ma ligue de pickem et montrer aux utilisateurs si leur choix est gagnant ou non.

Je ne suis pas sûr de savoir comment s'y prendre. Quelqu'un peut me diriger dans la bonne direction?

En outre, il doit être gratuit.

12
John Salvetti

Disclaimer: Je suis l'auteur des outils que je suis sur le point de promouvoir.

Au cours de la dernière année, j'ai écrit quelques bibliothèques Python qui feront ce que vous voulez. Le premier est nflgame , qui rassemble des données de jeu (y compris play-by-play) à partir du flux GameCenter JSON de NFL.com. Cela inclut les jeux actifs où les données sont mises à jour toutes les 15 secondes environ. nflgame a un wiki avec quelques conseils pour bien commencer.

J'ai publié nflgame l'année dernière et je l'ai utilisé tout au long de la saison dernière. Je pense que c'est raisonnablement stable.

Au cours de l'été dernier, j'ai travaillé sur son frère plus mature, nfldb . nfldb fournit un accès au même type de données que nflgame, sauf que tout est stocké dans une base de données relationnelle. nfldb possède également un wiki , même s'il n'est pas encore complètement terminé.

Par exemple, tous les jeux actuels et leurs scores seront affichés:

import nfldb

db = nfldb.connect()

phase, year, week = nfldb.current(db)
q = nfldb.Query(db).game(season_year=year, season_type=phase, week=week)
for g in q.as_games():
    print '%s (%d) at %s (%d)' % (g.home_team, g.home_score,
                                  g.away_team, g.away_score)

Étant donné qu'aucun jeu n'est joué, tous les jeux de la semaine prochaine sont affichés avec des scores 0. Ceci est la sortie avec week=1: (de la saison 2013)

CLE (10) at MIA (23)
DET (34) at MIN (24)
NYJ (18) at TB (17)
BUF (21) at NE (23)
SD (28) at HOU (31)
STL (27) at ARI (24)
SF (34) at GB (28)
DAL (36) at NYG (31)
WAS (27) at PHI (33)
DEN (49) at BAL (27)
CHI (24) at CIN (21)
IND (21) at Oak (17)
JAC (2) at KC (28)
PIT (9) at TEN (16)
NO (23) at ATL (17)
CAR (7) at SEA (12)

Les deux sont sous licence WTFPL et peuvent être utilisés librement.

N.B. J'ai compris que vous l'appeliez PHP, mais cela vous orientera peut-être dans la bonne direction. En particulier, vous pouvez utiliser nfldb pour gérer une base de données PostgreSQL et l'interroger avec votre programme PHP.

22
BurntSushi5

Je sais que c'est vieux, mais c'est ce que j'utilise seulement pour les partitions ... peut-être que ça aidera quelqu'un un jour. Remarque: il y a des éléments que vous n'utiliserez pas et qui sont spécifiques à mon site ... mais ce serait un très bon début pour quelqu'un.

<?php
require('includes/application_top.php');
$week = (int)$_GET['week'];

//load source code, depending on the current week, of the website into a variable as a string
$url = "http://www.nfl.com/liveupdate/scorestrip/ss.xml"; //LIVE GAMES

if ($xmlData = file_get_contents($url)) {
$xml = simplexml_load_string($xmlData);
$json = json_encode($xml);
$games = json_decode($json, true);
}

$teamCodes = array(
'JAC' => 'JAX',
);

//build scores array, to group teams and scores together in games
$scores = array();
foreach ($games['gms']['g'] as $gameArray) {
$game = $gameArray['@attributes'];

//ONLY PULL SCORES FROM COMPLETED GAMES - F=FINAL, FO=FINAL OVERTIME
if ($game['q'] == 'F' || $game['q'] == 'FO') {
    $overtime = (($game['q'] == 'FO') ? 1 : 0);
    $away_team = $game['v'];
    $home_team = $game['h'];
    foreach ($teamCodes as $espnCode => $nflpCode) {
        if ($away_team == $espnCode) $away_team = $nflpCode;
        if ($home_team == $espnCode) $home_team = $nflpCode;
    }
    $away_score = (int)$game['vs'];
    $home_score = (int)$game['hs'];

    $winner = ($away_score > $home_score) ? $away_team : $home_team;
    $gameID = getGameIDByTeamID($week, $home_team);
    if (is_numeric(strip_tags($home_score)) && is_numeric(strip_tags($away_score))) {
            $scores[] = array(
                'gameID' => $gameID,
                'awayteam' => $away_team,
                'visitorScore' => $away_score,
                'hometeam' => $home_team,
                'homeScore' => $home_score,
                'overtime' => $overtime,
                'winner' => $winner
            );
    }
  }
}

//see how the scores array looks
//echo '<pre>' . print_r($scores, true) . '</pre>';
echo json_encode($scores);

//game results and winning teams can now be accessed from the scores array
//e.g. $scores[0]['awayteam'] contains the name of the away team (['awayteam'] part) from the first game on the page ([0] part)
4
Mark Jones

Alors j'ai trouvé quelque chose qui me donne la plupart de ce que je cherchais. Il a des statistiques de parties en direct, mais n'inclut pas la baisse actuelle, les verges à parcourir et la position sur le terrain.

Saison régulière: http://www.nfl.com/liveupdate/scorestrip/ss.xml

Après saison: http://www.nfl.com/liveupdate/scorestrip/postseason/ss.xml

J'aimerais toujours trouver un flux de statistiques de joueur en direct à utiliser pour ajouter Fantasy Football à mon site Web, mais je ne pense pas qu'il en existe un gratuit.

4
John Salvetti
$XML = "http://www.nfl.com/liveupdate/scorestrip/ss.xml";
$lineXML = file_get_contents($XML);
$subject = $lineXML;
//match and capture week then print
$week='/w="([0-9])/';
preg_match_all($week, $subject, $week);
echo "week ".$week[1][0]."<br/>"; 
$week2=$week[1][0];
echo $week2; 

//capture team, scores in two dimensional array  
$pattern = '/hnn="(.+)"\shs="([0-9]+)"\sv="[A-Z]+"\svnn="(.+)"\svs="([0-9]+)/';
preg_match_all($pattern, $subject, $matches);

//enumerate length of array (number games played)
$count= count($matches[0]);

 //print array values
 for ($x = 0; $x < $count ; $x++) {
         echo"<br/>";
         //print home team
         echo $matches[1][$x],"   ",
         //print home score
         $matches[2][$x],"   ",
         //print visitor team
         $matches[3][$x],"   ",
         //print visitor score
         $matches[4][$x];
         echo "<br/>";

       }
0
Chris