PHP review ophalen via API

Status
Niet open voor verdere reacties.
Heb reactie van advieskeuze gekregen en ze schrijven
"Naam en Plaats zijn waardes in de root van de json en xml. Reviews en Medewerkers zijn weer eigen lijstjes van elementen, je kan ze met de hand vinden als je de url aanroept en zoekt op de termen.
"Reviews":[{" ...
"Medewerkers":[{" ...
Je zal ze net als de XML moeten inlezen met een json parser."

Het klinkt logisch, ik ga het daarmee proberen.
 
De return data heeft in een review geen verschillende niveaus zodat je het (niet op een nette manier) makkelijk kan maken met
Code:
// lees de content
$url = 'https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7';
$content = file_get_contents($url);
// verwijder alles [B]tot[/B] "Reviews"
$pos = stripos($content, '"Reviews":[') + 12;
$content = substr($content, $pos);
// verwijder alles [B]vanaf[/B] "Medewerkers"
$pos = stripos($content, '],"Medewerkers"') - 1;
$content = substr($content, 0, $pos);
// maak een array met reviews
$reviews = explode('},{', $content);
// elke cel is nu een comma-seperated review (verder uitwerken)
echo '<pre>'; print_r($reviews); echo '</pre>';
Met deze url werkt dit bij mij.
 
Na jouw berichtje gelezen te hebben net nog een keer naar de data gekeken. Hiermee moet het lukken.
Code:
$url = 'https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7';
$content = file_get_contents($url);
if ($content !== false) {
  $Kantoor = json_decode($content);
  if (!is_null($Kantoor)) {
    foreach ($Kantoor->Reviews as $Review) {
      echo '<p>';
      echo $Review->Naam . '<br>';
      echo $Review->Datum . '<br>';
      echo $Review->Toelichting . '<br>';
      echo '</p>';
    }
  } else echo 'Decode json mislukt.';
} else echo 'Get content mislukt.';
 
Laatst bewerkt:
Top @bron! :thumb: Met die code voorbeelden worden eindelijk de reviews zichtbaar.
Ik ga hem uitpluizen om te zien waarom die code nu wel werkt.
En dan zo maken dat ik een random review kan laten zien of de laatste in ieder geval.

Fijn dat jij en andere helpmij-ers zo hebben meegedacht.
 
Nou @bron ik blijf het lastig vinden, dacht om 1 review op te halen maar krijg dat niet voor mekaar.
Heb
PHP:
echo $Kantoor->Reviews->$Review[2]->Toelichting;
erbij gezet (3e review) maar geeft geen tekst weer.
Dus
PHP:
$url = 'https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7';
$content = file_get_contents($url);
if ($content !== false) {
  $Kantoor = json_decode($content);
  if (!is_null($Kantoor)) {
    foreach ($Kantoor->Reviews as $Review) {
      echo '<p>';
      echo $Review->Naam . '<br>';
      echo $Review->Datum . '<br>';
      echo $Review->Toelichting . '<br>';
      echo '</p>';
    }
  echo $Kantoor->Reviews->$Review[2]->Toelichting; //1 review tonen
  } else echo 'Decode json mislukt.';
} else echo 'Get content mislukt.';
 
Als je in plaats van de gehele foreach loop dit zet:

Code:
echo '<pre>'; print_r($Kantoor); echo '</pre>';

dan zie je in het object $Kantoor alle eigenschappen.

Sommige eigenscahppen van $Kantoor zijn opgenomen als array omdat er meerdere van kunnen zijn.
Dit zijn de arrays Producten, Reviews, Medewerkers en Openingstijden.

Unieke eigenscahppen van object $Kantoor vind je het meest links in de structuur zoals $Kantoor->Lat en $Kantoor->Long.

Je kan zo de array Reviews in het object $Kantoor gebruiken (in plaats van foreach loop):

Code:
// voorbeeld: toon 3e review (array telt vanaf 0)
echo '<p>' . $Kantoor->Reviews[2]->Naam . '<br>';
echo  $Kantoor->Reviews[2]->Toelichting . '</p>';

// voorbeeld: toon aantal reviews
echo '<p>Aantal reviews is ' . count($Kantoor->Reviews) . '</p>';

Een uitgewerkt voorbeeld met random weergave (commentaar heb ik ertussen gezet)

Code:
$url = 'https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7';
$content = file_get_contents($url);
if ($content !== false) {
  $Kantoor = json_decode($content);
  if (!is_null($Kantoor)) {
    // toon dit aantal reviews (of minder als er minder zijn)
    $showReviews = 10;
    // shuffle een kopie van de array Reviews
    $randomReviews = $Kantoor->Reviews;
    shuffle($randomReviews);
    // als er minder reviews zijn laat er dan minder zien
    $countReviews = count($randomReviews);
    if ($countReviews < $showReviews) $showReviews = $countReviews;
    // in een loop de random reviews doorlopen
    for ($i = 0; $i < $showReviews; $i++) {
      echo '<p>';
      // reformat datum en tijd in Nederlandse notatie, dus d/m/Y H:i:s
      $dt = substr(str_replace('T',' ',$randomReviews[$i]->Datum), 0, 19);
      echo DateTime::createFromFormat("Y-m-d H:i:s", $dt)->format("d/m/Y H:i:s") . '<br>';
      echo $randomReviews[$i]->Naam . '<br>';
      echo $randomReviews[$i]->Waardering . ' sterren<br>';
      echo $randomReviews[$i]->Toelichting;
      echo '</p>';
    }
  } else echo 'Decode json mislukt.';
} else echo 'Get content mislukt.';

Suc6. Have fun.
 
Laatst bewerkt:
Dank je wel voor je uitgebreide reactie @bron :thumb:
En fijn dat er bij je code commentaar staat, daar kan ik wat mee.

Ik ga het doornemen en uitproberen, ik kom erop terug.
 
Dank je wel voor je uitgebreide reactie
Dit vond ik echt een leuke vraag om uit te zoeken.

De twee "else"jes helemaal onderaan mag je in live weglaten, die zijn alleen voor de test.
Code:
    }
  } else echo 'Decode json mislukt.';
} else echo 'Get content mislukt.';

wordt in live
Code:
    }
  }
}
 
Laatst bewerkt:
Nou bron het werkt als een speer :) En fijn dat het voor jou ook een leuke vraag was om uit te zoeken, voel ik me ook wat minder bezwaard ;-)

Ik zie dus dat ik met mijn regeltje code er bijna was om 1 review te tonen

mijn regeltje code is fout:
PHP:
echo $Kantoor->Reviews->$Review[2]->Toelichting;

jouw code is goed:
PHP:
echo  $Kantoor->Reviews[2]->Toelichting;
 
Suc6 met de website :thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan