| AnyEvent-Gmail-Feed documentation | Contained in the AnyEvent-Gmail-Feed distribution. |
AnyEvent::Gmail::Feed - Subscribe to Gmail feed
use AnyEvent;
use AnyEvent::Gmail::Feed;
AnyEvent::Gmail::Feed->new(
username => $user, #required
password => $pass, #required
label => $label, #optional (eg. 'unread')
interval => $interval, #optional (60s by default)
on_new_entry => sub {
my $entry = shift; #XML::Atom::Entry instance
use Data::Dumper; warn Dumper $entry->as_xml;
},
);
AnyEvent->condvar->recv;
AnyEvent::Gmail::Feed is an AnyEvent consumer which checks GMail unread messages
Masayoshi Sekimura <sekimura@cpan.org>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| AnyEvent-Gmail-Feed documentation | Contained in the AnyEvent-Gmail-Feed distribution. |
package AnyEvent::Gmail::Feed; use strict; use 5.008_001; our $VERSION = '0.02'; use AnyEvent; use AnyEvent::HTTP; use MIME::Base64; use XML::Atom::Feed; sub new { my ($class, %args) = @_; my $username = delete $args{username}; my $password = delete $args{password}; my $label = delete $args{label}; my $interval = delete $args{interval} || 60; unless ($username && $password) { die "both username and password are required"; } my $self = bless {}, $class; my $auth = MIME::Base64::encode( join(":", $username, $password) ); my $headers = {Authorization => "Basic $auth"}; my $uri = 'https://mail.google.com/mail/feed/atom/'; $uri .= $label . '/' if $label; ## 'unread' or whatever my %seen; my $timer; my $checker; $checker = sub { http_get $uri, headers => $headers, sub { my ($body, $hdr) = @_; return unless $body; my $feed = XML::Atom::Feed->new(\$body) or return; for my $e ($feed->entries) { unless ($seen{$e->id}) { ($args{on_new_entry} || sub {})->($e); }; $seen{$e->id}++; } $timer = AnyEvent->timer( after => $interval, cb => $checker); }; }; $checker->(); return $self; } 1; __END__