0 votes

Affichage d'une image à partir d'une URL renvoyée par une API

Je fais un appel à l'API qui doit retourner quelque chose comme ce qui suit,

<?xml version="1.0" encoding="utf-8" ?> 
<Chart:chart xmlns:Chart="http://www.zillow.com/vstatic/3/static/xsd/Chart.xsd">
    <request>
        <zpid>48749425</zpid> 
        <unit-type>percent</unit-type> 
        <width>300</width> 
        <height>150</height> 
    </request>
    <message>
        <text>Request successfully processed</text> 
        <code>0</code> 
    </message>
    <response>
        <url>http://www.zillow.com/app?chartDuration=1year&chartType=partner&height=150&      page=webservice%2FGetChart&service=chart&showPercent=true&width=300&zpid=48749425</url> 
    </response>
</Chart:chart>

Et ce dont j'ai besoin, c'est d'afficher l'image du graphique qui se trouve à l'URL renvoyée, mais comment faire ? !?
Merci !

2voto

Greg Points 132247

Vous pourriez utiliser simple_xml :

$x = simplxml_load_string($xml);
echo '<img src="' . htmlspecialchars($x->response->url) . '">';

0voto

Paul Dixon Points 122033

Si les données XML sont placées dans une variable $xml, vous pouvez les analyser et produire un message de type <img> en utilisant XMLDOM fonctions :

$doc = new DOMDocument();
$doc->loadXML($xml);

$nodes = $doc->getElementsByTagName("url");
if ($nodes->length>0)
{
    $node=$nodes->item(0);
    $url=htmlentities($node->nodeValue);

    echo "<img src=\"$url\">";
}

Vous pouvez également utiliser XPath

$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXPath($doc);

$nodes = $xpath->evaluate('Chart/response/url');
if ($nodes->length>0)
{
    $node=$nodes->item(0);
    $url=htmlentities($node->nodeValue);

    echo "<img src=\"$url\">";
}

Il existe également simplexml trop

$doc = simplexml_load_string($xml);
$url = htmlentities($doc->response->url);
echo "<img src=\"$url\">";

Notez que le XML que vous avez posté est invalide - le & Les caractères de l'URL doivent être &amp; pour que l'une de ces méthodes XMLDOM fonctionne correctement. Mais ceci illustre au moins comment travailler avec XML "correctement".

Donc, une approche plus simple serait d'extraire l'url avec une regex.

if (preg_match('{<url>(.*?)</url>}', $xml, $matches))
{
     $url=htmlentities($matches[1]);
     echo "<img src=\"$url\">";
}

0voto

thatryan Points 448

Merci les gars de m'avoir fait prendre le bon chemin. Je ne sais pas pourquoi je n'ai pas réussi à le faire fonctionner avec la fonction load_string ?

C'est ce que j'ai utilisé et ça a marché, tu sais pourquoi ?

<?php
$xml = 'http://www.zillow.com/webservice/GetChart.htm?zws-id=******&unit-type=percent&
zpid='.$title->zpid.'&width=300&height=150';
$chart = simplexml_load_file($xml);
echo '<img src="' .$x->chart->url . '">';
?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X