package WWW::Foursquare::Response;
use strict;
use warnings;
use JSON;
our %ERROR_TYPE = (
invalid_auth => 'OAuth token was not provided or was invalid',
param_error => 'A required parameter was missing or a parameter was malformed. This is also used if the resource ID in the path is incorrect',
endpoint_error => 'The requested path does not exist',
not_authorized => 'Although authentication succeeded, the acting user is not allowed to see this information due to privacy restrictions',
rate_limit_exceeded => 'Rate limit for this hour exceeded',
deprecated => 'Something about this request is using deprecated functionality, or the response format may be about to change',
server_error => 'erver is currently experiencing issues. Check status.foursquare.com for updates',
other => 'Some other type of error occurred',
unknown => 'Unknown error',
);
sub new {
my ($class, $params) = @_;
my $self = {};
bless $self, $class;
return $self;
}
sub process {
my ($self, $res) = @_;
my $data = decode_json($res->content());
my $code = $res->code();
# response is OK
return $data->{response} if $code == 200;
# need error handling
my $error_type = $data->{meta}->{errorType} || 'unkwown';
my $error_desc = $ERROR_TYPE{$error_type} || $data->{meta}->{errorDetail} || 'no details';
my $error_text = sprintf "%s %s", $error_type, $error_desc;
# raise exception
die $error_text;
}
1;