2

このPHPファイルを実行しようとしていますが、次のようなエラーが発生し続けます

Undefined property: stdClass::$games

Invalid argument supplied for foreach()

これはエラーhttp://imageshack.us/a/img845/6270/34356212.jpgの写真で、以下は実行中のスクリプトから Steam API キーを差し引いたものです。

<?php
$api_key = '........';      //Steam API Key, Required to work
$lines = file('parse1.txt');                        //reads in the file with the list of user numbers
$game_id = 550;                                     //Steam Game ID, 440 is TF2

foreach ($lines as $usernumber) {                    //loops line by line
$link = 'http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=' . $api_key . '&steamid=' . $usernumber . '&format=json';
$json = file_get_contents($link);                   //Reads link (this ^)
$data = json_decode($json);
foreach ($data->response->games as $game) { 
    if ($game->appid == $game_id) {
        $playtime = $game->playtime_forever;
        if (($playtime < 5400) && ($playtime > 1)) {
        //echo 'Playtime for ', $usernumber, ' is ' . $playtime."<br>";
                echo $usernumber."<br>";        
            }
        }
    }
}
?>

Parse.txt には、たとえば (76561197987683795、76561198063283029) というスチーム ID が含まれています。ネストされた IF コマンドと関係があると思いますが、何が欠けているのかわかりません。ありがとう

4

2 に答える 2

2

jsonのオブジェクトに配列responseが含まれていません。games

外部データが期待を満たさない状況を処理するために、コードに防御を追加する必要があります。

if (!empty($data->response->games)) {
    foreach ($data->response->games as $game) { 
        if ($game->appid == $game_id) {
            $playtime = $game->playtime_forever;
            if (($playtime < 5400) && ($playtime > 1)) {
            //echo 'Playtime for ', $usernumber, ' is ' . $playtime."<br>";
                    echo $usernumber."<br>";        
                }
            }
        }
    }
} else {
    echo 'Games missing!';
}
于 2013-04-19T22:16:25.357 に答える
0
$data->response->games

このキーは、JSON 応答に存在しないようです。json_decode呼び出しの後に書いて、自分でデバッグしてみてください: var_dump($data->response);。これは、ここで何が問題なのかを確認するのに役立ちます。

于 2013-04-19T22:16:35.453 に答える