programação,

Criando feeds RSS com PHP

Diogo Matheus Diogo Matheus Seguir 16/03/2011 · 4 minutos de leitura
Criando feeds RSS com PHP
Compartilhar

Nesse texto irei compartilhar uma maneira simples de criar feeds RSS com PHP através da classe SimpleXMLElement, o resultado será um exercício prático que irá simular uma conexão com banco de dados usando um array com dados pré-definidos.

O que são feeds?

Feed, do verbo em inglês Alimentar, é um formato de dados usado para comunicação de conteúdos atualizados frequentemente, como sites de notícias ou blogs. Distribuidores de informação, blogueiros ou canais de notícias disponibilizam um feed ao qual usuários podem se inscrever, no formato de um link.

O que é RSS?

RSS é um subconjunto de “dialetos” XML que servem para agregar conteúdo ou “Web syndication”, podendo ser acessado mediante programas ou sites agregadores. [Wikipédia]

Para que são utilizados?

Os feeds são utilizados para manter os usuários de um determinado site informado sobre novos conteúdos, como últimas notícias ou postagens em um blog, uma ótima maneira de fidelizar o usuário, sem exigir que este acesse o site para verificar se existe conteúdo novo.

Criando um feed RSS com PHP

Para criar nosso feed, iremos usar os seguintes dados.

<?php
$data = array(
  array(
    'titulo' => 'Página Pessoal',
    'link' => 'http://www.diogomatheus.com.br/',
    'description' => 'Descrição da página pessoal'
  ),
  array(
    'titulo' => 'Blog',
    'link' => 'http://www.diogomatheus.com.br/blog/',
    'description' => 'Descrição do blog'
  )
);
?>

Segue o script responsável pela criação do feed RSS.

<?php
$feed = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><rss></rss>');
$feed->addAttribute('version', '2.0');
 
// Criar elemento channel
$channel = $feed->addChild('channel');
$channel->addChild('title', 'Criando Feeds RSS com PHP');
$channel->addChild('link', 'http://www.diogomatheus.com.br');
$channel->addChild('description', 'Feed RSS usando SimpleXMLElement');

foreach ($data as $item) {
  // Criar elemento para cada item
  $item_channel = $channel->addChild('item');
  $item_channel->addChild('title', $item['titulo']);
  $item_channel->addChild('link', $item['link']);
  $item_channel->addChild('description', $item['description']);
  $item_channel->addChild('pubDate', date('r'));
}
 
// Definir tipo de conteúdo da resposta e charset
header("content-type: application/rss+xml; charset=utf-8");

// Escrever resultado como XML
echo $feed->asXML();
?>

Segue os passos executados no script:

  • Instanciar classe SimpleXMLElement
  • Informar versão do RSS
  • Criar elemento channel e adicionar suas informações
  • Percorrer array de resultados pré-definidos
  • Criar um elemento para cada item do array, adicionando suas informações
  • Definir tipo do conteúdo e charset
  • Imprimir conteúdo XML gerado
Resultado RSS feed
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Criando Feeds RSS com PHP</title>
    <link>http://www.diogomatheus.com.br</link>
    <description>Feed RSS usando SimpleXMLElement</description>
    <item>
      <title>Página Pessoal</title>
      <link>http://www.diogomatheus.com.br/</link>
      <description>Descrição da página pessoal</description>
      <pubDate>Wed, 16 Mar 2011 12:40:27 -0300</pubDate>
    </item>
    <item>
      <title>Blog</title>
      <link>http://www.diogomatheus.com.br/blog/</link>
      <description>Descrição do blog</description>
      <pubDate>Wed, 16 Mar 2011 12:40:27 -0300</pubDate>
    </item>
  </channel>
</rss>
<?php
$data = array(
  array(
    'titulo' => 'Página Pessoal',
    'link' => 'http://www.diogomatheus.com.br/',
    'description' => 'Descrição da página pessoal'
  ),
  array(
    'titulo' => 'Blog',
    'link' => 'http://www.diogomatheus.com.br/blog/',
    'description' => 'Descrição do blog'
  )
);

$feed = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><rss></rss>');
$feed->addAttribute('version', '2.0');

$channel = $feed->addChild('channel');
$channel->addChild('title', 'Criando Feeds RSS com PHP');
$channel->addChild('link', 'http://www.diogomatheus.com.br');
$channel->addChild('description', 'Feed RSS usando SimpleXMLElement');

foreach ($data as $item) {
  // Criar elemento para cada item
  $item_channel = $channel->addChild('item');
  $item_channel->addChild('title', $item['titulo']);
  $item_channel->addChild('link', $item['link']);
  $item_channel->addChild('description', $item['description']);
  $item_channel->addChild('pubDate', date('r'));
}

header("content-type: application/rss+xml; charset=utf-8");
echo $feed->asXML();
?>

Lembrando que o código desenvolvimento nesse texto foi criado para demonstrar o uso da classe SimpleXMLElement, para um cenário real será necessário substituir o array com valores pré-definidos.