NAME

WebService::Beeminder - Access the Beeminder API

VERSION

version 0.002

SYNOPSIS

my $bee = WebService::Beeminder->new( token => $token );

# I flossed my teeth today.
$bee->add_datapoint( goal => 'floss', value => 1 );

# When did I last take dance lessons?
my $result = $bee->datapoints('dance');

say "I danced $result->[-1]{timestamp} seconds from the epoch at " .
    $result->[-1]{comment};

DESCRIPTION

This is a thin-ish wrapper around the Beeminder API. All results are exactly what's returned by the underlying API, with the JSON being converted into Perl data structures.

You need a Beeminder API token to use this module. The easiest way to get a personal token is just to login to Beeminder and then go to https://www.beeminder.com/api/v1/auth_token.json. Copy'n'paste the token into your code (or a config file your code uses), and you're good to go!

More information on tokens is available in the Beeminder API documentation.

METHODS

user

my $result = $bee->user();

Obtains information about the current user. This returns a user resource (as defined by the Beeminder API), which looks like this:

{
    username   => "alice",
    timezone   => "America/Los_Angeles",
    updated_at => 1343449880,                       
    goals      =>  ['gmailzero', 'weight']
}

Note: Presently only basic parameters are returned, even though the beeminder API supports additional filters.

datapoints

my $results = $bee->datapoints($goal);

This method returns an array reference of data points for the given goal:

[
    {  
        id         => 'abc123'
        timestamp  => 1234567890,
        value      => 1.1,
        comment    => "Frobnicated a widget",
        updated_at => 1234567890
    },
    {
        id         => 'abc124'
        timestamp  => 1234567891,
        value      => 1.2,
        comment    => "Straightened my doohickies",
        updated_at => 1234567891
    },
]

add_datapoint

my $point = $bee->add_datapoint(
    goal      => 'floss',
    timestamp => time(),        # Optional, defaults to now
    value     => 1,
    comment   => 'Floss every tooth for great justice!',
    sendmail  => 0,             # Optional, defaults to false
);

Adds a data-point to the given goal. Mail will be sent to the user if the sendmail parameter is true.

Returns the data-point that was created:

{
    id         => 'abc125'
    timestamp  => 1234567892,
    value      => 1,
    comment    => 'Floss every tooth for great justice!'
    updated_at => 1234567892
}

goal

my $results = $bee->goal('floss', datapoints => 0);

Returns information about a goal. The optional datapoints parameter can be supplied with a true value to also fetch datapoints for that goal.

Goal objects are complex data structures, and are described in the Beeminder API documentation.

INSTALLATION

This module presently uses MooseX::Method::Signatures. If you're not experienced in installing module dependencies, it's recommend you use APP::cpanminus, which doesn't require any special privileges or software.

Perl v5.10.0 or later is required for this module.

SEE ALSO

AUTHOR

Paul Fenwick <pjf@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Paul Fenwick.

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