XML-JSON内容协商

时间:2013-02-07 20:14:04

标签: php xml json

我希望只显示以下网页中的某些内容:http://sc2ranks.com/api/psearch/am/MxGPezz/1t/division/Felanis%20Sierra?appKey=sentinelgaming.net。到目前为止,我能够使用下面的PHP显示一些东西,但它甚至不是正确的数字。有人能告诉我如何从这个XML网页显示这个播放器的“成就点”吗?

$url = 'http://sc2ranks.com/api/psearch/am/MxGPezz/1t/division/Felanis%20Sierra?appKey=sentinelgaming.net';
$xml = file_get_contents($url);

echo $xml->achievement-points;

由于

2 个答案:

答案 0 :(得分:1)

此文件的内容类型取决于Accept标头或format查询参数。看来你至少可以检索XML或JSON。

您从file_get_contents()获得的默认值是JSON,因为它不包含Accept请求标头,但浏览器的默认值是XML,因为浏览器通常在其{包含XML mime类型{1}}请求标题。

获取JSON:

Accept

获取XML:

$url = 'http://sc2ranks.com/api/psearch/am/MxGPezz/1t/division/Felanis%20Sierra?appKey=sentinelgaming.net';

// &format=json is not strictly necessary,
// but it will give you fewer surprises
$json = file_get_contents($url.'&format=json');
$records = json_decode($json);
echo $records[0]->achievement_points, "\n";

要使用$sxe = simplexml_load_file($url.'&format=xml'); echo (string) $sxe->record->{'achievement-points'}, "\n"; 对象,请参阅this SimpleXML cheat sheet

您可以设置$sxe标头,而不是使用format参数。您还可以添加一些抽象来获取URL,以便您也可以检索内容类型和编码。见下面的例子。

Accept

然后您可以像这样使用function get_url($url, $context=null) { $response = file_get_contents($url, false, $context); $ctypeheaders = preg_grep('/^Content-Type:\s/i', $http_response_header); $ctype = NULL; if ($ctypeheaders) { $ctype = end($ctypeheaders); $ctype = end(explode(':', $ctype, 2)); $ctype = explode(';', $ctype, 2); $charset = isset($ctype[1]) ? $ctype[1] : ''; if ($charset && preg_match('/charset\s*=\s*([^\s]+)/i', $charset, $matches)) { $charset = $matches[1]; } $ctype[1] = $charset; $ctype = array_map('trim', $ctype); } return array($response, $ctype); }

get_url()

答案 1 :(得分:0)

也许:

    echo $xml->record[0]->achievement-points;