0

我正在尝试解析 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>";
    }

但例如,如果我将 $player 和 $data1 放在 foreach 之前,然后将 $data 替换为唯一的 steamID(例如 76561197960435530),如下所示:

$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 上加载页面时,它可能无法正常工作,因为加载时间太长。

4

2 回答 2

0

我使用类似于以下的代码

$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数组,您可以使用并循环访问您要查找的字段。在这种情况下,它甚至作为所有三个头像大小。
于 2013-07-30T19:01:36.377 回答
0

您没有授权,或者您的 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 上加载页面时,它可能无法正常工作,因为加载时间太长。

在 Firefox 上打开“查看源代码”,然后上传文件(不在源视图中重新加载),然后刷新。你会看到一点点快。您需要了解 XML 文件的结构。

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

于 2013-07-26T13:33:10.270 回答