Henglong has asked for the wisdom of the Perl Monks concerning the following question:

I have a script that calls an RSS feed that when it is printed is shows is in xml code instead of just putting it in xhtml. I need some assistance to have it show properly. Okay, so I have changed somethings and will update this when I have them working. (One change was I forgot XML::RSS) Here is the updated code:
#!/usr/bin/perl # RSS CGI Prog use strict; use warnings; use CGI; use XML::RSS; use LWP::Simple; use Data::Dumper; my $url = "http://feeds.feedburner.com/animals"; my $rss_content = get($url); my $rss = XML::RSS->new; my $cgi = CGI->new; my $feed = $rss->parse($rss_content); print $cgi->header, $cgi->start_html(-style=>"/css/cgi_lesson1.css", -title=>"This i +s an RSS Feed Puller!"), $cgi->div({-class=>"header"},"This is a very simple program that + pulls from $url"), "<div class=\"container\"><div class=\"content\">"; #print Dumper($feed); foreach my $feeds (@{$feed}) { print "<p> This is a line break, I hope you like it</p>"; foreach (my $key ( keys %{$feeds})) { print "<p><strong>$key</strong>", $feeds->{$key},"</p>" } } print "</div></div>"; print $cgi->end_html;

Replies are listed 'Best First'.
Re: Trying to get an RSS to display
by Anonymous Monk on Oct 26, 2011 at 16:14 UTC

    Your program does nothing to transform RSS into HTML

      It has been updated, but is not the most current version.

        Welcome, see The Perl Monks Guide to the Monastery, see How do I post a question effectively?, Where should I post X?

        Your updated code does not compile :)

        If you look at the docs for XML::RSS you can see an example of accessing items . See also References quick reference

        #!/usr/bin/perl -- use constant DEBUG => !!( 0 || $ENV{PERL_DEBUG_MYAPPNAME} ); use CGI::Carp qw( fatalsToBrowser ); use CGI; # to avoid those pesky 500 errors BEGIN { CGI::Carp::set_message( sub { print "<h1>something broke, we know what it is, thank you, + try again later</h1>\n"; if (DEBUG) { print '<p>', CGI->escapeHTML(@_), '</p>'; } } ); } ## end BEGIN use strict; use warnings; use Data::Dumper (); use LWP::Simple qw( get ); use XML::RSS; Main( @ARGV ); exit( 0 ); sub Main { #~ return DebugCGI(); # generic, env.cgi return RSSMoo('file:animals.rss.xml'); # for testing #~ return RSSMoo("http://feeds.feedburner.com/animals"); } ## end sub Main sub RSSMoo { my $url = shift; my $rss_content = get($url); my $cgi = CGI->new; my $feed = XML::RSS->new->parse($rss_content); binmode STDOUT, ":encoding(UTF-8)"; $cgi->charset('UTF-8'); print $cgi->header, $cgi->start_html; for my $item ( @{ $feed->{items} } ) { print '<div style="border: 2px solid black ;">'; print FudgeA( $item ); print '</div>'; } print '<div style="white-space: pre; overflow: scroll; height: 300 +px;">', $cgi->escapeHTML( DD( $feed ) ), '</div><hr><hr><hr>'; print $cgi->end_html; } ## end sub RSSMoo sub FudgeA { my $iref = shift; return '<p>'.CGI->a( { -href => $iref->{link}, }, CGI->escapeHTML( + $iref->{title} ) ).'</p>'; } sub FudgeB { my $iref = shift; return CGI->new( $iref )->Dump . '<hr>'; } sub FudgeC { my $iref = shift; my $ret = '<div>'; $ret .= '<p>' . CGI->escapeHTML( $iref->{title} ) . '</p>'; while( my( $k, $v ) = each %$iref ){ $ret .= "<p><strong>"; $ret .= CGI->escapeHTML( $k ); $ret .= "</strong> "; $ret .= CGI->escapeHTML( $v ); $ret .= '</p>'; } $ret .= '</div>'; return $ret; } sub DebugCGI { my $cgi = CGI->new; print $cgi->header(); # Write HTTP header print $cgi->start_html, $cgi->b( rand time, ' ', scalar gmtime ), '<table border="1" width="%100"><tr><td>', $cgi->Dump, '</td>', '<td><div style="white-space: pre-wrap; overflow: scroll;">', $cgi->escapeHTML( DD($cgi) ), '</div></td></tr></table>', CGI->new( \%ENV )->Dump, $cgi->end_html; } ## end sub DebugCGI sub DD { scalar Data::Dumper->new( \@_ )->Indent(1)->Useqq(1)->Dump; }