The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

WebService::ChangesXml - Do something with updated blogs on Weblogs.Com

SYNOPSIS

  use WebService::ChangesXml;

  # Simple API
  my $changes = WebService::ChangesXml->new("http://www.weblogs.com/changes.xml");
  my $pings   = $changes->find_new_pings(600); # find new blogs updated in 600 seconds

  for my $ping (@$pings) {
      do_something($ping->{url});
  }

  # Event based API
  # do something with new blogs with 300 seconds interval

  my $changes = WebService::ChangesXml->new("http://www.weblogs.com/changes.xml");
  $changes->add_handler(\&found_new_ping);

  while (1) {
      $changes->find_new_pings();
      sleep 300;
  }

  sub found_new_ping {
      my($blog_name, $blog_url, $when) = @_;
      do_something($blog_url);
  }

DESCRIPTION

WebService::ChangesXml is a event-driven module to build your application that does something with newly updated blogs displayed on Weblogs.Com (or other services that provides compatible changes.xml).

METHODS

new
  $changes = WebService::ChangesXml->new($changes_xml);

Creates new object. Takes URL for changes.xml.

url
  $url = $changes->url();

Returns URL for changes.xml, that should be set on new.

add_handler

Registers new subroutine that is invoked when this module finds newly updated blogs. Registerd subroutine will be given 3 paarameters: Blog name, Blog URL and when its updated (epoch time).

find_new_pings
  $changes->find_new_pings($seconds);
  $changes->find_new_pings();

Fetches changes.xml and returns newly updated blogs as hashref in simple API, or invokes registered handlers when it found new blogs in event based API.

updated
  my $updated = $changes->updated();
  $changes->updated($updated);

Gets/sets last updated time of changes.xml. If you call find_new_pings method once in a script, and saves updated timestamp in file or database. Use this method to restore last updated time. For example:

  # restore updated time from $timestamp_file's mtime
  my $last_invoked = (stat($timestamp_file))[8];
  $changes->updated($updated);

  # now find new Blogs
  $changes->find_new_pings();

  # equivalent to Unix "touch"
  my $updated = $changes->updated;
  utime $updated, $updated, $timestamp_file;

Last updated time is set internally when you call find_new_pings methods.

count
  my $count = $changes->count();

Returns how many times changes.xml is updated.

user_agent
  my $ua = $changes->user_agent();

Returns LWP::UserAgent object used internally. If you wanna override User-Agent: header, timeout setting or other LWP setting, use this method.

AUTHOR

Tatsuhiko Miyagawa <miyagawa@bulknews.net>

Thanks to Naoya Ito for teaching me KeyAttr usage of XML::Simple ;-)

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

WebService::weblogUpdates

http://newhome.weblogs.com/changesXml

http://www.weblogs.com/changes.xml