PHP RSS Feed Generator Class

English Version | Versão Portuguesa



It’s been a while since I’ve planned on developing a new platform for my work as Web Developer, and next to all Web Developers, and I started to develop some modules and this RSS Generator Class born to fulfill my needs.

Supported versions:
RSS 2.0

Download:
Download it

Features:
Generates RSS 2.0 feeds
All feeds are validated by feed validator
Supports all feed elements
Simple & easy to define channel proprieties
Simple & easy to define item elements
Enables usage of sub-tags and attributes

Example

It’s a minimum “how to” example needed to understand how to use this class. It’s part of the download package.

include( "feed.php" );

	//Create a new Feed
	$feed = new Feed( );
  
	//Setting the channel elements
	//Helper -> http://www.rssboard.org/rss-specification
	$feed->setFeedTitle( 'Demo - RSS Generator Class' );
	$feed->setFeedLink( 'https://joaopedropereira.com/blog/rss' );
	$feed->setFeedDesc( 'This is demo of generating a RSS feed. ONLY RSS Version 2.0 Supported' );
	$feed->setFeedImage( 'Oh, my photo...', 'http://joaopedropereira.com/projects/rss_gen', 'http://s3.amazonaws.com/twitter_production/profile_images/63969619/imagemresized.jpg' );
  
	//Is possible to use setChannelElm() function for setting other optional channel elements
	$feed->setChannelElm( 'language', 'en-us' );
    
	//Create a new Item
	$item1 = new Item( );
  
	//Setting the Item elements
	//Helper -> http://www.rssboard.org/rss-specification
	$item1->setItemTitle( 'Item nº 1' );
	$item1->setItemLink( 'http://joaopedropereira.com' );
	$item1->setItemDate( time( ) );
	$item1->setItemDesc( 'Bla, bla, bla, item nº 1.' );
	$item1->setItemEnclosure( 'http://www.beardodisco.com/beatelectric/music/Loverboy12Mix.mp3', '17121349', 'audio/mpeg' );
	$item1->setItemAuthor( 'contacto@joaopedropereira.com (João Pedro Pereira)' );
	//As in Channel is possible to use setItemElm() function for setting other optional item elements

	//Create another Item
	$item2 = new Item( 'Item nº 2', 'http://twitter.com/joaoppereira', 'Bla, bla, bla, twitter of the owner of the blog of a webdeveloper' );
  
	$item2->setItemDate( time( ) );
	$item2->setItemAuthor( 'contacto@joaopedropereira.com (João Pedro Pereira)' );
	
	//Adding both created items
	$feed->addItem( $item1 );
	$feed->addItem( $item2 );
  
	//Now we're ready to generate the Feed, Awesome!
	$feed->genFeed( );

Download | Demo

Download | Demo

EDIT

HOT NEWS, PHP XML-RSS Feed Generator Was Accepted on PHPClasses.org!!


Há já algum tempo que pretendo desenvolver uma nova plataforma para o meu trabalho como Web Developer, e numa fase posterior abrir como serviço para todos os Web Developers, e por isso comecei a desenvolver alguns módulos para essa plataforma, trabalho que deu, entre outros, no módulo de RSS Feed’s surgindo assim a RSS Generator Class para satisfazer as necessidades.

Versões Suportadas:
RSS 2.0

Download:
Download it

Funcionalidades:
Gera RSS Feeds versão 2.0
As feeds são válidas conforme o feed validator
Suporta todos os elementos quer dos channel’s quer dos item’s
É simples definir as propriedades do channel
É simples definir as propriedades dos items

É possível utilizar sub-tags e atributos

Exemplo

Um pequeno exemplo que mostra como se pode fazer uso desta classe. Faz parte do pacote disponível para download.

include( "feed.php" );

	//Create a new Feed
	$feed = new Feed( );
  
	//Setting the channel elements
	//Helper -> http://www.rssboard.org/rss-specification
	$feed->setFeedTitle( 'Demo - RSS Generator Class' );
	$feed->setFeedLink( 'https://joaopedropereira.com/blog/rss' );
	$feed->setFeedDesc( 'This is demo of generating a RSS feed. ONLY RSS Version 2.0 Supported' );
	$feed->setFeedImage( 'Oh, my photo...', 'http://joaopedropereira.com/projects/rss_gen', 'http://s3.amazonaws.com/twitter_production/profile_images/63969619/imagemresized.jpg' );
  
	//Is possible to use setChannelElm() function for setting other optional channel elements
	$feed->setChannelElm( 'language', 'en-us' );
    
	//Create a new Item
	$item1 = new Item( );
  
	//Setting the Item elements
	//Helper -> http://www.rssboard.org/rss-specification
	$item1->setItemTitle( 'Item nº 1' );
	$item1->setItemLink( 'http://joaopedropereira.com' );
	$item1->setItemDate( time( ) );
	$item1->setItemDesc( 'Bla, bla, bla, item nº 1.' );
	$item1->setItemEnclosure( 'http://www.beardodisco.com/beatelectric/music/Loverboy12Mix.mp3', '17121349', 'audio/mpeg' );
	$item1->setItemAuthor( 'contacto@joaopedropereira.com (João Pedro Pereira)' );
	//As in Channel is possible to use setItemElm() function for setting other optional item elements

	//Create another Item
	$item2 = new Item( 'Item nº 2', 'http://twitter.com/joaoppereira', 'Bla, bla, bla, twitter of the owner of the blog of a webdeveloper' );
  
	$item2->setItemDate( time( ) );
	$item2->setItemAuthor( 'contacto@joaopedropereira.com (João Pedro Pereira)' );
	
	//Adding both created items
	$feed->addItem( $item1 );
	$feed->addItem( $item2 );
  
	//Now we're ready to generate the Feed, Awesome!
	$feed->genFeed( );

Download | Demo

EDIT

HOT NEWS, PHP XML-RSS Feed Generator foi aceite no PHPClasses.org!!

13 comments

  1. Interessante e muito útil. Em princípio vou experimentar usar num novo projecto.
    Podias apenas explicar como podemos actualizar o feed assim que é publicado uma notícia por ex.. Seria excelente.

    Cumprimentos e continua o excelente trabalho.

    1. Antes de mais obrigado pela força Pedro!

      Quanto à tua questão: “como podemos actualizar o feed assim que é publicada uma notícia” ?
      É uma questão bastante pertinente, eu pessoalmente estou a ver uma forma com pouca performance de o fazer.
      Que seria fazer load do feed sempre que é pedido e a lastBuildDate ser igual à data do teu último, desta forma os Feed Readers só se davam ao trabalho de fazer a actualização do teu feed quando actualizas com noticias, mas o problema disto é que sempre que for feita uma query ao script ele vai causar um load no teu servidor para ler a base de dados.
      Por isso será necessário utilizar um sistema de caching, vou fazer algumas alterações à classe para tornar isto mais fácil de se fazer.

    2. Estive a tratar de adicionar uma função para fazer o que precisas mas tive de fazer algumas alterações a outras funções.
      Aqui fica uma versão intermédia com essa melhoria: http://joaopedropereira.com/projects/rss_gen/rss_gen_1.1.zip
      Pega no demo_cache.php e nas últimas linhas tens a utilização da Função Feed -> cacheFeed ( ) . Deste modo no painel de inserção de noticias metes a actualizar o feed quando inseres uma nova noticia.

      Mais sugestões para adicionar novas funcionalidades são bem vindas.

  2. Óptimo. Veio mesmo a calhar. Estava a precisar de criar feeds para um projecto, e estava a pensar que ia ter de usar uma classe qualquer que encontrasse no Google. 😛

  3. A partir da próxima semana vou implementar um Rss num website/portal. Depois terei de aplicar a actualização dos feeds. Logo direi algo sobre o script e se encontrar alguma solução porreira publico aqui.
    Abraço

  4. Resolvi pegar na classe e fazer uns testes, modificando o demo. Gostei muito do código, está muito bem organizado e documentado. Em condições normais, a classe gera o XML correctamente, mas há um pequeno senão:

    se o texto de descrição da feed contiver por exemplo, , a feed não é apresentada correctamente (injecção de tags XML). Tal como no XML, esse problema pode ser resolvido usando a tag CDATA http://en.wikipedia.org/wiki/CDATA

    No demo, acho que há algum problema com a imagem de logótipo: ela está correcta, porque aparece no browser, mas não como logo da feed. Reparei que as tags width e height são geradas sem valores lá dentro, pode ser daí.

    Tirando estes dois pequeno defeitos, não tenho mais nada a apontar, bom trabalho! 😉 O que se quer é algo intuitivo e fácil de usar.

    E se quiseres que a classe esteja perfeita, tenta adicionar um modo (ou mesmo que seja por omissão) para gerar o código da feed indentado. Não é o topo de utilidade, mas é bonito de se ver xD

    Cumps.

    1. Viva André, obrigado pelas sugestões e comentários :).

      Quanto ao CDATA penso que utilizando a função nativa do PHP, htmlentities() e usando a tag CDATA consigo obter o resultado pretendido, vou tentar implementar isso.

      No que toca aos campos width e height penso já ter arranjado uma solução para o problema.

      Relativamente à indentação acho uma boa ideia !

      Muito obrigado pelas dicas 😉

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.