Отображение изображения из URL, возвращенного API - PullRequest
0 голосов
/ 10 июля 2009

Я делаю вызов API, который должен вернуть что-то вроде следующего,

<?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>

И мне нужно отобразить изображение диаграммы, которое находится по возвращенному URL, но как мне это сделать?!?
Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 июля 2009

Вы можете использовать simple_xml :

$x = simplxml_load_string($xml);
echo '<img src="' . htmlspecialchars($x->response->url) . '">';
0 голосов
/ 10 июля 2009

Спасибо вам, ребята, за то, что вы меня правильно выбрали. Я не уверен, почему я не смог заставить его работать с функцией load_string ..?

Это то, что я использовал, и это сработало, знаете почему?

<?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 . '">';
?>
0 голосов
/ 10 июля 2009

Учитывая данные XML в переменной $ xml, вы можете проанализировать их и вывести тег <img>, используя XMLDOM функции:

$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\">";
}

Вы также можете использовать 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\">";
}

Существует также simplexml тоже

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

Обратите внимание, что отправленный вами XML является недопустимым - символы & в URL должны быть &amp;, чтобы любой из этих методов XMLDOM работал правильно. Но это как минимум иллюстрирует, как правильно работать с XML

Итак, более простой подход состоит в том, чтобы просто вырвать URL с помощью регулярного выражения

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