NAME
WebService::Buxfer - Interact with the Buxfer webservice
SYNOPSIS
use strict;
use warnings;
use WebService::Buxfer;
my $bux = WebService::Buxfer->new(
{
userid => 'nheinrichs', # Required
password => 'my password', # Required
preload_accounts => 1, # Default
inject_account_name => 1, # Default
debug => 0, # Default
url => 'https://www.buxfer.com/api', # Default
}
);
my $results = $bux->transactions;
print "Transaction: ".Dumper($_)."\n" for (@$results);
my $new_transactions = [
'coffee 5.45 tags:drinks,coffee', # Raw, Buxfer SMS format
'Pay check +6952.32 status:pending', # Raw, Buxfer SMS format
{ # As a hashref
description => 'Thai food with friends',
amount => -3000,
payer => 'me',
tags => ['sustenance, 'thai food'],
account => 'cash',
date => '2009-01-03',
status => 'default',
participants => [ [andy, 1000], elena ],
},
];
my @responses = $bux->add_transactions($new_transactions);
print "Response: ".($_->buxfer_status)."\n" for (@responses);
DESCRIPTION
Buxfer is an online personal finance site: http://www.buxfer.com
WebService::Buxfer provides access to the Buxfer webservices API.
ACCESSORS
preload_accounts - Whether to prefetch account details on login
inject_account_name - Whether to automatically inject an 'accountName' field into results that contain an internal Buxfer 'accountId' field.
debug - Enable debug output
url - The URL of the Buxfer API server. You probably don't need to change this.
_response - The WebService::Buxfer::Response object from the last call
_token - The value of the authentication token received from Buxfer
METHODS
new( \%options )
Build a new WebService::Buxfer instance.
GET methods
transactions(\%params), analysis(\%params)
Retrieve transactions (25 at a time.)
Results can be restricted using the following parameters (see Buxfer API documentation for details):
accountId OR accountName
tagId OR tagName
startDate AND endDate OR month: date can be specified as "10 feb 2008", or "2008-02-10". month can be specified as "feb08", "feb 08", or "feb 2008".
budgetId OR budgetName
contactId OR contactName
groupId OR groupName
page - the page of results you want to see (
transactions
only)
NOTE: On any given day the format of the 'date' field in the transactions seems to change (sometimes I get '3 Jan' and sometimes '3 Jan 08'.)
This package makes no attempt to format or inflate dates or any other information returned from the API.
analysts(\%params)
Get Analysis graph URLs and rawData.
Takes the same parameters as transactions
.
Returns a hashref of Analysis information.
accounts()
Retrieve Buxfer accounts.
In array context returns an array of hashrefs containing account details.
In scalar context returns a hashref of account details keyed on the internal Buxfer accountId.
i.e., { $accountId => { name => 'cash', ... }, ... }
impacts, tags, budgets, groups, contacts
Calls the given Buxfer API. See Buxfer docs for details.
In array context returns an array of results.
In scalar context returns a reference to the array of results.
POST methods
add_transactions(\@transactions, \%params)
Accepts an array of transactions in raw format or as hashrefs and submits them to Buxfer using the add_transaction
API call.
Because the Buxfer API allows for submission of multiple transactions in a single API call, this method will combine transactions into batches based on the max_transactions_per_submit
parameter prior to submission.
WebService::Buxfer will also wrap tags containing spaces in single quotes. HOWEVER, the quotes themselves will also end up as part of the tag.
This is the fault of Buxfer's parser: if the single quotes are omitted, the system will fail to parse/import the transaction properly.
Parameters:
max_transactions_per_submit - I was able to submit 1000 transactions in a single call, so that is the default.
format - Currently only 'sms' is supported
In array context returns an array of responses.
In scalar context returns a reference to the responses array.
SEE ALSO
Buxfer - http://www.buxfer.com
Buxfer API Documentation - https://www.buxfer.com/api
TODO
Move some of the logic out of here and into WebService::Buxfer::Response.
Add a pager for flipping through transactions based on 25 results per page and numTransactions in the response.
Automatically in/deflate DateTime objects
ACKNOWLEDGEMENTS
Portions of this package borrowed/adapted from the WebService::Solr code.
Thanks to Brian Cassidy and Kirk Beers for that package.
AUTHORS
Nathaniel Heinrichs <nheinric@cpan.org>
COPYRIGHT AND LICENSE
Copyright (c) 2009 Nathaniel Heinrichs.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.