Помощь с получением XML через cURL - PullRequest
0 голосов
/ 29 мая 2011

У меня возникли проблемы со следующим кодом php:

<?php
$url = "http://api.ean.com/ean-services/rs/hotel/v3/list?    minorRev=1&cid=55505&apiKey=58x5kuujub8xbb5tzv3a2a8q&locale=en_US&currencyCode=USD&xml=    <HotelListRequest><destinationString>Seattle</destinationString>    <arrivalDate>08/01/2011</arrivalDate><departureDate>08/03/2011</departureDate><RoomGroup>    <Room><numberOfAdults>2</numberOfAdults></Room></RoomGroup>    <numberOfResults>1</numberOfResults></HotelListRequest>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$contents = curl_exec ($ch);
echo $contents;
curl_close($ch);
?>

Проблема в том, что $ contents содержит разметку, которая вообще не является XML, поэтому я не могу ее проанализировать. Это сбивает с толку, потому что ввод URL в адресную строку моего браузера покажет документ XML, но я не могу получить действительный документ XML с этим кодом.

Вот фрагмент строки, которая возвращается:

{"HotelListResponse":{"customerSessionId":"0ABAA83D-4428-4913-0382-28FBB1901EFC","numberOfRoomsRequested":1,"moreResultsAvailable":true,"cacheKey":"-32344284:1303828fbb1:-1ef9","cacheLocation":"10.186.168.61:7305","HotelList":{"@size":"1","HotelSummary":{"@order":"0"

Может ли кто-нибудь объяснить мне, где я иду не так?

Thx.

Ответы [ 2 ]

1 голос
/ 29 мая 2011

Вместо того, чтобы пытаться получить XML, который может не предоставляться, вы всегда можете работать с тем, что у вас есть, которое выглядит как JSON.

$ response = json_decode ($ contents, true);

Это даст вам ассоциативный массив ваших данных, с которым гораздо проще работать.

0 голосов
/ 29 мая 2011

Попробуйте удалить пробелы: "/ v3 / list? MinorRev = 1" -> "/ v3 / list? MinorRev = 1"

  1. Сделайте ваш URL правильным, как

    $url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?type=xml&minorRev=1&cid=55505&apiKey=58x5kuujub8xbb5tzv3a2a8q&locale=en_US&currencyCode=USD&xml=%3CHotelListRequest%3E%3CdestinationString%3ESeattle%3C/destinationString%3E%3CarrivalDate%3E08/01/2011%3C/arrivalDate%3E%3CdepartureDate%3E08/03/2011%3C/departureDate%3E%3CRoomGroup%3E%3CRoom%3E%3CnumberOfAdults%3E2%3C/numberOfAdults%3E%3C/Room%3E%3C/RoomGroup%3E%20%3CnumberOfResults%3E1%3C/numberOfResults%3E%3C/HotelListRequest%3E';

  2. Добавить возможность принимать только xml - в браузере у нас есть такой заголовок - в curl - нет:

    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/xml'));

  3. PROFIT !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...