PHP 将 Json file_get_contains解析为 foreach (无法执行请求的操作,因为提供的句柄未处


PHP Parse Json file_get_contains into foreach (The requested operation cannot be carried out because the handle supplied is not in the correct state)

我正在尝试解析一个 xml 文件并按成员的 ID 显示成员,并带有指向其个人资料的链接:

$xml=simplexml_load_file("http://steamcommunity.com/gid/103582791433452366/memberslistxml/?xml=1");
foreach ($xml->members->children() as $data)
{
    echo '<a href="http://steamcommunity.com/profiles/'.$data.'">'.$data.'</a>'."<br>";
}

效果很好。

但是当我尝试从 json 文件(一个成员一个文件(显示每个成员的头像时,我在 dreamweaver 上收到错误"无法执行请求的操作,因为提供的句柄未处于正确的状态。

这是代码:

 $xml=simplexml_load_file("http://steamcommunity.com/gid/103582791433452366/memberslistxml/?xml=1");
    foreach ($xml->members->children() as $data)
    {   
    $player=file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=MY_APY_KEY&steamids=$data");
    $data1=json_decode($player);
        echo '<a href="http://steamcommunity.com/profiles/'.$data.'"><img src="'.$data1->response->players[0]->avatar.'">'.$data.'</a>'."<br>";
    }

但是例如,如果我在foreach之前放置$player和$data 1,然后我用唯一的steamID(例如76561197960435530(替换$data,如下所示:

$xml=simplexml_load_file("http://steamcommunity.com/gid/103582791433452366/memberslistxml/?xml=1");
$player=file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=MY_API_Key&steamids=76561197960435530");
$data1=json_decode($player);
foreach ($xml->members->children() as $data)
{
    echo '<a href="http://steamcommunity.com/profiles/'.$data.'"><img src="'.$data1->response->players[0]->avatar.'">'.$data.'</a>'."<br>";
}

它将通过成员的ID显示成员,并带有指向其个人资料的链接,并将在每个成员旁边显示此steamid(76561197960435530(的头像。我想做的是在每个成员的ID旁边显示他们的头像,而不是76561197960435530的头像。

我也试图只输入这段代码:

$xml=simplexml_load_file("http://steamcommunity.com/gid/103582791433452366/memberslistxml/?xml=1");
foreach ($xml->members->children() as $data)
{
    $player=file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=my_api_key&steamids=$data");
    $data1=json_decode($player);
    var_dump($data1);
}

非常长,几分钟,但在 dreamweaver 上工作,它显示每个 json 文件的结构化信息。但是当我在 Firefox 上加载页面时,它可能不起作用,因为它加载时间太长。

您没有授权,或者您的 API 输入不正确:

 <?php

  $xml=simplexml_load_file("http://steamcommunity.com/gid/103582791433452366/memberslistxml/?xml=1");
     foreach ($xml->members->children() as $data)
     {   
     $player=file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=MY_APY_KEY&steamids=$data");
     $data1=json_decode($player);
    var_dump($data1);
     }
 ?>

data1结果 :

 PHP Warning: 
 file_get_contents(http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?        key=MY_APY_KEY&steamids=76561198066695135):
 failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized
 in /home/marin/a.php on line 8
因此,您

收到返回的错误 401,这意味着您未使用用户名和密码在 HTTP 服务器上获得授权,或者未为 STEAM 帐户设置授权的 API 密钥。

作者说:

但是当我在火狐上加载页面时,它可能不起作用,因为它是 加载时间太长。

在Firefox上打开"查看源",然后上传文件(不在源视图中重新加载(,然后刷新。你会看到一点点快一点。您需要知道XML文件的结构是什么。

请注意,您无法更改接收到远程数据的数据。

我使用类似于以下内容的代码

$playersStr = "";
$players = array();
// Build your $playersStr as a comma seperated string here

// Get players' information from Valve
$url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$_STEAMAPI&steamids=$playersStr";
$json_object= file_get_contents($url);
$json_decoded = json_decode($json_object);
// Complete our player array with additional details from the API
foreach ($json_decoded->response->players as $player)
{
    $players[$player->steamid]['steamid'] = $player->steamid;
    $players[$player->steamid]['personaname'] = $player->personaname;
    $players[$player->steamid]['profileurl'] = $player->profileurl;
    $players[$player->steamid]['avatar'] = $player->avatar;
    $players[$player->steamid]['avatarmedium'] = $player->avatarmedium;
    $players[$player->steamid]['avatarfull'] = $player->avatarfull;
}

需要注意的几点:

  • $playersStr是一个逗号分隔的字符串,在我的例子中,它是从数据库查询构建的。您可以根据需要构建它,只要它最终成为一串逗号分隔的配置文件 ID。
  • $_STEAMAPI是您的 Steam API 密钥。
  • 在此结束时,您将拥有一个$players数组,您可以使用该数组并循环访问要查找的字段。在这种情况下,它甚至与所有三个头像大小一样。