RSS
1.O que é o RSS?
RSS (“Rich Site Summary” ou “Really Simple Syndication”) é uma forma de organizar a informação de um Web site em documentos chamados “feeds”, de forma a notificar todos os interessados em ler e acompanhar novos conteúdos.
Jornais e revistas online, blogs e outros editores, unem-se para publicar em consórcio os conteúdoas das suas páginas web, num formato padrão organizada em “Feeds RSS”, para fácil leitura e acompanhamento por parte dos subscritores.
2.Porquê o RSS?
O RSS veio solucionar o problema de todos os utilizadores da web, mantendo-os sempre informados sobre as novidades no conteúdo dos web sites sem necessidade de estarem permanentemente a visitar as páginas para saberem o que mudou.
Por outro lado a privacidade dos utilizadores é protegida, por não haver necessidade de subscrever “newsletters” ou “mailing lists”, para se manterem informados.
O número de sites que usam RSS, cresce diariamente e praticamente todos os sites noticiosos e blogs já usam RSS.
3.O que é necessário para usar RSS?
Para ter acesso e poder utilizar os “feeds RSS” é necessário um software ou sistema chamado “Feed Reader” ou “News Aggregator”. Existem softwares deste tipo para todos os sistemas e plataformas e alguns são baseados na web.
Entre os mais populares encontramos o Amphetadesk (Windows, Linux, Mac), FeedReader (Windows), e o NewsGator (Windows – Outlook). Na web, os mais conhecidos são My Yahoo, Bloglines, e Google Reader .
Depois de escolher um “Feed Reader”, poderão ser adicionados sites com o seu conteúdo em feeds RSS. A maioria dos sites mostrará um Icon
que indica a existência de conteúdos em RSS, XML, or RDF.
4.Como funciona o RSS?
- Existem algumas páginas web, que interessa aos donos, sejam vistas noutros websites. Esse conjunto de páginas deverá ser incluído nos Feeds RSS.
- É criado um ficheiro XML que define o feed de RSS. Esse ficheiro contém o URL, título e o sumário de cada uma das páginas.
- A pessoa que pretende ler o feed, no seu computador usa um Leitor de RSS ou o browser e adiciona o feed com o comando respectivo do seu software.
- Pode ainda ser outro Website que pretende mostrar o feed. Nesse caso terá de carregar o feed a partir da fonte, e fazer a extracção das páginas para mostrar os títulos e sumários das páginas. Isso pode ser feito por exemplo por um script em PHP.
- Quando alguem visita o website do recebedor, o script faz uma chamada ao ficheiro RSS do fornecedor e mostra a lista de artigos/notícias extraidas.
- Qaundo o leitor clicar numa linha da lista de RSS o total do conteúdo do fornecedor irá ser mostrado.
5.Qual é a estrutura de um ficheiro RSS?
- É um ficheiro XML e o container global é a tag “RSS” para o formato 2.0, ou outro.
- O ficheiro contém pelo menos um canal que é o website fornecedor da informação.
- O canal fornece artigos ou dados que são páginas web do mesmo site ou de outros sites.
6.Como posso publicar notícias ou outro conteúdo num feed RSS?
Há diversas formas de gerar feeds RSS.
- Usando uma biblioteca de PHP. O script PHP irá construir o ficheiro XML com base dos títulos e descrições das páginas a partir da página principal de conteúdos.
- Usando uma ferramenta específica para retirar os dados a partir de uma webpage.
Para dar acesso ao ficheiro XML , terá de ser fornecido um link ![]()
<a type=”application/rss+xml” href=”http://www.pt-code.com/rss.xml”> feed RSS para este site</a>
Para feeds no formato “Atom” usa-se “application/atom+xml” .
7.Como sabem os browsers da existência de um fedd RSS no website?
Depois de criar o ficheiro com o feed RSS e colocá-lo no directório de raiz do website, temos de indicar aos browsers a existência dele e respectiva localização.Para activar o RSS, basta colocar a seguinte linha, no código da página, na secção <head> </head> :
<link rel="alternate" type="application/rss+xml" href="http://www.o_seu_site.xx/rss.xml" title="O seu título" >
8.Estrutura do ficheiro RSS
O fixeiro RSS, é um ficheiro XML na versão 1.0 constituído por duas tags principais:
rss. container global.
channel. O canal de distribuição. Poderá ter diversas tags descritivas e diversos items.
Exemplo:
<rss version=”2.0″>
<channel></channel>
</rss>
Para um canal(channel), existem as seguintes tags obrigatórias:
- title. O título do canal.Normalmente, o nome..
- link. URL do website que fornece o canal.
- description. Um sumário de quem é o fornecedor.
- pelo menos uma tag item para o conteúdo.
Exemplo:
<rss version=”2.0″>
<channel>
<title>PT-Code</title>
<link>http://www.pt-code.com/</link>
<description></description>
<item>
</item>
</channel>
</rss>
Para um canal(channel), existem as seguintes tags opcionais:
- language. A linguagem humana do canal.
- docs. Onde encontrar a especificação do formato do ficheiro, como por exemplo Harvard.
- webMaster. E-mail do webmaster.
- pubDate. Data de publicação.
- etc. Existem outras tags opcionas que podem ser usadas(ver especificação detalhada).
Um canal pode conter diversos items. A tag item deverá conter as seguintes tags:
- title. Título do artigo.
- link. O URL da página ou website.
- description. O sumário do artigo.
Exemplo:
<item>
<title>Notícias PT-Code</title>
<link>http://www.pt-code.com/</link>
<description>… texto descritivo… </description>
</item>
Existem ainda diversas tags opcionais que podem ser usadas no item:
- pubDate. Data de publicação
- guid. AUma chave única que identifique este item.
- category. A categoria do artigo.
- etc.
9.Construção de um feed RSS (passo-a-passo)
Pode ser usado um simples editor de texto, embora seja mais fácil, com um editor de XML.
Pode-se criar por exemplo um ficheiro de texto com o nome “rss.xml”.
A estrutura de base do ficheiro deverá ser a seguinte:
<?xml version=”1.0″ ?>
<rss version=”2.0″>
<channel></channel>
</rss>
a) Definir a fonte de informação, através da tag “channel”
O canal será sempre o mesmo para todos os feeds RSS.
Colocar as tags obrigatórias na estrutura de base:
<channel>
<title>Titulo do canal aqui</title>
<link>http://www.url_do_site.xx</link>
<description>Descrição do canal</description>
</channel>
b) Adicionar uma imagem
A imagem é sempre opcional.Desenhe uma pequena imagem (por exemplo com dimensão 80×40), num formato web (gif, jpg, png), e coloque-a no mesmo directório do ficheiro RSS.
A tag ”image” é um sub-elemento da tag “channel”.
- url é o endereço da própria imagem.
- link link é o endereço da página que vai ser mostrada ao clicar na imagem.
<channel>
<title> </title>
<link> </link>
<image>
<url>http://www.url_da_imagem.xx/imagem.gif</url>
<link>http://www.url_do_destino.xx/index.html</link>
</image>
</channel>
c) Adicionar uma notícia
Terá de ser adicionada uma webpage para mostrar a informação. Essa informação é anunciada no feed RSS com a tag ”item” , um sub-elemento da tag ”channel”.”Item” é obrigatório:
- title: o título da notícia.
- link: oURL da página.
- description: um sumário da notícia com cerca de 200 caracteres.
<item>
<title>Notícia do dia</title>
<link>http://www.url_da_noticia.xx/ndd.html</link>
<description>…aqui coloca-se um breve sumário da notícia …</description>
</item>
Podem depois ser adicionados mais “Items” ao canal.
d) Terminar
- Colocar o ficheiro “rss.xml”. no site junto com as outras páginas
- Validar o ficheiro, usando um Validadaor de Feeds RSS.
- Disponibilizar o feed colocando um link
nos locais pretendidos <a href=”http://www.pt-code.com/rss.xml”> <img src=”rss.gif”> </a>
e) Actualizar o feed
Para actualizar o feed com novas notícias, basta adicionar mais “Items” ao ficheiro com a estrutura descrita.
f)Exemplo completo
<?xml version=”1.0″ ?>
<rss version=”2.0″><channel>
<title>Titulo do canal aqui</title>
<link>http://www.url_do_site.xx</link>
<description>Descrição do canal</description><image>
<url>http://www.url_da_imagem.xx/imagem.gif</url>
<link>http://www.url_do_destino.xx/index.html</link>
</image><item>
<title>Notícia1 do dia</title>
<link>http://www.url1_da_noticia.xx/ndd.html</link>
<description>…aqui coloca-se um breve sumário da notícia 1…</description>
</item><item>
<title>Notícia2 do dia</title>
<link>http://www.url2_da_noticia.xx/ndd.html</link>
<description>…aqui coloca-se um breve sumário da notícia 2 …</description>
</item>
</channel></rss>
10.Construção de um Leitor de feeds RSS (em PHP)
(Para compreender na totalidade a seguinte parte deste Tutorial, é necessário que o leitor tenha os conhecimentos básicos de programação e funcionamento de PHP)
Agora que já é conhecida a estrutura de um documento RSS, vamos brevemente explicar como construir um “parser” em PHP, para ler e mostrar o conteúdo.
Variáveis Globais
A primeira função que vamos analisar precisam de algumas variáveis globais acessíveis em todo o “scope”.
$_item = array();
$_depth = array();
$_tags = array("dummy");
/* "dummy" previne subtracções desnecessárias nos indices $_depth */
Função initArray()
Esta função inicializa o arry $_item assegurando que todas as chaves são configuradas e que todas apontam para “strings” vazias.
Esta função será chamada, cada vez que é encontrada uma tag de abertura dos tipos image, item, ou channel.Será também usada após ser fechada cada uma dessas tags e em todas as atribuições na rotina de “parsing”.
Function initArray()
{
global $_item;
$_item = array ("TITLE"=>"", "LINK"=>"","DESCRIPTION"=>"", "URL"=>"");
}
Função startElement()
Para trabalhar com XML em PHP , é necessário especificar uma função a ser chamada cada vez que é encontrada uma tag de abertura. Esta função serve para isso mesmo.
Conforme se pode verificar examinando a função, se uma tag de abertura de item, channel, ou image é encontrada, é chamada a função initArray. Então quer seja ou não encontrada uma dessas tags de abertura , o array $_depth é incrementado e o nome da tag de abertura é puchado para o array $_tags.
function startElement($parser, $name, $attrs)
{
global $_depth, $_tags, $_item;
if (($name==”ITEM”) || ($name==”CHANNEL”)|| ($name==”IMAGE”)) {
initArray();
}
$_depth[$parser]++;
array_push($_tags, $name);
}
Função endElement()
Da mesma forma que temos que chamar uma função para as tags de abertura, temos também de chamar uma sempre que é encontrada uma tag de fecho. A função endElement manipula aquilo que é mostrado no estado actual do “parsing”. À medida que as tags de fecho vão sendo encontradas, esta função mostra a informação correspondente a essa tag. Promeiro é mostrado o elemento de topo no arry $_tags, e depois são decrementados os elementos do array $_depth. Como já foi dito, é também chamada a função initArray após ser mostrada a informação.
function endElement($parser, $name)
{
global $_depth, $_tags, $_item;
array_pop($_tags);
$_depth[$parser]–;
switch ($name) {
case “ITEM”:
echo “<p><a href={$_item['LINK']}>” .”{$_item['TITLE']}</a></p>\n”;
initArray();
break;
case “IMAGE”:
echo “<a href={$_item['LINK']}>” .”<DEFANGED_IMG src={$_item['URL']} ” .”alt={$_item['TITLE']}; border=0></a>\n<br />\n”;
initArray();
break;
case “CHANNEL”:
echo “<h3>{$_item['TITLE']}</h3>\n”;
initArray();
break;
}
}
Função parseData()
$_item . Sempre que aparecem dados que necessitam “parsing”, esta função é invocada. Os dados relevantes, são constituidos por tada a informação não pertencente à tag elementar.$_item .function parseData($parser, $text)
{
global $_depth, $_tags, $_item;
$crap = preg_replace (“/\s/”, “”, $text);
/* os dados são apenas um espaço em branco? Se sim, então ignorar */
if ($crap) {
$text = preg_replace (“/^\s+/”, “”, $text);
/* remover os espaços em branco iniciais */
if ($_item[$_tags[$_depth[$parser]]]) {
$_item[$_tags[$_depth[$parser]]] .= $text;
} else {$_item[$_tags[$_depth[$parser]]] = $text;
}
}
}
Função parseRDF()
Esta função é um “Gestor de chamadas” para todas as outras. Ao usar esta função não teremos de ter qualquer preocupação em chamar qualquer uma das outras.
initArray. As funçãos de manipolação de abertura e fecho de tags e de dados, são registadas em seguida. Logo a seguir, a função prosegue abrindo o ficheiro indicado e fazendo o “parsing” do mesmo, verificando que se trata de um documento RSs válido. O ficheiro é posteriormente fechado e libertada a memória do “parser”.
function parseRDF($file)
{
global $_depth, $_tags, $_item;
$xml_parser = xml_parser_create();
initArray();
/* Configurar a manipulação de eventos */
xml_set_element_handler($xml_parser, “startElement”, “endElement”);
xml_set_character_data_handler($xml_parser, “parseData”);
/* Abrir o ficheiro */
$fp = fopen ($file, “r”) or die (“Não é possivel abrir $file para leitura”);
while ($data = fread ($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die (sprintf(“Erro XML: %s na linha %d”,
xml_error_string(xml_get_error_code ($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
fclose($fp);
xml_parser_free($xml_parser);
}
Exemplo de Uso
<?phphttp://www.pt-code.com/?feed=rss2
parseRDF("");
?>
Agradecimento
Obrigado a “uncleozzy” pela sua contribuição em “Code Gallery”, e também a “xul.fr”
Até breve , e bom “Scripting”!!
PT-CODE


