[Résolu][RSS] Générer un flux RSS

J’ai développé une appli Web via le framework Perl Catalyst. J’aimerai lui ajouter un flux RSS, tout est bien expliqué dans le manuel. Lorsque je tape dans mon navigateur http://localhost:3000/rss.xml, j’ai donc le fichier suivant généré automatiquement :
[codebox]

<?xml version="1.0" encoding="UTF-8"?> Dmaggen1 - RPM Manager http://localhost:3000/ La liste des RPMs récents fr-FR ADEO_PMAGGEN_tools 2.0.0000000-1-noarch ADEO_PMAGGEN_tools 2.0.0000000-1-noarchMise à jour le 01/10/2007 01/10/2007 http://localhost:3000/package/ADEO_PMAGGEN_tools-2.0.0000000-1-noarch http://localhost:3000/package/ADEO_PMAGGEN_tools-2.0.0000000-1-noarch ADEO_PMAGGEN_alimentation 1.0-7-noarch ADEO_PMAGGEN_alimentation 1.0-7-noarchMise à jour le 01/10/2007 01/10/2007 http://localhost:3000/package/ADEO_PMAGGEN_alimentation-1.0-7-noarch http://localhost:3000/package/ADEO_PMAGGEN_alimentation-1.0-7-noarch ADEO_PMAGGEN_alimentation 1.0-6-noarch ADEO_PMAGGEN_alimentation 1.0-6-noarchMise à jour le 01/10/2007 01/10/2007 http://localhost:3000/package/ADEO_PMAGGEN_alimentation-1.0-6-noarch http://localhost:3000/package/ADEO_PMAGGEN_alimentation-1.0-6-noarch ADEO_PMAGGEN_Php 1.0.000580-1-noarch ADEO_PMAGGEN_Php 1.0.000580-1-noarchMise à jour le 01/10/2007 01/10/2007 http://localhost:3000/package/ADEO_PMAGGEN_Php-1.0.000580-1-noarch http://localhost:3000/package/ADEO_PMAGGEN_Php-1.0.000580-1-noarch ADEO_PMAGGEN_alimentation 1.0-4-noarch ADEO_PMAGGEN_alimentation 1.0-4-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_alimentation-1.0-4-noarch http://localhost:3000/package/ADEO_PMAGGEN_alimentation-1.0-4-noarch ADEO_PMAGGEN_consobu 1.0-4-noarch ADEO_PMAGGEN_consobu 1.0-4-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_consobu-1.0-4-noarch http://localhost:3000/package/ADEO_PMAGGEN_consobu-1.0-4-noarch ADEO_PMAGGEN_gestion 1.0-1-noarch ADEO_PMAGGEN_gestion 1.0-1-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_gestion-1.0-1-noarch http://localhost:3000/package/ADEO_PMAGGEN_gestion-1.0-1-noarch ADEO_PMAGGEN_install 1.0-4-noarch ADEO_PMAGGEN_install 1.0-4-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_install-1.0-4-noarch http://localhost:3000/package/ADEO_PMAGGEN_install-1.0-4-noarch ADEO_PMAGGEN_perlutil 1.0-4-noarch ADEO_PMAGGEN_perlutil 1.0-4-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_perlutil-1.0-4-noarch http://localhost:3000/package/ADEO_PMAGGEN_perlutil-1.0-4-noarch ADEO_PMAGGEN_pmagframework 1.1-0.438-noarch ADEO_PMAGGEN_pmagframework 1.1-0.438-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_pmagframework-1.1-0.438-noarch http://localhost:3000/package/ADEO_PMAGGEN_pmagframework-1.1-0.438-noarch ADEO_PMAGGEN_alerte 1.0-3-noarch ADEO_PMAGGEN_alerte 1.0-3-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_alerte-1.0-3-noarch http://localhost:3000/package/ADEO_PMAGGEN_alerte-1.0-3-noarch ADEO_PMAGGEN_alerte 1.0-4-noarch ADEO_PMAGGEN_alerte 1.0-4-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_alerte-1.0-4-noarch http://localhost:3000/package/ADEO_PMAGGEN_alerte-1.0-4-noarch ADEO_PMAGGEN_alerte 1.0-5-noarch ADEO_PMAGGEN_alerte 1.0-5-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_alerte-1.0-5-noarch http://localhost:3000/package/ADEO_PMAGGEN_alerte-1.0-5-noarch ADEO_PMAGGEN_consobu 1.0-6-noarch ADEO_PMAGGEN_consobu 1.0-6-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_consobu-1.0-6-noarch http://localhost:3000/package/ADEO_PMAGGEN_consobu-1.0-6-noarch ADEO_PMAGGEN_consobu 1.0-7-noarch ADEO_PMAGGEN_consobu 1.0-7-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_consobu-1.0-7-noarch http://localhost:3000/package/ADEO_PMAGGEN_consobu-1.0-7-noarch ADEO_PMAGGEN_ffstock 1.0.000586-1-noarch ADEO_PMAGGEN_ffstock 1.0.000586-1-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_ffstock-1.0.000586-1-noarch http://localhost:3000/package/ADEO_PMAGGEN_ffstock-1.0.000586-1-noarch ADEO_PMAGGEN_install 1.0-7-noarch ADEO_PMAGGEN_install 1.0-7-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_install-1.0-7-noarch http://localhost:3000/package/ADEO_PMAGGEN_install-1.0-7-noarch ADEO_PMAGGEN_perlutil 1.0-7-noarch ADEO_PMAGGEN_perlutil 1.0-7-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_perlutil-1.0-7-noarch http://localhost:3000/package/ADEO_PMAGGEN_perlutil-1.0-7-noarch ADEO_PMAGGEN_pmagframework 1.1-0.617-noarch ADEO_PMAGGEN_pmagframework 1.1-0.617-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_pmagframework-1.1-0.617-noarch http://localhost:3000/package/ADEO_PMAGGEN_pmagframework-1.1-0.617-noarch ADEO_PMAGGEN_Valostkweb 1.0-0.528-noarch ADEO_PMAGGEN_Valostkweb 1.0-0.528-noarchMise à jour le 26/09/2007 26/09/2007 http://localhost:3000/package/ADEO_PMAGGEN_Valostkweb-1.0-0.528-noarch http://localhost:3000/package/ADEO_PMAGGEN_Valostkweb-1.0-0.528-noarch [/codebox]

