use base qw( Class::ErrorHandler );
use Feed::Find;
use URI::Fetch;
+use LWP::UserAgent;
use Carp;
-our $VERSION = '0.21';
+our $VERSION = '0.23';
sub new {
my $class = shift;
my $feed = bless {}, $class;
my $xml = '';
if (UNIVERSAL::isa($stream, 'URI')) {
- my $res = URI::Fetch->fetch($stream)
+ my $ua = LWP::UserAgent->new;
+ $ua->env_proxy; # force allowing of proxies
+ my $res = URI::Fetch->fetch($stream, UserAgent => $ua)
or return $class->error(URI::Fetch->errstr);
return $class->error("This feed has been permanently removed")
if $res->status == URI::Fetch::URI_GONE();
}
}
+sub _convert_entry {
+ my $feed = shift;
+ my $entry = shift;
+ my $feed_format = ref($feed); $feed_format =~ s!^XML::Feed::!!;
+ my $entry_format = ref($entry); $entry_format =~ s!^XML::Feed::Entry::!!;
+ return $entry if $entry_format eq $feed_format;
+ return $entry->convert($feed_format);
+}
+
+sub base;
sub format;
sub title;
sub link;
=back
-C<$format> allows you to override format guessing.
+I<$format> allows you to override format guessing.
=head2 XML::Feed->find_feeds($uri)
Returns a list of feed URIs.
+=head2 XML::Feed->identify_format($xml)
+
+Given the xml of a feed return what format it is in (C<Atom>, or some version of C<RSS>).
+
=head2 $feed->convert($format)
Converts the I<XML::Feed> object into the I<$format> format, and returns
The title of the feed/channel.
+=head2 $feed->base([ $base ])
+
+The url base of the feed/channel.
+
=head2 $feed->link([ $uri ])
The permalink of the feed/channel.
A list of the entries/items in the feed. Returns an array containing
I<XML::Feed::Entry> objects.
+=head2 $feed->items
+
+A synonym for I<$feed->entries>.
+
=head2 $feed->add_entry($entry)
Adds an entry to the feed. I<$entry> should be an I<XML::Feed::Entry>
=back
+=head1 VALID FEEDS
+
+For reference, this cgi script will create valid, albeit nonsensical feeds
+(according to C<http://feedvalidator.org> anyway) for Atom 1.0 and RSS 0.90,
+0.91, 1.0 and 2.0.
+
+ #!perl -w
+
+ use strict;
+ use CGI;
+ use CGI::Carp qw(fatalsToBrowser);
+ use DateTime;
+ use XML::Feed;
+
+ my $cgi = CGI->new;
+ my @args = ( $cgi->param('format') || "Atom" );
+ push @args, ( version => $cgi->param('version') ) if $cgi->param('version');
+
+ my $feed = XML::Feed->new(@args);
+ $feed->id("http://".time.rand()."/");
+ $feed->title('Test Feed');
+ $feed->link($cgi->url);
+ $feed->self_link($cgi->url( -query => 1, -full => 1, -rewrite => 1) );
+ $feed->modified(DateTime->now);
+
+ my $entry = XML::Feed::Entry->new();
+ $entry->id("http://".time.rand()."/");
+ $entry->link("http://example.com");
+ $entry->title("Test entry");
+ $entry->summary("Test summary");
+ $entry->content("Foo");
+ $entry->modified(DateTime->now);
+ $entry->author('test@example.com (Testy McTesterson)');
+ $feed->add_entry($entry);
+
+ my $mime = ("Atom" eq $feed->format) ? "application/atom+xml" : "application/rss+xml";
+ print $cgi->header($mime);
+ print $feed->as_xml;
+
+
=head1 LICENSE
I<XML::Feed> is free software; you may redistribute it and/or modify it