views:

165

answers:

2

Hiya,

I'm trying to use the Last.fm API for an application I'm creating, but am having some problems with validation.

If an API request gives an error it returns a code and message in the response XML like this:

<lfm status="failed">
<error code="6">No user with that name</error>
</lfm>

However, the request also returns an HTTP status of 400 (or in some cases 403) which DOMDocument considers an error and so then refuses to parse the XML.

Is there any way round this, so that I can retrieve the error code and message?

Thanks

Pete

A: 

You can always get the response with some other function like file_get_contents and then parse the XML with DOMDocument::loadXML

Edit:

http://www.php.net/manual/en/domdocument.load.php#91384

Kemo
This was my first thought too, though sadly it gave the same result:Warning: file_get_contents(someurl.com) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in userclass.php on line 23
PeteWilliams
A: 

A solution could be to separate your manipulations in two steps :

  • First, get the XML string, using curl, for example
  • Then, work on that string with DOMDocument.


There is an example of how you can use curl on the curl_exec manual page ; adding a few useful options, you could use something like this, I suppose :

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "YUR_URL_HERE");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_string = curl_exec($ch);
curl_close($ch);

// You can now work with $xml_string

And, for more options (there are a lot of them ^^ ), you can take a look to the manual page of curl_setopt.

Pascal MARTIN
That's done it - thanks!
PeteWilliams