View image from another site

0

Good afternoon !, Personal I am using a php code to display news of a website, I happen to try to also display the image that it has, however, I can not, the title and date of posting I am able to display normal, however , I can not do this

<?php
// Mostrar Data na Tela.
$titulo = array();
$data = array();
$link = array();
$quantos = 0;
$exibir = 1;
$limite_title = 100;

foreach(simplexml_load_file("http://cidades.gov.br/ultimas-noticias?format=feed&type=rss")->channel->item as $item)
{
$imagem[] = $item->src;
$titulo[] = utf8_decode(substr($item->title, 0, $limite_title)."...");
$link[] = $item->link;
$data[] = utf8_decode($item->pubDate);
$quantos++;
}

for($i = $quantos-($exibir+1); $i < $quantos-1; $i++)
{
if($titulo[$i]!="")
{
echo
'
<li>
<figure><img src="'.$imagem[$i].'"></figure>
<a href="'.$link[$i].'" target="_blank" title="Leia mais clicando aqui!">'.utf8_encode($titulo[$i]).'
<small style="font-size:11px;color:#999;"><br/></a>'.str_replace(" ", " as ", date('d/m/Y H:m:s', strtotime($data[$i]))).'</small>
</li>
';
}
}
?>

What did I do wrong?

    
asked by anonymous 11.04.2017 / 22:46

1 answer

2

The problem is that the feed is using HTML next to <![CDATA[...]]> :

<description><![CDATA[<div><img style="margin-left: 5px; border-radius: 5px; float: right;" title="Foto: Rafael Luz/ MCidades" src="http://cidades.gov.br/images/galeria_em_artigos/amupe_interna.jpeg"alt="amupe interna" />O ministro das Cidades...</div>]]></description>

CDATA is not considered "part of the XML", or rather it is as a text only and will not be processed unless you request it, the way to do it would be to parse the content of description also, like this:

<?php
// Mostrar Data na Tela.
$titulo = array();
$data = array();
$link = array();
$quantos = 0;
$exibir = 1;
$limite_title = 100;

$items = simplexml_load_file("http://cidades.gov.br/ultimas-noticias?format=feed&type=rss")->channel->item;

$doc = new DOMDocument;

foreach($items as $item) {
    $titulo[] = utf8_decode(substr($item->title, 0, $limite_title)."...");
    $link[] = $item->link;
    $data[] = utf8_decode($item->pubDate);
    $quantos++;

    //Converte o objeto para string
    $desc = (string) $item->description;

    //Faz o parse da string html para DOMElement
    if ($doc->loadHTML($desc)) {

        //Pega todas tags img
        $imgs = $doc->getElementsByTagName('img');

        //Verifica se existe ao menos uma imagem
        if ($imgs->length) {

            //Salva a imagem no array
            $imagem[] = $imgs->item(0)->getAttribute('src');

            //para o loop atual evitando que chegue até o "$imagem[] = null;"
            continue;
        }
    }

    //Se não houver description ou img então envia o valor como null
    $imagem[] = null;
}

//E no teu for pode fazer assim:

for ($i = $quantos-($exibir+1); $i < $quantos-1; $i++) {
    if($titulo[$i]!="") {
       echo '<li>';

       //Se a imagem existir a exibe, caso contrário não
       if ($imagem[$i] !== null) {
           echo '<figure><img src="'.$imagem[$i].'"></figure>';
       }

        echo '<a href="'.$link[$i].'" target="_blank" title="Leia mais clicando aqui!">'.utf8_encode($titulo[$i]).'
        <small style="font-size:11px;color:#999;"><br/></a>'.str_replace(" ", " as ", date('d/m/Y H:m:s', strtotime($data[$i]))).'</small>
        </li>
        ';
    }
}
    
12.04.2017 / 00:30