você está aqui: Home  → Arquivo de Mensagens

Como atribuir notícias RSS ao seu site usando ATOM e PHP

Colaboração: Roberson Carlos Fox

Data de Publicação: 04 de Julho de 2006

Atom é o nome dado a um estilo baseado em conteúdo XML e meta data, ou seja, é um protocolo em nível de aplicação para publicar e editar fontes web que são periodicamente atualizados, um exemplo para isto são os blogs.

Os feeds devem ser formados em formato XML e são identificados como application/atom+xml media type.

O funcionamento dele não difere das Markup Languages tradicionais, com cabeçalhos, títulos e corpo, como no HTML 4.0.

Elementos do Feed (Cabeçalho)

Um feed consiste de alguns Metadata seguidos por alguns números de entrada. Todo feed deve conter um cabeçalho.

  <?xml version="1.0" encoding="utf-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  
  <title>Genova Home Page - News Feed</title>
  <link href=http://www.genova.einet.com.br/>
  <updated>2006-01-05 3:05:47</updated>
  
  <author>
  <name>Roberson Carlos Fox</name>
  <email>robersonfox@genovaengine.com</email>
  <uri>http://www.genova.einet.com.br/about-me</uri>
  </author>
  
  <id>http://www.genova.einet.com.br</id>
  <icon>http://www.genova.einet.com.br/img/genova.ico</icon>
  <logo>http://www.genova.einet.com.br/img/G3.jpg</logo>
  <rights> © 2002-2006 Roberson Carlos Fox </rights>
  <subtitle>Esteja atualizado com o que há de melhor na web</subtitle>
  <category term=Informática/>
  </feed>

Elementos requeridos do cabeçalho:

Abaixo se segue uma lista com os principais elementos requeridos em um feed e um exemplo.

  • ID, Identifica o Feed usando um universal e permanente URL, você pode colocar seu Nome de Domínio nesta parte. Ex.:
      <id>http://www.genova.einet.com.br</id>
    

  • Title, contem o título do Feed, este valor não pode ser deixado em branco de maneira alguma. Ex.:
      <title>Genova Home Page - News Feed</title>
    

Elementos recomendados:

  • Author, nome do autor do Feed, um feed pode ter inúmeros autores e um feed precisa ter ao menos um autor. Ex.:
      <author>
      <name>Roberson Carlos Fox</name>
      <email>robersonfox@genovaengine.com</email>
      <uri>http://www.genova.einet.com.br/about-me</uri>
      </author>
    
  • Link, identifica uma HP relacionada, o tipo de relação é atribuído pode atributo rel. Ex.:

      <link rel="self" href=" http://www.genova.einet.com.br/" />
    

Elementos (Entradas) do Corpo (ENTRY)

Um exemplo de uma entrada seria um único post em um site.

  <entry>
  <title>Título do artigo</title>
  <link href=http://www.genova.einet.com.br/artigos.php?id=46/>
  <id>http://www.genova.einet.com.br/artigos.php?id=46/</id>
  <updated>05-01-2006 02:56:00</updated>
  <summary>Descrição do artigo</summary>
  <author>
  <name>Roberson Carlos Fox</name>
  </author>
  </entry>

Elementos requeridos do corpo:

Aqui esta uma lista de elementos requeridos para o Feed, cada um tem uma breve descrição e é seguido de um exemplo, como no tópico acima.

  • ID, Title, tem o mesmo significado que o do cabeçalho, salvo que eles se referem ao artigo e não ao Feed. Ex.:
      <id>http://www.genova.einet.com.br/artigos.php?id=46</id>
    

  • Updated, Indica quando foi a ultima vez que a entrada foi modificada. Ex.:
      <updated>05-01-2006 02:56:00</updated>
    

Neste parte ainda cabem os elementos link e author que funcionam da mesma forma que no cabeçalho e como já foi dito, salvo que eles fazem referencia ao artigo e não ao Feed.

Uma entrada interessante é a:

Source, ela, a entrada, é usada para se referir a documentos copiados de outros Sites, assim seria como se falássemos que a fonte foi de outro local. Ex.:

  <source>
  <id>http://example.org/</id>
  <title>Fourty-Two</title>
  <updated>2003-12-13T18:30:02Z</updated>
  <rights>© 2005 Example, Inc.</rights>
  </source>