Mais Firefox ne veux pas le détecter comme flux RSS. Quel manipulation faut-il faire pour que celui-ci détecte qu’il s’agit d’un flux RSS.

Avec l’instruction

Firefox me propose de télécharger le flux, sans cette instruction, firefox m’affiche en brut dans le navigateur les données du fichier.

Résolut en utilisant le module XML::Feed de la manière suivante :

[codebox]

@method public void rss(Catalyst c)

Affiche la liste des RPMs

@param c le controller

sub rss : Path(’/atom.xml’) {
my ($self, $c) = @_;

# Création de la liste de posts
my $posts = new Adeo::Util::ArrayList();

# On recherches les derniers Rpms
my $rs = $c->model('RpmDB::Rpms')->search(undef,
	{
		order_by => 'me.date DESC',
		page => 1,
		rows => 20,
	}
);

# Création du feed
my $feed = new XML::Feed("Atom");
$feed->title("RPM Manager");
$feed->link($c->uri_for('/'));
$feed->description("Recents Packages");

# On les parcours
while (my $rpm = $rs->next) {
	my $entry = new XML::Feed::Entry();
	$entry->title($rpm->name . " " . $rpm->version . "-" . $rpm->release . "-" . $rpm->arch);
	$entry->modified($rpm->date);
	$entry->link($c->uri_for("/package/" . $rpm->name . "-" . $rpm->version . "-" . $rpm->release . "-" . $rpm->arch));
	$entry->summary($rpm->name . " " . $rpm->version . "-" . $rpm->release . "-" . $rpm->arch . " - Mise à jour le " . $rpm->date->dmy('/'));
	$entry->content("" . $rpm->name . " " . $rpm->version . "-" . $rpm->release . "-" . $rpm->arch . "Mise à jour le " . $rpm->date->dmy('/') . "");
	$feed->add_entry($entry);
}
$c->stash->{feed} = $feed;

$c->res->body($feed->as_xml());

}
[/codebox]