#!/usr/bin/perl -w # Ce script permet de parser le flux RSS de l'application dmexp # Ce script est sous licence GPL use strict; use XML::RSS; use LWP::Simple; my $to_parse = shift; my $rss = new XML::RSS; if ( $to_parse =~ /^http:/ ){ my $content = get($to_parse); $rss->parse($content); } else { $rss->parsefile($to_parse) or die "Erreur"; } my %demexp; foreach my $item ( @{$rss->{items} }) { $item->{title} =~ /([0-9]*)\./; # Des questions apparaissent plusieurs fois dans le flux, le but est de n'avoir que la dernière version unless ( $demexp{$1} ){ $demexp{$1}->{question} = $item->{title}; ($demexp{$1}->{tags}, $demexp{$1}->{responses}, $demexp{$1}->{links}) = traitement_description($item->{description}); } } affichage_html(%demexp); sub affichage_html { my (%demexp) = @_; # Tri par numéro de question décroissant foreach my $numero ( sort{ $b <=> $a } keys(%demexp) ) { print "

$demexp{$numero}{question}

\n"; print "

Tags: "; while ( my $tag = shift(@{$demexp{$numero}{tags}})) { print "$tag "; } print "

\n"; print "

Réponses:


\n"; } } sub affichage_texte { my (%demexp) = @_; # Tri par numéro de question décroissant foreach my $numero ( sort{ $b <=> $a } keys(%demexp) ) { print "Question: $demexp{$numero}{question}\n"; print "Tags: "; while ( my $tag = shift(@{$demexp{$numero}{tags}})) { print "$tag "; } print "\n"; print "Réponses:\n"; while ( my $response = shift(@{$demexp{$numero}{responses}})) { my $link = shift(@{$demexp{$numero}{links}}); print "$response __ $link\n"; } print "-------------------------------------------------------\n"; } } sub traitement_description { my ($description) = @_; my @lignes = split(/\n/, $description); my ($tags, $responses, $links); my ($tag_i, $response_i) = (0, 0); for (my $i=0 ; $i<=$#lignes ; $i++) { if ( $lignes[$i] =~ /Tag:(.*)/) { $tags->[$tag_i] = $1; $tags->[$tag_i] =~ s/^ //; $tag_i++; } if ( $lignes[$i] =~ /Responses:/ ){ for (my $j=$i+1 ; $j<=$#lignes ; $j++) { ($responses->[$response_i], $links->[$response_i]) = $lignes[$j] =~ /(.*) \[(.*)\]$/; $response_i++; } } } return ($tags, $responses, $links); }