Como fazer um feed RSS dinâmico em PHP

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.

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.xml" />

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

Nuno Freitas
Publicado por Nuno Freitas em 24 março, 2008

Artigos relacionados