Exemplo de feed

  <?xml version="1.0" encoding="utf-8"?>
  
  <feed xmlns="http://www.w3.org/2005/Atom">
  
  <title>Genova Home Page - News Feed</title>
  <link href=http://www.genova.einet.com.br/>
  <updated>2006-01-05 3:05:47</updated>
  
  <author>
  <name>Roberson Carlos Fox</name>
  <email>robersonfox@genovaengine.com</email>
  <uri>http://www.genova.einet.com.br/about-me</uri>
  </author>
  
  <id>http://www.genova.einet.com.br</id>
  <icon>http://www.genova.einet.com.br/img/genova.ico</icon>
  <logo>http://www.genova.einet.com.br/img/G3.jpg</logo>
  <rights> © 2002-2006 Roberson Carlos Fox </rights>
  <subtitle>Esteja atualizado com o que há de melhor na web</subtitle>
  <category term=Informática/>
  
  <entry>
  <title>Título do artigo1</title>
  <link href=http://www.genova.einet.com.br/artigos.php?id=46/>
  <id>http://www.genova.einet.com.br/artigos.php?id=46/</id>
  <updated>05-01-2006 02:56:00</updated>
  <summary>Descrição do artigo1</summary>
  <author>
  <name>Roberson Carlos Fox</name>
  </author>
  </entry>
  
  <entry>
  <title>Título do artigo2</title>
  <link href=http://www.genova.einet.com.br/artigos.php?id=47/>
  <id>http://www.genova.einet.com.br/artigos.php?id=47/</id>
  <updated>06-01-2006 01:36:00</updated>
  <summary>Descrição do artigo2</summary>
  <author>
  <name>Roberson Carlos Fox</name>
  </author>
  </entry>
  
  </feed>

Colocando as coisas para funcionar com PHP

Como você pode notar, as entradas em um Feed podem vir de um banco de dados e ocupar muito espaço no feed, o bom seria pegar os últimos 15 posts do site em questão e enviá-los para uma variável fazendo uso de um loop como no exemplo:

  <?php
  $tabela := "artigos";
  $data=date("Y-d-m G:i:s");
  
  // Conecta ao banco de dados MySQL
  $db=mysql_connect($host, $sql_login ,$sql_passwd);
  mysql_select_db ($nome_bd);
  
  //estou assumindo que a tabela
  //chame-se artigos na variável $tabela
  $sql="SELECT * FROM $tabela ORDER by ID desc";
  
  $resultado = mysql_query($sql,$db);
  
  if (mysql_numrows($resultado)){
  $a1=0;
  while (($linha = mysql_fetch_row($resultado)) and ($a1!=15)) {
  $a1=$a1+1;
  $conteudo.="
  <entry>
  <title>$linha[4]</title>
  <link href=http://www.genova.einet.com.br/artigos.php?id=$linha[0]/>
  <id>http://www.genova.einet.com.br/artigos.php?id=$linha[0]/</id>
  <updated>$linha[3]</updated>
  <summary>$linha[5]</summary>
  <author>
  <name>$linha[1]</name>
  </author>
  </entry> ";
  }
  }
  
  mysql_free_result($resultado);
  if ($db){
  mysql_close($db);
  }
  ?>
  //Estou assumindo que a
  //Linha 4 = Título
  //Linha 0 = ID do artigo
  //Linha 3 = Data
  //Linha 5 = Descrição
  //Linha 1 = Autor
  //Faça as alterações de forma que seu script funcione. ?>

Este simples script irá pegar os dados do banco de dados e criar as entradas, uma por uma, até um total de 15 entradas de acordo com a variável $a1. Em seguida você deverá adicionar o cabeçalho do Feed:

  <?php
  header("Content-Type: text/xml");
  echo" <?xml version="1.0" encoding="utf-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title>Genova Home Page - News Feed</title>
  <link href=http://www.genova.einet.com.br/>
  <updated>$data</updated>
  
  <author>
  <name>Roberson Carlos Fox</name>
  <email>robersonfox@genovaengine.com</email>
  <uri>http://www.genova.einet.com.br/about-me</uri>
  </author>
  
  <id>http://www.genova.einet.com.br</id>
  <rights> © 2002-2006 Roberson Carlos Fox </rights>
  <subtitle>Esteja atualizado com o que há de melhor na web</subtitle>
  <category term=Informática/>
  
  $conteudo;
  
  </feed>"
  ?>

Por fim, uma atenção especial para a variável "conteudo", ela é gerada no primeiro script e armazena as entradas do Feed.

Com estas poucas informações você com certeza será capaz de criar um RSS em seu site.



Veja a relação completa dos artigos de Roberson Carlos Fox

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script