Faça login ou registe-se
Novidades: torne-se nosso parceiro. Pode agora também submeter os seus artigos!

Como fazer um feed RSS dinâmico em PHP

HTML, PHP

por nunof, 19:05 24-03-2008 (actualizado em 21:45 17-12-2008)

Introduzimos o formato RSS e mostramos como construir um feed RSS dinâmico em PHP.

O que é um feed RSS?

Na página da Wikipedia sobre RSS podemos ler:

RSS (Really Simple Syndication) é uma família de formatos de feeds web usados para publicar conteúdo actualizado regularmente incluindo, mas não limitado a, entradas de blogs, notícias e podcasts.

É então um formato de ficheiro para publicar conteúdos. É útil porque as pessoas podem facilmente subscrever a esses feeds e receber conteúdo actualizado da sua preferência, quando e como querem, de várias fontes e de forma organizada. Como exemplo de um feed RSS podem ver o feed deste site: feed RSS do Broculos.net.

O software usado para ler feeds RSS é chamado de leitor RSS e pode correr no browser ou no desktop. XML é usado para especificar o formato RSS.

Um link para um feed RSS é normalmente acompanhado com um ícone RSS. Falaremos disto mais à frente.

Exemplo de um ficheiro RSS

O formato RSS é bastante simples. Neste tutorial vamos usar a versão 2.0 da especificação RSS. Vamos apenas usar algumas das suas etiquetas. Devem ver a especificação para saber se precisam ou querem utilizar mais.

Um feed RSS é composto por um canal e por uma colecção de itens. Tomem conhecimento de que existe um número máximo de itens que podem ter num feed RSS. Por exemplo, na versão 0.91 da especificação RSS, o número máximo de itens é 15. Os leitores podem impor os seus próprios limites.

Aqui fica um exemplo simples de um feed RSS.

<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
    <channel>
        <title>Example RSS feed</title>
        <description>Example of a RSS feed, part of a programming tutorial on making a feed in PHP.</description>
        <link>http://www.broculos.net</link>
        <copyright>Copyright (C) 2008 Broculos.net</copyright>
        <item>
            <title>Example 1</title>
            <description>This is the description of the first example.</description>
            <link>http://www.example.com/example1.html</link>
            <pubDate>Mon, 29 Dec 2008 22:10:00 -0600</pubDate>
        </item>
        <item>
            <title>Example 2</title>
            <description>This is the description of the second example.</description>
            <link>http://www.example.com/example2.html</link>
            <pubDate>Thu, 03 Jan 2008 14:27:15 -0600</pubDate>
        </item>
    </channel>
</rss>

Como criar um feed RSS dinâmico em PHP

Como podem ver no exemplo, é um formato bastante simples. No entanto, vocês não vão querer fazer um novo ficheiro RSS manualmente sempre que algo muda no vosso site.

Temos, portanto, 2 opções: fazer um script para produzir o ficheiro RSS ou fazer um script que é o ficheiro RSS. Prefiro a última hipótese, porque é mais simples e a primeira solução requer que chamemos o script sempre que quisermos actualizar o feed RSS.

Vamos então fazer o nosso feed RSS sempre actualizado. Só precisamos de produzir as etiquetas apropriadas com o conteúdo. Como isto é apenas uma demonstração, os dados encontram-se definidos no próprio ficheiro. Numa situação realística o conteúdo seria carregado de uma base de dados.

