AnyEvent-Gmail-Feed

 view release on metacpan or  search on metacpan

example/gmail-notifier  view on Meta::CPAN

#!/usr/bin/perl
package GmailNotifier;
use Moose;
use AnyEvent;
use AnyEvent::Gmail::Feed;
use Mac::Growl ':all';

with 'MooseX::Getopt';

has 'username' => (is => 'rw', isa => 'Str', required => 1);
has 'password' => (is => 'rw', isa => 'Str', required => 1);
has 'interval' => (is => 'rw', isa => 'Int', default  => 60);

sub run {
    my ($self, %args) = @_;

    my %seen;
    RegisterNotifications('GmailNotifier',  ['email.arrived'], ['email.arrived']);
    AnyEvent::Gmail::Feed->new(
        username => $self->username,
        password => $self->password,
        interval => $self->interval,
        on_new_entry => sub {
            my $entry = shift;
            warn "send notify: " . $entry->summary;
            PostNotification('GmailNotifier',  'email.arrived', $entry->title, $entry->summary);
        },
    );
    AnyEvent->condvar->recv;
}

lib/AnyEvent/Gmail/Feed.pm  view on Meta::CPAN


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) = @_;

lib/AnyEvent/Gmail/Feed.pm  view on Meta::CPAN


AnyEvent::Gmail::Feed - Subscribe to Gmail feed

=head1 SYNOPSIS

  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;

=head1 DESCRIPTION



( run in 0.467 second using v1.01-cache-2.11-cpan-49f99fa48dc )