NAME

WebService::Beeminder - Access the Beeminder API

VERSION

version 0.003

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 last went dancing on $result->[0]{timestamp} with a comment of " .
    $result->[0]{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(
    goals_filter => 'frontburner', # or 'backburner', or 'all' (default)
    diff_since   => $last_check,   # Seconds from the epoch. Default: 'null'
    skinny       => 1,             # Return slimmed info. Default: 'false'
);

All arguments are optional.

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']
}

If diff_since is specified, then the goals will be a list of hashes, rather than just a simple list of goals.

Note that the associations parameter specified in the API is currently not supported as it results in excessively slow server responses, even when set to 'false'.

datapoints

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

This method returns an array reference of data points for the given goal. At the time of writing, the Beeminder API returns the most recent data point in the first position in the array.

[
    {  
        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 to use 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.