【问题标题】:Printing specific XML Fields from Steam API从 Steam API 打印特定的 XML 字段
【发布时间】:2013-05-11 21:37:14
【问题描述】:

我正在尝试制作一个简单的函数,该函数将使用提交的 64 位 steamid 并使用 Steam API 吐回信息。我选择使用 XML 而不是 JSON,因为我过去使用过一些 XML。我对php还是很陌生。

获取数据并打印它工作正常,但我在打印特定字段时遇到问题

$steamid = $_SESSION['steamid'];
$url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=X&steamids=$steamid&format=xml";
$data = file_get_contents($url);
$xml = simplexml_load_string($data);

print var_dump($xml);

//trying to display the "personaname" but doing it wrong
echo $xml->response->players->player->personaname;

请注意,在此处发布之前删除了我的 API 密钥。这是我使用“print var_dump($xml)”返回的示例。

object(SimpleXMLElement)#1 (1) { ["players"]=> object(SimpleXMLElement)#2 (1) { ["player"]=> object(SimpleXMLElement)#3 (16) { ["steamid"]=> string(17) "76561198001776632" ["communityvisibilitystate"]=> string(1) "3" ["profilestate"]=> string(1) "1" ["personaname"]=> string(5) "johan" ["lastlogoff"]=> string(10) "1368300096" ["commentpermission"]=> string(1) "1" ["profileurl"]=> string(38) "http://steamcommunity.com/id/mrbbqlol/" ["avatar"]=> string(114) "http://media.steampowered.com/steamcommunity/public/images/avatars/b7/b765fa514b9c44376e84754acb12e66821d4564c.jpg" ["avatarmedium"]=> string(121) "http://media.steampowered.com/steamcommunity/public/images/avatars/b7/b765fa514b9c44376e84754acb12e66821d4564c_medium.jpg" ["avatarfull"]=> string(119) "http://media.steampowered.com/steamcommunity/public/images/avatars/b7/b765fa514b9c44376e84754acb12e66821d4564c_full.jpg" ["personastate"]=> string(1) "1" ["primaryclanid"]=> string(18) "103582791431859033" ["timecreated"]=> string(10) "1223663039" ["loccountrycode"]=> string(2) "SE" ["locstatecode"]=> string(2) "26" ["loccityid"]=> string(5) "43754" } } }

在用户 hakre 的帮助下,我打印出了原始 XML,它看起来是这样的:

<response>
<players>
<player>
<steamid>76561198001776632</steamid>
<communityvisibilitystate>3</communityvisibilitystate>
<profilestate>1</profilestate>
<personaname>johan</personaname>
<lastlogoff>1368300096</lastlogoff>
<commentpermission>1</commentpermission>
<profileurl>http://steamcommunity.com/id/mrbbqlol/</profileurl>
<avatar>
http://media.steampowered.com/steamcommunity/public/images/avatars/b7/b765fa514b9c44376e84754acb12e66821d4564c.jpg
</avatar>
<avatarmedium>
http://media.steampowered.com/steamcommunity/public/images/avatars/b7/b765fa514b9c44376e84754acb12e66821d4564c_medium.jpg
</avatarmedium>
<avatarfull>
http://media.steampowered.com/steamcommunity/public/images/avatars/b7/b765fa514b9c44376e84754acb12e66821d4564c_full.jpg
</avatarfull>
<personastate>1</personastate>
<primaryclanid>103582791431859033</primaryclanid>
<timecreated>1223663039</timecreated>
<loccountrycode>SE</loccountrycode>
<locstatecode>26</locstatecode>
<loccityid>43754</loccityid>
</player>
</players>
</response>

我查看了其他类似的问题,但我无法解决我的问题。我应该如何解析和回显特定字段?可以使用 simplexmlelement 吗?

谢谢

【问题讨论】:

    标签: php xml api simplexml steam


    【解决方案1】:

    simplexmlelement 可以用来做这个吗?

    是的,它可以而且你已经在使用它了。但是问题在于,您需要先了解 XML 结构。

    如果您在浏览器中进行调试,以下是 simplexml 的快速帮助:

    $steamid = $_SESSION['steamid'];
    $url     = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=X&steamids=$steamid&format=xml";
    $data    = file_get_contents($url);
    $xml     = simplexml_load_string($data);
    
    header('Content-Type: text/xml');
    die($xml->asXML());
    

    第一部分实际上就是你的代码,我只是在下面添加了两行,将 XML 逐字逐句地告诉浏览器它是 XML。然后,您的浏览器将按原样显示 XML(通常格式很好,您可以打开/关闭部分,打印漂亮并用不同颜色突出显示语法,例如在 Chromium 中)。

    您可以访问basic SimpleXML usage examples 中列出的元素。您不能太信任 SimpleXMLElements 上的 print_rvar_dump,因为它们不会向您显示整个 XML(子)树。

    【讨论】:

    • 谢谢,使用这两行代码,我可以查看原始 XML 文件并查看其结构。通过查看“基本 SimpleXML 用法”中的示例,我得出结论,我应该使用“echo $xml->response->players->player->personaname;”但这似乎没有任何结果。我尝试使用 player[0] 而不是仅使用 player,但这也不起作用。
    • 是的,可以,我尝试了您的 URL,但它需要一些我没有的 steamid,并且尝试后我只得到了 403 禁止,所以我无法告诉您到底出了什么问题。但是,如果您将 XML 添加到您的问题中,我或许可以为您提供一些指导您前进的建议。
    • @JohanSnitt:好的,$xml 已经是&lt;response&gt;,所以你不要把-&gt;response 放在上面,把那段去掉就可以了。
    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2018-05-05
    • 2012-10-07
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多