1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ler conteudo ficheiro XML/RSS usando PHP

Discussão em 'Web Development' iniciada por sEnte!, 2 de Dezembro de 2012. (Respostas: 14; Visualizações: 1424)

  1. sEnte!

    sEnte! Power Member

    Preciso de ajuda para extrair uma parte de um ficheiro XML/RSS através de um ficheiro PHP

    Será que alguém pode ajudar?
     
  2. barricas

    barricas Power Member

    $ficheiro = simplexml_load_file('url-para-xml-ou-rss');

    Imaginando que fosse assim (hmmm não conservou espaços!!):
    <artigos>
    <artigo>
    <numero>1</numero>
    <stats>
    <clicks>123</clicks>
    </stats>
    </artigo>
    </artigos>

    Acedes assim: $var2 = $ficheiro->numero ou $var3= $ficheiro->stats->clicks;

    Não sei se para 1 também é preciso um foreach (exemplo com vários é foreach($ficheiro->artigo as $artigos))

    A root tag (artigos) não é preciso ser acedida usando ->, porque é a própria variável a que dás o simplexml_load_file
     
  3. sEnte!

    sEnte! Power Member

  4. barricas

    barricas Power Member

    Isto aparece tudo na mesma variável ou estás a juntar: "2012-11-22 11:54PHP 5.4.9 and PHP 5.3.19 released!" ?
     
  5. sEnte!

    sEnte! Power Member

    Aparece tudo junto.
    Aqui fica o meu código
    Código:
    <?php
    function php_net_feed($limit)
    {
            $output   = array();
            $feed_url = 'http://php.net/feed.atom';
            $feed    = simplexml_load_file($feed_url);
            $x              = 1;
            foreach ($feed->entry as $item) {
                    if ($x <= $limit) {
                            $title  = $item->title;
                            $url      = $item->id;
                            $pub      = $item->updated;
                            $temp    = str_replace(array(
                                    "<content>",
                                    "</content>"
                            ), " ", $item->content->asXML());
                            $output[] = array(
                                    'title' => $title,
                                    'url' => $url,
                                    'updated' => $pub,
                                    'content' => $temp
                            );
                    }
                    $x++;
            }
            return $output;
    }
    $feed = php_net_feed(5);
    ?>
       <ul>
            <?php
    foreach ($feed as $item) {
            echo '<li><a href="', $item["url"], '">', $item["title"], '</a></li>';
            echo date("Y-m-d H:i", strtotime($item['updated']));
            foreach ($item as $item["content"]) {
                    echo $item["content"];
            }
    }
    ?>
    </ul>
    e o link para veres como está
    http://exp.net84.net/twitter/index2.php
     
  6. barricas

    barricas Power Member

    Código:
    foreach ($item as $item["content"]) {                
      echo $item["content"];         
    }
    
    por

    Código:
    echo $item['content'];
    
    dentro das tags <content></content> está conteúdo em html (<p></p>, etc) por isso basta fazer echo.

    Mas compreendi o que querias fazer :D
     
  7. sEnte!

    sEnte! Power Member

    Nada feito. Isso já eu tinha experimentado :S
     
  8. barricas

    barricas Power Member

    Código:
    $feed = php_net_feed(5);
    ?>
       <ul>
            <?php
    foreach ($feed as $item) {
            echo '<li><a href="', $item["url"], '">', $item["title"], '</a></li>';
            echo '<br &>';
            echo date("Y-m-d H:i", strtotime($item['updated']));
            echo $item['content'];
    }
    ?>
    </ul>
    
    Tenho assim aqui no meu PC e dá como queres.
     
  9. sEnte!

    sEnte! Power Member

    Então mas espera lá agora fiquei um bocado perdido...

    echo '<br &>';
    ????

    Realmente já tinhas dado a solução, eu é que devo ter feito alguma coisa de mal.
     
    Última edição: 6 de Dezembro de 2012
  10. barricas

    barricas Power Member

    Engano meu, é <br />

    Mesmo assim o <br /> não é preciso(e fica melhor), deixei lá quando andava a testar
     
    Última edição: 6 de Dezembro de 2012
  11. sEnte!

    sEnte! Power Member

    No entanto fiquei algo confuso sobre o meu último foreach() porque é que tirando funcionou perfeitamente e com ele dava barraca?
     
  12. barricas

    barricas Power Member

    Para que o foreach estivesse correto deveria ser de:
    Código:
    foreach ($item as $item["content"]) {                 
    echo $item["content"];         
    }
    
    para :

    Código:
    foreach ($item["content"] as $content) {                 
    echo $content;         
    }
    
    Mas como vi que o content do feed to php tem assim <content type="xhtml"> por isso penso que o xml reader do php não leia as tags dentro disto.

    (Também só soube à pouco)
     
  13. sEnte!

    sEnte! Power Member

    o teu foreach é inválido lol
    Warning: Invalid argument supplied for foreach() in /home/a3876128/public_html/twitter/index50.php on line 35

    Código:
    $feed = php_net_feed(5);
    ?>
    <ul>
            <?php
            foreach ($feed as $item) {
            echo '<li><a href="', $item["url"], '">', $item["title"], '</a></li>';
            echo date('l jS \of F Y h:i:s', strtotime($item['updated']));
           foreach ($item["content"] as $content) {                 
                  echo $content;         
           }
    }
    ?>
    http://exp.net84.net/twitter/index50.php
     
    Última edição: 6 de Dezembro de 2012
  14. barricas

    barricas Power Member

    "Mas como vi que o content do feed to php tem assim <content type="xhtml"> por isso penso que o xml reader do php não leia as tags dentro disto."

    Como não pode ler as tags dentro do content, vai ser inválido. O foreach que indiquei era para corrigir o teu (porque estava mal de qualquer maneira) mas depois indiquei em baixo que não lê as tags lá dentro.
     
  15. sEnte!

    sEnte! Power Member

    Sim isso é verdade.

    De qualquer maneira já tenho o assunto resolvido.

    Obrigado
     

Partilhar esta Página