AnyEvent-Plurk

 view release on metacpan or  search on metacpan

lib/AnyEvent/Plurk.pm  view on Meta::CPAN

   my $class = ref($this) || $this;
   my $self  = $class->SUPER::new(@_);

   unless (defined $self->{api_key}) {
      croak "no 'api_key' given to AnyEvent::Plurk\n";
   }

   unless (defined $self->{username}) {
      croak "no 'username' given to AnyEvent::Plurk\n";
   }

   unless (defined $self->{password}) {
      croak "no 'password' given to AnyEvent::Plurk\n";
   }

   $self->{__cookie_jar} = {};
   return $self
}

sub login {
    my $self = shift;
    my $cb   = shift;

    $self->send_request(
        "Users/login", {
            username => $self->{username},
            password => $self->{password}
        }
    )
}

sub _start_polling {
    my $self = shift;
    $self->{__polling_time_offset} ||= current_time_offset;

    $self->send_request(
        "Polling/getPlurks",
        {
            offset => $self->{__polling_time_offset}
        },
        sub {
            my ($data, $header) = @_;

            if ($header->{Status} == 400) {
                # say $data;
            }
            else {
                $data = from_json($data);
                my $unread_plurks = $data->{plurks};
                if (@$unread_plurks) {
                    my $users = $data->{plurk_users};
                    for my $pu (@$unread_plurks) {
                        $pu->{owner} = $users->{$pu->{owner_id}} if $users->{$pu->{owner_id}};
                    }

                    $self->event("unread_plurks" => $unread_plurks);
                    $self->{__polling_time_offset} = current_time_offset;
                }
            }

            $self->{__polling_timer} = AE::timer 60, 0, sub {
                undef $self->{__polling_timer};
                $self->_start_polling;
            }
        }
    );
}

sub start {
    my $self = shift;

    $self->login;
    $self->_start_polling;
}

sub add_plurk {
    my $self    = shift;
    my $content = shift;

    $self->send_request("Timeline/plurkAdd", {qualifier => ":", content => $content});
}

sub delete_plurk {
    my $self = shift;
    my $id   = shift;

    $self->send_request("Timeline/plurkDelete", {plurk_id => $id});
}


1;

__END__

=head1 NAME

AnyEvent::Plurk - plurk interface for AnyEvent-based programs

=head1 SYNOPSIS

    my $p = AnyEvent::Plurk->new(
        username => $username,
        password => $password
    );
    $p->reg_cb(
        unread_plurks => sub {
            my ($p, $plurks) = @_;
            is(ref($plurks), "ARRAY", "Received latest plurks");
        }
    );

    my $v = AE::cv;
    $p->start;
    $v->recv;

=head1 METHODS

=over 4

=item reg_cb( x => $cb, ...)

Register a callback for event x. See below for the list of events.



( run in 1.348 second using v1.01-cache-2.11-cpan-39bf76dae61 )