<?php
 
    /**
* For demonstration purposes, the data is defined here.
* In a real scenario it should be loaded from a database.
*/
$channel = array("title" => "Example RSS feed", "description" => "Example of a RSS feed, part of a programming tutorial on making a feed in PHP.", "link" => "http://www.broculos.net", "copyright" => "Copyright (C) 2008 Broculos.net");   $items = array( array("title" => "Example 1", "description" => "This is the description of the first example.", "link" => "http://www.example.com/example1.html", "pubDate" => date("D, d M Y H:i:s O", mktime(22, 10, 0, 12, 29, 2008))) , array("title" => "Example 2", "description" => "This is the description of the second example.", "link" => "http://www.example.com/example2.html", "pubDate" => date("D, d M Y H:i:s O", mktime(14, 27, 15, 1, 3, 2008))) );   $output = '<?xml version="1.0" encoding="ISO-8859-1"?>'; $output .= '<rss version="2.0">'; $output .= "<channel>"; $output .= "<title>" . $channel["title"] . "</title>"; $output .= "<description>" . $channel["description"] . "</description>"; $output .= "<link>" . $channel["link"] . "</link>"; $output .= "<copyright>" . $channel["copyright"] . "</copyright>";   foreach ($items as $item) { $output .= "<item>"; $output .= "<title>" . $item["title"] . "</title>"; $output .= "<description>" . $item["description"] . "</description>"; $output .= "<link>" . $item["link"] . "</link>"; $output .= "<pubDate>" . $item["pubDate"] . "</pubDate>"; $output .= "</item>"; } $output .= "</channel>"; $output .= "</rss>";   header("Content-Type: application/rss+xml; charset=ISO-8859-1"); echo $output;   ?>

A segunda parte do script constitui a construção do feed RSS. Requer que estejam definidas a variáveis $channel e $items com os valores respectivos a corresponder às chaves necessárias.

Depois de construirmos o XML e guardá-lo na variável $outputprecisamos de o mostrar. Antes de o fazermos enviamos um cabeçalho indicando o tipo de conteúdo do ficheiro. Neste caso dizemos que é um ficheiro XML RSS. Finalmente, mostramos o resultado final. Podem ver este exemplo de feed RSS.

Como fazer com que os browsers reconhecam o feed RSS

Agora devem preocurpar-se em tornar o feed RSS disponível para toda a gente que está interessada em subscrever-se a ele. Além de colocarem uma ligação no vosso site para o feed RSS, também devem fazer mais um passo adicional.

Existe uma etiqueta HTML que serve para indicar que a página tem um feed RSS. Devem colocá-la entre a etiqueta head.

<link rel="alternate" type="application/rss+xml" title="Title of the feed (RSS 2.0)" href="rss.php" />

Devem especificar o título do vosso feed RSS assim como a sua localização.

Para browsers que reconheçam RSS, isto garante uma forma simples de fazer com que o feed RSS seja detectado. Os browsers normalmente indicam que um feed RSS foi detectado ao mostrarem um ícone RSS na barra de localização.

Conclusão

Não se esqueçam - apenas falamos das etiquetas mais básicas. Devem ver a especificação completa para melhor perceberem o que devem incluir e o que devem deixar de fora.

O código que produzimos não é muito reutilizável. Podem optar por construir um escritor de RSS com algumas classes ou então definir uma função.

O que é que há mais ainda a fazer? Devem usar o ícone standard RSS, certificarem-se que o vosso RSS é válido através da validação do vosso feed RSS e para funcionalidades mais avançadas para o vosso feed RSS, como estatísticas de visitantes, podem usar o FeedBurner.

Recursos

 

Comentários

19:27 09-04-2008sfradette

Dont forget to escape guillemets on the line 23 and 24 otherwise it wont work

10:06 11-04-2008nunof

Thanks for the heads up. It was actually a problem in copy-pasting the code.

I changed the outer quotes to single quotes.

17:28 23-04-2008josemota

Nice tutorial indeed. I just want to emphasize the big point of the tutorial: you are actually generating XML the same way you generate HTML. You can also set the URL to a php file instead of a regular XML as long as you say the MIME type is application/rss+xml. Dynamic generated content at its maximum power!

23:21 08-05-2008Fabio

animaisos.org/rss

23:23 08-05-2008Fabio

Nao estou conseguindo fazer funcionar no animaisos.org/rss. O codigo esta correto mas nao aparece nada de rss. Aguardo resposta. obrigado

00:13 09-05-2008Fabio

Consegui, obrigado!

09:55 09-05-2008nunof

Fico contente que tenhas conseguido!

06:27 21-09-2008Keith

Very nice article, Appreciate it! Thumps up for you

Adicionar comentário

RSS article feed RSS feed de artigos

© 2007-2009 Coconuts. Contacte-nos.