Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Pagina 1 van 2 1 2 LaatsteLaatste
Weergeven resultaten 1 tot 20 van 30

Onderwerp: PHP review ophalen via API

  1. #1
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Vraag is opgelost

    PHP review ophalen via API

    Goedemorgen! Ik wil via PHP code bij een API aanroep URL een review ophalen en in een blok plaatsen op de site.
    Dit is nieuw voor mij dus zou fijn zijn als ik wat op weg wordt geholpen ;-)
    Ben natuurlijk wezen Googlen en heb al iets maar verre van compleet.

    Stukje van de XML code van die url is:
    Code:
    <Kantoor xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/AdvieskeuzeAPI.Models">
    <AantalReviews>134</AantalReviews>
    
    <KNIP>
    
    <Reviews>
    <Review>
    <Bron>xxxxxxxxxxxx</Bron>
    <Datum>2018-10-09T19:07:32.753</Datum>
    <Naam>Karel</Naam>
    <Productgroep>Beroep</Productgroep>
    <Toelichting>
    Curabitur quam leo, varius a lorem sit amet, volutpat placerat nibh. Aliquam erat volutpat.
    </Toelichting>
    <Waardering>5</Waardering>
    </Review>
    <Review>
    <Bron>xxxxxxxxxxxx</Bron>
    <Datum>2018-09-22T21:38:55.933</Datum>
    <Naam>Bob</Naam>
    <Productgroep>Beroep</Productgroep>
    <Toelichting>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sollicitudin lacus eu ante accumsan, et vulputate dui tristique.
    </Toelichting>
    <Waardering>5</Waardering>
    </Review>
    Met onderstaande code kan ik de XML aanroepen maar wordt alles onder elkaar getoond, dat is niet de bedoeling. Hoe kan ik 1 review tonen? Liefst ook nog willekeurig.

    Code:
    <div class="col-md-3 col-xs-12 banner left">
        <h4 class="text">REVIEW</h4>
                <?php
                $reviews = file_get_contents('https://api.websitenaam.nl/locatie/details/apicode/xxxxxxx/xxxxx');
                echo $reviews;
                ?>
    </div>
    Thanks!

  2. #2
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Ben al weer wat stapjes verder, met een test URL krijg ik info uit het XML bestand maar nog niet met de live URL want dan krijg ik foutmelding.

    Gaat goed:
    Code:
    <?php
    $url=file_get_contents('http://www.w3schools.com/php/note.xml');
    $xml = new SimpleXMLElement($url);
    
    echo $xml->Naam;
    
    ?>
    Gaat fout:
    Code:
    <?php
    $url=file_get_contents('https://api.websitenaam.nl/locatie/details/apicode/xxxxxxx/xxxxx');
    $xml = new SimpleXMLElement($url);
    
    echo $xml->review;
    
    ?>
    Melding: Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Start tag expected, '<' not found in

  3. #3
    Giga Senior PHP4U's avatar
    Geregistreerd
    3 augustus 2014
    Volgens mij is de XML niet correct. Haal die eens door een XML-validator?

  4. #4
    Moderator
    Verenigingslid
    Tha Devil's avatar
    Geregistreerd
    1 september 2002
    Volgens de documentatie van SimpleXMLElement zou je de url ook direct mee kunnen geven aan je constructor:

    PHP Code:
    1
    2
    
    <?php
    $sxe = new SimpleXMLElement('http://example.org/document.xml', NULL, TRUE);

    Heb je daar meer success mee?

    Weet je zeker dat de URL een geldige XML teruggeeft?

    Van welke dienst is dit de API? Wellicht kunnen we daar de documentatie van doornemen.

  5. #5
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Bedankt @php4u en @thadevil voor reacties

    XML validator geeft error op 1e regel; This XML file does not appear to have any style information associated with it. The document tree is shown below.

    Die aanpassing in de code @thadevil maakt geen verschil maar goed om te weten dat ik het ook zo kan schrijven.

    Ik heb de xml aanbieder maar mail gestuurd (advieskeuze) en hoop dat ze snel reageren.


    Dus even afwachten denk ik nu.


    Oh hoe kan ik een loop maken om meerdere (in dit geval reviews) op te vragen?
    Laatst aangepast door damnsharp : 11 oktober 2018 om 14:40 Reden: aanvulling in tekst

  6. #6

  7. #7
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Dank je @php4u! Dat ziet er inderdaad goed uit. Ga er morgenvroeg mee aan de slag.

    Las ergens dat ik het linkje moet parsen naar een Array; moet ik ook even uitzoeken maar dan zou het wel moeten werken om gegevens op te halen van de URL.
    Wordt ook vervolgd

  8. #8
    Giga Senior bron's avatar
    Geregistreerd
    13 augustus 2013
    Locatie
    Voorburg
    Afstand tot server
    ±160 km
    Met print_r kan je makkelijk zien wat je hebt gekregen. Simpele versie:
    Code:
    <pre><code>
    <?php
    $url = 'http://www.home.lan/abc/test/data.xml'; // xml lokaal gezet
    $xml = file_get_contents($url);
    if ($xml !== false) {
        $arr = explode("\n", $xml);
        print_r($arr);
    }
    ?>
    </code></pre>
    Laatst aangepast door bron : 11 oktober 2018 om 19:30
    Voor bestaande- en nieuwe websites op smartphone, tablet en pc.

  9. #9
    Giga Senior bron's avatar
    Geregistreerd
    13 augustus 2013
    Locatie
    Voorburg
    Afstand tot server
    ±160 km
    Als je geen permissie hebt om file_get_contents te gebruiken dan kan je curl proberen. Met een function() wordt het
    Code:
    function get_xml_from_url($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13';
        curl_setopt($ch, CURLOPT_USERAGENT, $ua);
        $xmlstr = curl_exec($ch);
        curl_close($ch);
        return $xmlstr;
    }
    
    $url = 'http://www.home.lan/abc/test/data.xml'; // xml lokaal gezet (bijlage)
    $xmlstr = get_xml_from_url($url);
    $xmlobj = new SimpleXMLElement($xmlstr);
    // $xmlobj = (array)$xmlobj; // array ipv object
    // print_r($xmlobj);
    echo '<h3>', $xmlobj->AantalReviews, ' reviews gevonden</h3>';
    foreach ($xmlobj->Reviews->Review as $value) {
        echo '<br>', $value->Naam, ' |', $value->Waardering, '| ', $value->Datum;
    }
    
    Resultaat print_r(object)
    
    SimpleXMLElement Object
    (
      [AantalReviews] => 3
      [Reviews] => SimpleXMLElement Object
        (
          [Review] => Array
            (
              [0] => SimpleXMLElement Object
                (
                  [Bron] => xxxxxxxxxxxx
                  [Datum] => 2018-10-09T19:07:32.753
                  [Naam] => Karel
                  ...
                )
              [1] => SimpleXMLElement Object
                (
                  [Bron] => xxxxxxxxxxxx
                  [Datum] => 2018-09-22T21:38:55.933
                  [Naam] => Bob
                  ...
                )
            )
        )
    )
    Attached Files Attached Files
    Laatst aangepast door bron : 11 oktober 2018 om 21:20
    Voor bestaande- en nieuwe websites op smartphone, tablet en pc.

  10. #10
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Thanks @bron voor meedenken! :-)

    Eerste code doet het perfect; ik krijg netjes alle XML gegevens onder elkaar, pfew.

    De tweede code doet het niet, Parse error: syntax error, unexpected 'print_r' (T_STRING)
    Maar ga stukje daarvan bij de eerste code proberen te plaatsen om gegevens eruit te halen.

  11. #11
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Hè chips... het lukt me maar niet om een eenvoudig veld uit het XML bestand te laten tonen. Vind het te lastig.
    Ik krijg wel info eruit op 2 verschillende manieren, zie VOORBEELD 1 en 3. Maar bij 2 gaat het niet goed. Snap ook niet precies hoe ik de velden in XML bestand kan aanroepen.

    Graag hulp :-)

    Wil uiteindelijk een willekeurig review laten tonen maar nu zou 1tje al fijn zijn:
    Code:
    <Review>
    <Bron>xxxxxxxxxx</Bron>
    <Datum>2018-09-22T21:38:55.933</Datum>
    <Naam>Bob</Naam>
    <Productgroep>Beroep</Productgroep>
    <Toelichting>
    Helemaal van deze tijd. Perfect voor ons. De laagste prijs en toch alle service. 
    </Toelichting>
    <Waardering>5</Waardering>
    </Review>
    <Review>
    <Bron>xxxxxxxxxx</Bron>
    <Datum>2018-09-17T17:59:56.693</Datum>
    <Naam>Bert</Naam>
    <Productgroep>Beroep</Productgroep>
    <Toelichting>
    De begeleiding en het contact liep erg goed. Er werd snel gereageerd op mailtjes en de adviezen waren professioneel.
    </Toelichting>
    <Waardering>5</Waardering>
    </Review>
    PHP code
    Code:
    <?php
    $url = 'https://api.websitenaam.nl/locatie/details/apicode/xxxxxxx/xxxxx'; // xml lokaal gezet
    $xml = file_get_contents($url);
    if ($xml !== false) {
        $arr = explode("\n", $xml);
        echo 'VOORBEELD 1</br>';
        print_r($arr);
    }
    
    echo '</br>VOORBEELD 2</br>';
    $Kantoor = file_get_contents($url);
    echo $Kantoor->Reviews[0]->Toelichting;
    
    echo '</br>VOORBEELD 3</br>';
    echo '</br>';
    print_r($Kantoor);
    
    ?>
    De output:
    Code:
    VOORBEELD 1
    Array ( [0] => {"Naam":"xxxxxxxxxxx.nl xxxxxxxxxx Internetmakelaar","Slug":"xxxxxxxxxx","Score":9.8,"ID":"d3705873-361c-4871-b271-99a5892f08f7","AantalReviews":134,"LaatsteReview":"2018-10-09T19:07:32.753","ProfielCompleet":68,"IsAmbassadeur":true,"IsDataGecontroleerd"
    <KNIP>
    
    
    VOORBEELD 2
    
    VOORBEELD 3
    
    {"Naam":"xxxxxxxxxxxxxxx.nl xxxxxxxxxxxxxx Internetmakelaar","Slug":"xxxxxxxxxxxx","Score":9.8,"ID":"d3705873-361c-4871-b271-99a5892f08f7","AantalReviews":134,"LaatsteReview":"2018-10-09T19:07:32.753","ProfielCompleet":68,"IsAmbassadeur":true,"IsDataGecontroleerd"
    Laatst aangepast door damnsharp : 22 oktober 2018 om 15:04

  12. #12
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Ik zal een nieuwe vraag in XML gedeelte stellen en eenvoudiger beginnen; daarmee kom ik hopelijk verder.

  13. #13
    Giga Senior bron's avatar
    Geregistreerd
    13 augustus 2013
    Locatie
    Voorburg
    Afstand tot server
    ±160 km
    Even terug bij #9. Je krijgt een errror bij print_r. Heb je dit staan? Dus mét (array)$xmlobj in de code?

    Code:
    $xmlobj = (array)$xmlobj;
    print_r($xmlobj);
    Bij mij werkt het.
    Voor bestaande- en nieuwe websites op smartphone, tablet en pc.

  14. #14
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Hoi @bron, ik had de code die je bij #9 hebt overgenomen en in php bestandje gezet maar dan krijg ik direct een error; dus iets doe ik niet goed denk ik.

    Vond op stack overflow onderstaande code en aangepast met een test URL en die geeft in ieder geval XML data weer, behalve als ik die test URL verander door "mijn" URL dan weer leeg scherm.

    PHP Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <?php
    $url="http://helgesverre.com/blog/feed";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);    // get the url contents
     
    $data = curl_exec($ch); // execute curl request
    curl_close($ch);
     
    $xml = simplexml_load_string($data);
    print_r($xml)
     
    ?>

  15. #15
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Hè hè, met json query heb ik er iets uit gekregen, nog niet wat ik wil maar er is beweging in:

    PHP Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <?php
     
    $url = 'https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7?json=true'; // path to your JSON file
    $data = file_get_contents($url); // put the contents of the file into a variable
    $kantoor = json_decode($data); // decode the JSON feed
     
    echo $kantoor->Naam;
     
    ?>

    Alleen nu nog een review eruit halen en dan random een review

  16. #16
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Voor de duidelijkheid, van het volgende bestand krijg ik bijv Naam of Plaats eruit maar niet een Review:

    Code:
    <Kantoor xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/AdvieskeuzeAPI.Models">
    <AantalReviews>135</AantalReviews>
    <Naam>Testbedrijf</Plaats>
    <Plaats>Oss</Plaats>
    <Reviews>
    	<Review>
    		<Toelichting>
    		blablabla
    		</Toelichting>
    	</Review>
    	<Review>
    		<Toelichting>
    		nog meer blablabla
    		</Toelichting>
    	</Review>
    </Reviews>
    Als ik echo $kantoor->Reviews; doe krijg ik melding "Array".
    Laatst aangepast door damnsharp : 23 oktober 2018 om 14:50 Reden: aanvulling

  17. #17
    Giga Senior bron's avatar
    Geregistreerd
    13 augustus 2013
    Locatie
    Voorburg
    Afstand tot server
    ±160 km
    Dit werkt bij mij ook.

    Code:
    $url = 'http://www.example.nl/bla/bla/data.xml';
    $content = file_get_contents($url);
    $Reviews = simplexml_load_string($content);
    if ($Reviews !== false) {
        // toon alle reviews met alle eigenschappen
        foreach ($Reviews->Review as $ReviewProp) {
            echo '<br>' . $ReviewProp->Naam;
            echo '<br>' . $ReviewProp->Datum;
            echo '<br>' . $ReviewProp->Toelichting;
            echo '<br>';
        }
    }
    // toon alleen van review 1 de naam en de toelichting. Reviews beginnen bij Review[0]
    echo '<br>' . $Reviews->Review[1]->Naam;
    echo '<br>' . $Reviews->Review[1]->Toelichting;
    Kan je hiermee verder?

    Noot: bij de xml van:
    #11 mis ik bovenaan <Reviews> en onderaan </Reviews>
    #16 een mismatch in <Naam>Testbedrijf</Plaats> en aan het eind mist </Kantoor>
    Laatst aangepast door bron : 23 oktober 2018 om 17:06
    Voor bestaande- en nieuwe websites op smartphone, tablet en pc.

  18. #18
    Giga Senior bron's avatar
    Geregistreerd
    13 augustus 2013
    Locatie
    Voorburg
    Afstand tot server
    ±160 km
    Nu aangepast aan al je laatste berichtjes

    Gegevens
    Code:
    <Kantoor xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/AdvieskeuzeAPI.Models">
    <AantalReviews>2</AantalReviews>
    <Naam>Testbedrijf</Naam>
    <Plaats>Oss</Plaats>
    <Reviews>
    <Review>
    <Bron>xxxxxxxxxx</Bron>
    <Datum>2018-09-22T21:38:55.933</Datum>
    <Naam>Bob</Naam>
    <Productgroep>Beroep</Productgroep>
    <Toelichting>Helemaal van deze tijd. Perfect voor ons. De laagste prijs en toch alle service.</Toelichting>
    <Waardering>5</Waardering>
    </Review>
    <Review>
    <Bron>xxxxxxxxxx</Bron>
    <Datum>2018-09-17T17:59:56.693</Datum>
    <Naam>Bert</Naam>
    <Productgroep>Beroep</Productgroep>
    <Toelichting>De begeleiding en het contact liep erg goed. Er werd snel gereageerd op mailtjes en de adviezen waren professioneel.</Toelichting>
    <Waardering>5</Waardering>
    </Review>
    </Reviews>
    </Kantoor>
    PHP
    Code:
    $url = 'http://www.home.lan/bla/bla/data.xml';  // url aanpassen
    $content = file_get_contents($url);
    $Kantoor = simplexml_load_string($content);
    if ($Kantoor !== false) {
    
        // toon structuur van Kantoor
        echo '<pre>'; print_r($Kantoor); echo '</pre>';
    
        // Toon [AantalReviews]
        echo '<p>' . $Kantoor->AantalReviews . '</p>';
    
        // Toon een lijst met alle reviews
        foreach ($Kantoor->Reviews->Review as $ReviewItem) {
            echo '<p>';
            echo $ReviewItem->Naam . '<br>';
            echo $ReviewItem->Datum . '<br>';
            echo $ReviewItem->Toelichting . '<br>';
            echo '</p>';
        }
    
        // Toon de [naam] van 10 reviews (of minder als er minder reviews zijn)
        echo '<p>';
        for ($i = 0; $i < 10; $i++) {
            if ($i < $Kantoor->AantalReviews) {
                echo $Kantoor->Reviews->Review[$i]->Naam . '<br>';
            }
        }
        echo '</p>';
    
        // Toon Datum van Review[0] en Productgroep van Review[1]
        echo '<p>' . $Kantoor->Reviews->Review[0]->Datum . '</p>';
        echo '<p>' . $Kantoor->Reviews->Review[1]->Productgroep . '</p>';
    }
    Zo ziet de structuur eruit
    Code:
    SimpleXMLElement Object (dit is Kantoor)
    (
      [AantalReviews] => 2
      [Naam] => Testbedrijf
      [Plaats] => Oss
      [Reviews] => SimpleXMLElement Object
      (
        [Review] => Array
        (
          [0] => SimpleXMLElement Object
          (
            [Bron] => xxxxxxxxxx
            [Datum] => 2018-09-22T21:38:55.933
            ....
    Laatst aangepast door bron : 23 oktober 2018 om 17:16
    Voor bestaande- en nieuwe websites op smartphone, tablet en pc.

  19. #19
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Hoi @bron,
    Tof dat je ook zo meedenkt! Ik heb je laatste code geprobeerd maar ik krijg weer wit scherm.
    Zie dat $Kantoor ook niets laat zien; heb wat code erboven gezet voor test.

    PHP Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    <?php
    $url = 'https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7';  // url aanpassen
    $content = file_get_contents($url);
    $Kantoor = simplexml_load_string($content);
     
    echo 'content inhoud';
    echo '<pre>'; print_r($content); echo '</pre>';
    echo '</br>';
    echo 'kantoor inhoud';
    echo '<pre>'; print_r($Kantoor); echo '</pre>';
     
    if ($Kantoor !== false) {

    Dus die echo voor de $content geeft wel wat weer, maar de echo $Kantoor niets...


    Heb ook geprobeerd om een regel met juiste XML header toe te voegen maar dat maakt niet uit:

    PHP Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <?php
    $url = 'https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7';  // url aanpassen
    $content = '<?xml version="1.0" standalone="yes"?>';
    $content .= file_get_contents($url);
    $Kantoor = simplexml_load_string($content);
     
    echo 'content inhoud';
    echo '<pre>'; print_r($content); echo '</pre>';
    echo '</br>';
    echo 'kantoor inhoud';
    echo '<pre>'; print_r($Kantoor); echo '</pre>';
     
    if ($Kantoor !== false) {

    toevoeging: denk dat het met simplexml_load_string niet gaat lukken; met json kreeg ik er wel wat meer uit dus zal dat combineren met jouw code aanpassingen
    Laatst aangepast door damnsharp : 26 oktober 2018 om 15:52 Reden: textuele toevoeging en code tag aangepast naar php

  20. #20
    Senior Member damnsharp's avatar
    Geregistreerd
    6 januari 2012
    Locatie
    Oss
    Afstand tot server
    ±64 km
    Wat ik nu denk, is dat de hele URL de verkeerde output geeft. Bijvoorbeled het veld "Naam" of "Woonplaats" zie ik er wel tussen staan en die kan ik met json ook oproepen.
    Maar "Reviews" zie ik er niet tussen staan.
    De URL met de JSON output

    PHP Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    <?php
     
    $url = 'https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7?json=true'; // path to your JSON file
    $data = file_get_contents($url); // put the contents of the file into a variable
    $Kantoor = json_decode($data); // decode the JSON feed
     
    echo '<p>' . $Kantoor->Naam . '</p>'; // dit geeft de naam weer
     
    echo '<p>' . $Kantoor->Plaats . '</p>'; // dit geeft de plaats weer
     
    echo '<p>' . $Kantoor->Reviews . '</p>'; // deze regel geeft de melding Array
     
    // Toon [AantalReviews]
    echo '<p>' . $Kantoor->AantalReviews . '</p>'; // dit geeft melding 135
     
    echo '<p>' . $Kantoor->Medewerkers->Medewerker[1]->Achternaam . '</p>'; // geeft niets weer
    ?>

Pagina 1 van 2 1 2 LaatsteLaatste

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren