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( );
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( );
EDIT
HOT NEWS, PHP XML-RSS Feed Generator foi aceite no PHPClasses.org!!
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.
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.
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.
Ó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. 😛
Se encontrares algum problema ou alguma situação que aches que possa melhorar na classe apita ;).
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
Excelente, fico então a aguardar noticias 😉
Abraço
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.
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 😉
A classe foi aceite no PHPClasses.org e no FreshMeat:
http://www.phpclasses.org/package/6394-PHP-Generate-RSS-2-0-feeds.html
http://freshmeat.net/projects/xml-rss-feed-generator
Gostaria de saber como ler os comentarios feitos pelos leitores em um blog.
Através de uma feed?
Site comment feed
Permalink format:
http://example.com/comments/feed/
Default format:
http://example.com/?feed=comments-rss2
Fonte: http://codex.wordpress.org/WordPress_Feeds#Site_comment_feed