The RSS mechanism
Now that we’ve set up the functions to handle incoming queries, all
that’s left is for us to define what happens every time the heartbeat in
the Jabber::Connection
loop ticks past the 30-minute mark.
We registered this rss()
function with the
register_beat()
method earlier in the script:
sub rss { debug("[rss]"); # Create NodeFactory my $nf = new Jabber::NodeFactory;
In the IQ handlers iq-register()
,
iq-version()
, iq-browse()
, and
iq-notimpl()
,
we avoided the need to build elements from scratch, by simply turning around
the incoming request elements and making them into responses, before sending
them back. Here, in the rss()
function, we’ll actually
be building elements from scratch—headline type <message>
elements to be precise. This is the reason we need an instance of the
Jabber::NodeFactory
.
# Go through each of the RSS sources foreach my $source (keys %sources) { # Retrieve attempt my $data = get($sources{$source}); # Didn't get it? Next one unless (defined($data)) { debug("cannot retrieve $source"); next; } # Parse the RSS my $rss = XML::RSS->new(); eval { $rss->parse($data) }; if ($@) { debug("Problems parsing $source"); next; }
The procedure in this function reflects what we described earlier
in Section 9.3.1.3. Each time
rss()
is called, it goes through each of the
sources defined in the list (%sources
) and tries
to retrieve it with get()
, a function from the
LWP::Simple
library, and parse it with an instance
of XML::RSS
.
Because XML::RSS
uses XML::Parser ...
Get Programming Jabber now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.