table of contents
| XML::Feed(3pm) | User Contributed Perl Documentation | XML::Feed(3pm) | 
NAME¶
XML::Feed - Syndication feed parser and auto-discovery
SYNOPSIS¶
    use XML::Feed;
    my $feed = XML::Feed->parse(URI->new('http://example.com/atom.xml'))
        or die XML::Feed->errstr;
    print $feed->title, "\n";
    for my $entry ($feed->entries) {
    }
    ## Find all of the syndication feeds on a given page, using
    ## auto-discovery.
    my @feeds = XML::Feed->find_feeds('http://example.com/');
DESCRIPTION¶
XML::Feed is a syndication feed parser for both RSS and Atom feeds. It also implements feed auto-discovery for finding feeds, given a URI.
XML::Feed supports the following syndication feed formats:
- RSS 0.91
- RSS 1.0
- RSS 2.0
- Atom
The goal of XML::Feed is to provide a unified API for parsing and using the various syndication formats. The different flavors of RSS and Atom handle data in different ways: date handling; summaries and content; escaping and quoting; etc. This module attempts to remove those differences by providing a wrapper around the formats and the classes implementing those formats (XML::RSS and XML::Atom::Feed). For example, dates are handled differently in each of the above formats. To provide a unified API for date handling, XML::Feed converts all date formats transparently into DateTime objects, which it then returns to the caller.
USAGE¶
XML::Feed->new($format)¶
Creates a new empty XML::Feed object using the format $format.
    $feed = XML::Feed->new('Atom');
    $feed = XML::Feed->new('RSS');
    $feed = XML::Feed->new('RSS', version => '0.91');
XML::Feed->parse($stream)¶
XML::Feed->parse($stream, $format)¶
Parses a syndication feed identified by $stream and returns an XML::Feed object. $stream can be any one of the following:
- Scalar reference
    A reference to string containing the XML body of the feed. 
- Filehandle
    An open filehandle from which the feed XML will be read. 
- File name
    The name of a file containing the feed XML. 
- URI object
    A URI from which the feed XML will be retrieved. 
$format allows you to override format guessing.
XML::Feed->get_file($filename)¶
Gets a feed from a file.
CML::Feed->get_fh($fh)
Gets a feed from pre-opened filehandle.
XML::Feed->get_uri($uri)¶
Gets a feed from a URI.
XML::Feed->find_feeds($uri)¶
Given a URI $uri, use auto-discovery to find all of the feeds linked from that page (using <link> tags).
Returns a list of feed URIs.
XML::Feed->identify_format(\$xml)¶
Given the xml of a feed return what format it is in, with "Atom" or "RSS" for all versions of RSS. Note that you pass in a scalar ref to the xml string.
$feed->convert($format)¶
Converts the XML::Feed object into the $format format, and returns the new object.
$feed->splice($other_feed)¶
Splices in all of the entries from the feed $other_feed into $feed, skipping posts that are already in $feed.
$feed->format¶
Returns the format of the feed ("Atom", or some version of "RSS").
$feed->title([ $title ])¶
The title of the feed/channel.
$feed->base([ $base ])¶
The url base of the feed/channel.
$feed->link([ $uri ])¶
The permalink of the feed/channel.
$feed->tagline([ $tagline ])¶
The description or tagline of the feed/channel.
$feed->description([ $description ])¶
Alias for $feed->tagline.
$feed->author([ $author ])¶
The author of the feed/channel.
$feed->language([ $language ])¶
The language of the feed.
$feed->copyright([ $copyright ])¶
The copyright notice of the feed.
$feed->modified([ $modified ])¶
A DateTime object representing the last-modified date of the feed.
If present, $modified should be a DateTime object.
$feed->generator([ $generator ])¶
The generator of the feed.
$feed->self_link ([ $uri ])¶
The Atom Self-link of the feed:
<http://validator.w3.org/feed/docs/warning/MissingAtomSelfLink.html>
A string.
$feed->entries¶
A list of the entries/items in the feed. Returns an array containing XML::Feed::Entry objects.
$feed->items¶
A synonym (alias) for "$feed->entries".
$feed->add_entry($entry)¶
Adds an entry to the feed. $entry should be an XML::Feed::Entry object in the correct format for the feed.
$feed->as_xml¶
Returns an XML representation of the feed, in the format determined by the current format of the $feed object.
$feed->first_link ([ $uri ])¶
The Atom First-link for feed paging and archiving (RFC 5005).
$feed->last_link ([ $uri ])¶
The Atom Last-link for feed paging and archiving.
$feed->next_link ([ $uri ])¶
The Atom Next-link for feed paging and archiving.
$feed->previous_link ([ $uri ])¶
The Atom Previous-link for feed paging and archiving.
$feed->current_link ([ $uri ])¶
The Atom Current-link for feed paging and archiving.
$feed->next_archive_link ([ $uri ])¶
The Atom Next-link for feed paging and archiving.
$feed->prev_archive_link ([ $uri ])¶
The Atom Prev-Archive-link for feed paging and archiving.
PACKAGE VARIABLES¶
- $XML::Feed::Format::RSS::PREFERRED_PARSER
- If you want to use another RSS parser class than XML::RSS (default), you
      can change the class by setting $PREFERRED_PARSER
      variable in the XML::Feed::Format::RSS package.
    
    $XML::Feed::Format::RSS::PREFERRED_PARSER = "XML::RSS::LibXML";Note: this will only work for parsing feeds, not creating feeds. Note: Only "XML::RSS::LibXML" version 0.3004 is known to work at the moment. 
- $XML::Feed::MULTIPLE_ENCLOSURES
- Although the RSS specification states that there can be at most one
      enclosure per item some feeds break this rule.
    If this variable is set then "XML::Feed" captures all of them and makes them available as a list. Otherwise it returns the last enclosure parsed. Note: "XML::RSS" version 1.44 is needed for this to work. 
VALID FEEDS¶
For reference, this cgi script will create valid, albeit nonsensical feeds (according to "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;
LICENSE¶
XML::Feed is free software; you may redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR & COPYRIGHT¶
Except where otherwise noted, XML::Feed is Copyright 2004-2008 Six Apart. All rights reserved.
SUPPORT¶
For support contact the XML::Feed mailing list - xml-feed@perlhacks.com.
SOURCE CODE¶
The latest version of XML::Feed can be found at
http://github.com/davorg/XML-Feed
| 2024-07-28 | perl v5.38.2 |