我想从我所做的API调用中提取一些数据。使用PHP CURL。
这是我的代码:
<?PHP
//use latest minorRev 14
$url ='http://api.ean.com/ean-services/rs/hotel/v3/list?minorRev=99';
$url .= '&apiKey=' . $apiKey;
$url .= '&cid=55505';
$url .= '&locale=en_US&city=Dallas&stateProvinceCode=TX&countryCode=US&numberOfResults=3';
$url .= '&searchRadius=50';
//using the cache returns results much faster
$url .= '&supplierCacheTolerance=MED_ENHANCED';
//dates and occupancy
$url .='&arrivalDate=09/04/2014&departureDate=09/05/2014&room1=2';
$header[] = "Accept: application/json";
$header[] = "Accept-Encoding: gzip";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$response = json_decode(curl_exec($ch));
$response = curl_exec($ch);
?>
<html>
<body>
<table>
<Tr>
<TD>
<?PHP
$hotels = simplexml_load_file('http://api.ean.com/ean-services/rs/hotel/v3/list?minorRev=99&apiKey=7z6tduachrht362dpnsch34v&cid=55505&locale=en_US&city=Dallas&stateProvinceCode=TX&countryCode=US&numberOfResults=3&searchRadius=50&supplierCacheTolerance=MED_ENHANCED&arrivalDate=09/04/2014&departureDate=09/05/2014&room1=2');
echo $hotels;
?>
</TD>
</Tr>
</table>
为什么我没有使用simplexml_load_file函数返回任何内容?
我也将此作为指南 - http://blog.teamtreehouse.com/how-to-parse-xml-with-php5
答案 0 :(得分:0)
如果您仔细查看已关联的指南,您会看到指南告诉您这样做:
echo $mysongs->song[0]->artist;
这意味着simplexml_load_file的返回不是简单的字符串,它是一个对象,您必须访问其数据。我不知道怎么做,但它看起来可能与此类似:
foreach($hotels as $hotel){
echo $hotel;
}
您必须更好地阅读使用指南。
正如我在评论中所说,只要您不确定如何访问或使用对象,使用代码die(var_dump($object));
运行程序可以帮助您获取该对象的大量信息,如何访问它。
答案 1 :(得分:0)
您是否正确地从$response
返回了simplexml_load_file
?
如果是,请从代码中删除此行:
$header[] = "Accept-Encoding: gzip";
从CURLOPT_ENCODING
中删除gzip。而是使用empty表示接受任何编码。
curl_setopt($ch,CURLOPT_ENCODING , "");
此外,在对响应执行json_decode
之前,只需将其打印或保存到文件中,然后观察是否从服务器返回了有效的json对象。
最后,通过启用详细模式来调试卷曲请求。
curl_setopt($ch,CURLOPT_VERBOSE, true);
答案 2 :(得分:0)
您拥有的API是以 JSON 格式返回数据而不是 XML 。
$hotels = file_get_contents($url);
echo $hotels;
这就是simplexml_load_file
失败的原因,您必须使用json_decode
代替
您以这种方式解析JSON
数据:
$data_json = json_decode(file_get_contents($url));
$HotelListResponse = $data_json->{"HotelListResponse"};
$HotelList = $HotelListResponse->{"HotelList"};
$HotelSummary = $HotelList->{"HotelSummary"};
var_dump($HotelSummary);
等等
您可以打印酒店名称:
foreach($HotelSummary as $summary){
$hotelName = $summary->{"name"};
echo $hotelName."<br />";
}