sebastian: XML aus Yahoo API - Parse Fehler

Habe hier ne XML, generiert von der Yahoo API:
http://shopping.yahooapis.com/ShoppingService/v2/catalogListing?appid=YahooDemo&idtype=brand,model&idvalue=Sony,PSP&getspec=1&getreview=1

wenn ich die aber über PHP parsen will, bekomme ich immer nen Fehler.

PHP Code:

  
$request_url = 'http://shopping.yahooapis.com/ShoppingService/v2/catalogListing?appid=YahooDemo&idtype=brand,model&idvalue=Sony,PSP&getspec=1&getreview=1';  
  
$xml = simplexml_load_file($request_url) or die("feed not loading");  
  
var_dump($xml);  

Die Browser Ausgabe:

object(SimpleXMLElement)#1 (1) { ["Message"]=>  string(20) "User-agent not valid" }

Woher kommt das und wie kann ich es beheben. Habe zur Sicherheit mal eine andere XML Datei aus der Yahoo API geparst und die ging:

http://api.shopping.yahoo.com/ShoppingService/v2/productSearch?appid=review_search&category=Computer%20Accessories&show_subcategories=1&refinement=4168-Brand=HP

Gruß Sebastian

  1. Hi,

    Habe hier ne XML, generiert von der Yahoo API:
    http://shopping.yahooapis.com/ShoppingService/v2/catalogListing?appid=YahooDemo&idtype=brand,model&idvalue=Sony,PSP&getspec=1&getreview=1

    wenn ich die aber über PHP parsen will, bekomme ich immer nen Fehler.
    [...]
    Die Browser Ausgabe:

    object(SimpleXMLElement)#1 (1) { ["Message"]=>  string(20) "User-agent not valid" }

    Woher kommt das

    Das ist wohl kein Fehler beim Parsen, sondern das, was die XML-Ressource enthaelt.

    und wie kann ich es beheben.

    Yahoo schmeckt wohl der User-Agent nicht, den dein PHP-Script beim Abrufen der Ressource mitgibt.
    Wenn den zu aendern ueber SimpleXML nicht geht (sehe gerade bei den Parametern keine Moeglichkeit), musst du die Ressource wohl erst mal anders laden, bspw. ueber file_get_contents. Da kannst du im context u.a. einen User-Agent mitgeben.
    (Natuerlich musst du erst mal herausfinden, was fuer einen Yahoo fuer valid halten wuerde.)

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Dann wäre Yahoo aber etwas komisch, wen die in der API verschiedene User Agents voraussetzen, aus productSearch gehts ja

      1. Hi,

        Dann wäre Yahoo aber etwas komisch, wen die in der API verschiedene User Agents voraussetzen,

        Tja, moeglicherweise sind sie etwas komisch.

        aus productSearch gehts ja

        Und das soll jetzt ein Argument sein ...?

        Dein XML enthaelt eindeutig die Meldung, dass ihm dein User Agent nicht schmeckt.
        Was sagt denn die Doku von Yahoo bzgl. valider User Agents?

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. einfach von nem Browser, um Bots und Spider vorzubeugen.

          1. EDIT:

            Habe es mit file_get_contents() gemacht, aber ebenso erfolglos:

            $request_url = 'http://shopping.yahooapis.com/ShoppingService/v2/catalogListing?appid=YahooDemo&idtype=brand,model&idvalue=Sony,PSP&getspec=1&getreview=1';  
              
            ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1');  
              
            $file = file_get_contents($request_url);  
              
            $xml = simplexml_load_file($file);  
              
            var_dump($xml);
            

            Und das bekomm ich geliefert:

            Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="utf-8"?> <Catalogs xmlns="urn:yahoo:merchoffers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:yahoo:merchoffers http://shopping.yahooapis.com/shoppingservice/v2/cataloglisting.xsd"> <Catalog ID="1951018158" zip=""> <Offers totalOffers="0" /> <Reviews firstReviewPosition="1" totalReviewsAvailable="489" totalReviewsReturned="10"> <Review> <Title>The iPod of games and movies</Title> <Reviewer>nsorens</Reviewer> <CreateTime>1111979522</CreateTime> <HelpfulRecommendations>233</HelpfulRecommendations> <TotalRecommendations>275</TotalRecommendations> <Ratings> <Rating ratingType="Overall" in C:\xampp\htdocs\jahoo api\test.php on line 9
            bool(false)

            1. Hi,

              Habe es mit file_get_contents() gemacht, aber ebenso erfolglos:

              Was schwafelst du von "ebenso erfolglos"?
              Die Meldung ist doch jetzt schon eine ganz andere, und zwar jetzt ein echter XML-Parsing-Fehler:

              Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity

              Dann schau mal, ob sich das ueber die Angabe der LibXML-Option LIBXML_NOENT beheben laesst (bin mir nicht sicher).

              MfG ChrisB

              --
              „This is the author's opinion, not necessarily that of Starbucks.“
              1. Was schwafelst du von "ebenso erfolglos"?
                Die Meldung ist doch jetzt schon eine ganz andere, und zwar jetzt ein echter XML-Parsing-Fehler:

                Sorry, war eventuell nicht ganz der richtige Ausdruck

                Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity

                Dann schau mal, ob sich das ueber die Angabe der LibXML-Option LIBXML_NOENT beheben laesst (bin mir nicht sicher).

                Wie geht das, also wie vergebe ich eine LibXML Option?

                Gruß

                1. Hi,

                  Dann schau mal, ob sich das ueber die Angabe der LibXML-Option LIBXML_NOENT beheben laesst (bin mir nicht sicher).

                  Wie geht das, also wie vergebe ich eine LibXML Option?

                  Schau im Manual nach, welche Parameter simplexml_load_string akzeptiert.

                  MfG ChrisB

                  --
                  „This is the author's opinion, not necessarily that of Starbucks.“
                  1. OMG, ich bin so blöd. Ich hatte immernoch simplexml_load_file() drinne :-(

                    Habe es jetzt in simplexml_load_string() geändert, geht.

                    Danke dir, Gruß Sebastian