2016-01-18 2 views
0

Я пытаюсь разобрать this JSONP file. Мне повезло с разбором JSON в прошлом, и я впервые попробовал JSONP. Я прочитал некоторые другие темы на этом сайте, которые вы можете использовать substr(), чтобы получить данные, сняв вызов функции JavaScript. Это моя попытка:Parsing JSONP в PHP

<?php 
$json = file_get_contents("http://live.nhle.com/GameData/GCScoreboard/2016-01-18.jsonp"); 
$json = json_decode(substr($json, 15, 1)); 
echo var_dump($json); 
$date = strtotime("now"); 
echo $date; 
foreach ($json as $d) { 
    $atCommon = $d['atcommon']; 
    $idGame = $d['id']; 
    $caNationalBroadcasts = $d['canationalbroadcasts']; 
    $ata = $d['ata']; 
    $r1 = $d['r1']; 
    $atsog = $d['atsog']; 
    $bs = $d['bs']; 
    $htCommon = $d['htcommon']; 
    $atn = $d['atn']; 
    $hts = $d['hts']; 
    $atc = $d['atc']; 
    $htn = $d['htn']; 
    $usNationalBroadcasts = $d['usnationalbroadcasts']; 
    $gcl = $d['gcl']; 
    $hta = $d['hta']; 
    $ats = $d['ats']; 
    $htc = $d['htc']; 
    $htsog = $d['htsog']; 
    $bsc = $d['bsc']; 
    $gs = $d['gs']; 
    $gcl1 = $d['gcl1']; 

// echo $htCommon; 
// echo $atCommon; 
} 
?> 

До сих пор я получаю эти две ошибки:
ПРЕДУПРЕЖДЕНИЕ file_get_contents() был отключен по соображениям безопасности на номер строки 2

ПРЕДУПРЕЖДЕНИЕ Недействительный аргумент для Еогеасп () в строке номер 7

Кроме того, я знаю, что file_get_contents() не отключен, потому что я использую эту функцию в нескольких других местах на моей ссылке проекта * ниже.

Вот мой выходной ток (который является нулевым для JSONP):
NULL 1453102048 The Null and $date are hidden echo's beneath the stats link
Вопрос в основном это ... Что я делаю не так?

+0

сделать 'var_dump (ini_get ('disable_functions')) ; 'и проверить вывод. Если 'file_get_contents' действительно отключен, вы всегда можете использовать' curl' для извлечения файла –

+0

, чтобы проверить этот ответ о том, как правильно [разбирать 'jsonp'-вывод в' json'] (http://stackoverflow.com/a/5081588/5043552) –

+0

@AlexAndrei этот ответ использует строку в демо. Моя цель состоит в том, чтобы иметь переменные в этой ссылке, чтобы вместо статической ссылки на определенный день она обновлялась ежедневно. Если я не пропущу что-то очевидное, я не смогу сделать это с тем, что показывает его демо. –

ответ

1

Если вам нужны переменные URL-адреса, рекомендуется обернуть выборку в функцию.

Смотрите пример ниже

function get_JSONP($url){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch); 

    return $output; 

} 

function jsonp_decode($jsonp, $assoc = false) { // PHP 5.3 adds depth as third parameter to json_decode 
    if($jsonp[0] !== '[' && $jsonp[0] !== '{') { 
     $jsonp = substr($jsonp, strpos($jsonp, '(')); 
    } 
    $jsonp = trim($jsonp);  // remove trailing newlines 
    $jsonp = trim($jsonp,'()'); // remove leading and trailing parenthesis 

    return json_decode($jsonp); 

} 

$url = "http://live.nhle.com/GameData/GCScoreboard/2016-01-18.jsonp"; 

$jsonp = get_JSONP($url); 
$json = jsonp_decode($jsonp); 

print_r($json); 

Выведет $json объекта

stdClass Object 
(
    [games] => Array 
     (
      [0] => stdClass Object 
       (
        [usnationalbroadcasts] => 
        [atcommon] => OILERS 
        [canationalbroadcasts] => 
        [rl] => 
        [ata] => EDM 
        [gcl] => 1 
        [ats] => 
        [hta] => FLA 
        [htc] => 
        [bs] => 7:30 PM 
        [htcommon] => PANTHERS 
        [id] => 2015020677 
        [atn] => EDMONTON 
        [hts] => 
        [atc] => 
        [gs] => 1 
        [bsc] => 
        [htn] => FLORIDA 
        [gcll] => 1 
       ) 

      [1] => stdClass Object 
       (
        [usnationalbroadcasts] => NBCSN 
        [atcommon] => PENGUINS 
        [canationalbroadcasts] => TVAS, SNE, SNO, SNP 
        [rl] => 

Чтобы перебрать содержимое

foreach($json->games as $game){ 
    print $game->canationalbroadcasts . PHP_EOL; 
} 
+0

У меня есть печать массива. Мой forloop не будет эхом, хотя –

+0

вам нужно перебрать массив 'games' объектов. Я обновлю ответ с помощью примера –

+0

'foreach ($ json-> games as $ game) { $ htcommon = $ game-> htcommon. PHP_EOL; \t echo $ htcommon; } ' –