Um estudo em RSS - Parte 1: XML DOM
RSS, hoje me perguntaram “o que é isso?” Eu sei o que é, porém na hora me faltaram palavras para explicar, especialmente palavras que um não-programador consiga absorver de forma a compreender o conceito e seus melhores usos. Portanto com essa série de posts, não sei quantos nem se vou escrever na ordem, mas garanto que vou tentar cobrir tudo.
De acodo com o wikipedia: RSS - é um sub dialeto de XML que serve para agregar conteúdo.
E ai? você pergunta, ou WTF! alguns exclamam… Vamos por partes.
Dialeto de XML apenas significa que ele utiliza a estrutura de um arquivo XML, conhecido como uma “lingua” global, ou um formato de troca de mensagens padrão, muito utilizado.
Ok, isso não lhe interessa nem um pouco? Então você não é desenvolvedor, vou explicar para que serve, já se você for desenvolvedor, continue lendo depois para conhecer um pouco mais de como iniciar a vida do RSS.
O RSS é a língua falada pelos “feeds”, que são como resumos de um site (RSS - Rich Site Summary), ele lhe envia dados resumidos (titulo, descrição e link) de conteúdos de um site. Por exemplo, no ComuniWEB , site de notícias regionais de Brasília/DF onde trabalho, o feed RSS me fornece com as chamadas das últimas notícias publicadas no site, desta forma eu consigo com meu “leitor de RSS” visualizar as ultimas chamadas, e caso alguma me chame atenção clicko nela e sou levado a matéria na integra no ComuniWEB.
Veja um exemplo disso na lateral deste site, aqui do lado direito onde diz “ComuniWeb - Últimas”. Esta seção do meu blog lê o feed RSS e lista as últimas 5 notícias dele.
Agora você compreende um pouco mais do que é um RSS Feed, vá brincar um pouco, ache um leitor de RSS, como o Google Reader , e teste alguns feeds, você também pode adicionar eles à suas paginas pessoais, como o MyYahoo.
Então, você é desenvolvedor, tem um blog, um site de noticias, ou algo que você tem conteúdo que deseja compartilhar? Quer saber como fazer isso? Eu mostro o caminho. No post de hoje vou abordar o básico do básico, como criar um arquivo XML a partir de dados no PHP. No próximo post explicarei a estrutura de um arquivo RSS e depois como ler um arquivo direto no PHP.
Primeiro Passo: Compatibilidade XML no PHP
O PHP possui algumas soluções para ler ou escrever XML, desde escrever tudo na mão até objeto sólido chamado DOM. Minha recomendação é o DOM, pois é estável e tem uma estrutura muito lógica e simples, uma vez que você a entende.
Vamos criar um XML com a seguinte estrutura:
< ?xml version="1.0" encoding="utf-8"?> Doença já matou 33 pessoas no Maranhão index.php?idpaginas=20&idmaterias=162696
Primeiro temos que criar um novo documento XML pelo DOM.
$xmlDoc = new DOMDocument('1.0', 'utf-8'); $xmlDoc->formatOutput = true;
Agora a variável $xmlDoc agora contêm um objeto DOM (Document Object Model) e este foi instruido a formatar a sua saída de forma “arrumadinha” pelo método “formatOutput”. Em seguinda vamos adicionar o elementos raís, neste caso chamado de “noticias”, observe:
$noticias = $xmlDoc->createElement('noticias'); $noticias = $xmlDoc->appendChild($noticias);
Na primeira linha criamos a partir do documento principal ($xmlDoc) um elemento chamado notícias, sem conteúdo. Em seguida na segunda linha mostramos ao documento principal, onde adicionar este elemento, e atualizamos a variavel $noticias com o objeto já inserido em seu local.
Agora precisamos criar um elemento “item” que possui um atributo “id”, observe:
$item = $xmlDoc->createElement('item'); $item->setAttribute('id','162696'); $item = $noticias->appendChild($item);
Mais uma vez criamos o elemento, neste caso “item”, sempre a partir do documento raíz. Em seguida “setamos” um atributo, dando e ele um nome e um valor, de acordo com o exemplo acima. Na linha seguinte ligamos o “filho” ao pai, porém note que desta vez nao utilizamos o documento principal, e sim o objeto $noticias, ou seja, o elemento $item será adicionado abaixo (dentro, hierarquia) do elemento $noticias já cadastrado.
Agora devemos adicionar os itens Title e Link a este elemento $item para finalizar nosso processo de adição, porém aqui teremos uma leve mudança:
$title = $xmlDoc->createElement('title',utf8\_encode('Doença já matou 33 pessoas no Maranhão')); $title = $item->appendChild($title);
$link = $xmlDoc->createElement('link',htmlentities('index.php?idpaginas=20&idmaterias=162696')); $link = $item->appendChild($link);
Observe o uso normal da criação e elementos e a ligação destes dois ao objeto $item, formando a hierarquia do exemplo. Porém no momento que adicionamos os valores devemos ter dois cuidados: 1 - Converter caracteres “latinos” - como çãá - para UTF-8, pois escolhemos este charset (pode-se usar ISO-XXXX, porém muitos leitores de XML ainda se confundem), isto é feito no exemplo com a função utf8_encode(); 2 - Converter entidades HTML, no XML o caracter & significa entidade, com isso se ele aprecer perdido no texto podemos ter problemas, convertido em & amp; o XML o interpreta como deve.
Pronto, agora resta finalizar e jogar para a tela:
header("Content-type:application/xml; charset=utf-8"); echo $xmlDoc->saveXML();
Primeiro encaminhamos um header para garantir a interpretação pelo browser e depois damos um echo no resultado da função saveXML que pode ou jogar o resultado em uma string ou salvá-la em um arquivo.
Veja o script completo abaixo, ou veja ele funcionando aqui: Live demo
< ?
$xmlDoc = new DOMDocument('1.0', 'utf-8'); $xmlDoc->formatOutput = true;
$noticias = $xmlDoc->createElement('noticias'); $noticias = $xmlDoc->appendChild($noticias);
$item = $xmlDoc->createElement('item'); $item->setAttribute('id','162696'); $item = $noticias->appendChild($item);
$title = $xmlDoc->createElement('title',utf8\_encode('Doença já matou 33 pessoas no Maranhão')); $title = $item->appendChild($title);
$link = $xmlDoc->createElement('link',htmlentities('index.php?idpaginas=20&idmaterias=162696')); $link = $item->appendChild($link);
header("Content-type:application/xml; charset=utf-8"); echo $xmlDoc->saveXML();
?>
Portanto termino por aqui a primera parte desta apresentação de o que é um RSS. Espero já ter ajudado com algumas dúvidas de XML e DOM, porque sei que muitos têm. No próximo artigo eu falarei um pouco mais da especificação RSS e sua evolução do 0.91 até o 2.0 conhecida agora como Really Simple Syndication.