PHP如何点击URL并下载其xml

时间:2011-05-17 05:59:13

标签: php xml json

我正在尝试发送此查询:

http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK

到Web服务并下拉并解析那里的一堆字段,即:

// 1) totalResultsCount
// 2) name
// 3) lat
// 4) lng
// 5) countryCode
// 6) countryName
// 7) adminName1 - gives full state name
// 8) adminName2 - owner of the park.

我这样做:

$query_string = "http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK";

有人可以提供正确的代码来循环搜索结果并获取值吗?

3 个答案:

答案 0 :(得分:2)

由于响应是XML,因此您可以使用SimpleXML

$url = "http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK";
$xml = new SimpleXMLElement($url, null, true);

echo "totalResultsCount: " . $xml->totalResultsCount . "<br />";

foreach($xml->geoname as $geoname) {
    echo $geoname->toponymName . "<br />";
    echo $geoname->lat . "<br />";
    echo $geoname->countryCode . "<br />";
    echo $geoname->countryName . "<br />";
    echo $geoname->adminName1 . "<br />";
    echo $geoname->adminName2 . "<br />";
}

将显示如下结果:

totalResultsCount: 225
Glacier Bay National Park and Preserve
58.50056
US
United States
Alaska
US.AK.232

...

答案 1 :(得分:1)

首先,看起来Web服务正在返回XML而不是JSON。您可以使用SimpleXML来解析它。

其次,您可能需要查看curl

示例:

$ch = curl_init("http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK");

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$content = curl_exec($ch); 

curl_close($ch);

答案 2 :(得分:1)

fopen会给你一个资源,没有文件。既然你正在做一个json解码,你就会想把整个事情当成一个字符串。最简单的方法是file_get_contents。

$query = 'http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK';
$response = file_get_contents($query);
// You really should do error handling on the response here.
$decoded = json_decode($response, true);
echo '<p>Decoded: '.$decoded['lat'].'</p>';