获取现场NFL分数/统计数据来阅读和操纵?

时间:2013-09-08 17:59:22

标签: php statistics feed

我需要某种数据库或提要来访问NFL的现场比分(以及可能的球员统计数据)。我希望能够在我的网站上显示我的pickem联赛的分数,并向用户显示他们的选择是否获胜。

我不知道该如何解决这个问题。有人能指出我正确的方向吗?

此外,它需要是免费的。

6 个答案:

答案 0 :(得分:24)

免责声明:我是我即将宣传的工具的作者。

在过去的一年里,我写了几个Python库,可以做你想要的。第一个是nflgame,它从NFL.com的GameCenter JSON提要中收集游戏数据(包括逐个播放)。这包括活动游戏,其中数据大约每15秒更新一次。 nflgame has a wiki提供了一些入门提示。

我去年发布了nflgame,并在上个赛季使用过它。我认为它相当稳定。

在过去的这个夏天,我一直在为更成熟的兄弟nfldb工作。 nfldb提供对nflgame所做的相同类型数据的访问,除了它将所有内容保存在关系数据库中。 nfldb also has a wiki,虽然尚未完全完成。

例如,这将输出所有当前游戏及其分数:

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)

由于没有正在播放的游戏,因此以0分数输出下周的所有游戏。这是week=1的输出:( 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)

两者均根据WTFPL获得许可,可以出于任何目的自由使用。

N.B。我意识到你把它标记为PHP,但也许这会指向你正确的方向。特别是,您可以使用nfldb来维护PostgreSQL数据库并使用您的PHP程序进行查询。

答案 1 :(得分:4)

所以我发现了一些东西给了我最大的东西。它有实时游戏统计数据,但不包括当前下行,码数和场地位置。

常规季节: http://www.nfl.com/liveupdate/scorestrip/ss.xml

季后赛季: http://www.nfl.com/liveupdate/scorestrip/postseason/ss.xml

我仍然希望找到一个实时玩家统计信息源用于将Fantasy Football添加到我的网站,但我不认为存在免费的。

答案 2 :(得分:4)

我知道这已经过时了,但这只是我用于分数的东西......也许有一天它会帮助某人。注意:有一些元素你不会使用并且特定于我的网站......但这对某人来说是一个非常好的开始。

<?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)

答案 3 :(得分:1)

我花了大约一年的时间在使用一个简单的CLI工具来轻松创建自己的NFL数据库。它目前本地支持PostgreSql和Mongo,如果您想扩展它,可以通过编程方式与Engine交互。

是否想使用Engine创建您自己的不同数据库(例如MySql)(甚至使用Postgres / Mongo但使用您自己的架构)?只需实现一个接口,引擎就会为您完成工作。

运行所有操作,包括数据库设置和使用所有最新统计信息进行更新,都可以在一个命令中完成:

ffdb setup

我知道这个问题很旧,但是我也意识到仍然需要功能强大且易于使用的工具来完成此任务。我建立这个应用程序的全部原因是要在不久的将来为自己的足球应用程序提供支持,并希望这可以对其他人有所帮助。

此外,由于问题已经很久了,因此许多答案当前都无法使用,或者参考了不再维护的项目。

请查看github repo页面,以获取有关如何下载程序,CLI命令和其他信息的完整详细信息:

FFDB Github Repository

答案 4 :(得分:0)

$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/>";

       }

答案 5 :(得分:-2)

我建议在http://developer.espn.com注册并获取对其JSON API的访问权限。它花了我5分钟,他们有文档可以进行你需要的任何电话。