Facebook-OpenGraph
view release on metacpan or search on metacpan
lib/Facebook/OpenGraph/Response.pm view on Meta::CPAN
}
$ref;
};
return $self->{header}->{$key};
}
sub is_success {
my $self = shift;
# code 2XX or 304
# 304 is returned when you use ETag and the data is not changed
return substr($self->code, 0, 1) == 2 || $self->code == 304;
}
# Using the Graph API > Handling Errors
# https://developers.facebook.com/docs/graph-api/using-graph-api/
sub error_string {
my $self = shift;
# When an error occurs, the response should be given in a form below:
#{
# "error": {
# "message": "Message describing the error",
# "type": "OAuthException",
# "code": 190,
# "error_subcode": 460,
# "error_user_title": "A title",
# "error_user_msg": "A message",
# "fbtrace_id": "EJplcsCHuLu"
# }
#}
my $error = eval { $self->as_hashref->{error}; };
my $err_str = q{};
if ($@ || !$error) {
$err_str = $self->message;
}
else {
# sometimes error_subcode is not given
$err_str = sprintf(
qq{%s:%s\t%s:%s\t%s\t%s:%s},
$error->{code},
$error->{error_subcode} || '-',
$error->{type},
$error->{message},
$error->{fbtrace_id},
$error->{error_user_title} || '-',
$error->{error_user_msg} || '-',
);
}
return $err_str;
}
sub as_json {
my $self = shift;
my $content = $self->content;
if ($content =~ m{\A (true|false) \z}xms) {
# On v2.0 and older version, some endpoints return plain text saying
# 'true' or 'false' to indicate result, so make it JSON formatted for
# our convinience. The key is named "success" so its format matches with
# other endpoints that return {"success": "(true|false)"}.
# From v2.1 they always return in form of {"success": "(true|false)"}.
# See https://developers.facebook.com/docs/apps/changelog#v2_1_changes
$content = sprintf('{"success" : "%s"}', $1);
};
return $content; # content is JSON formatted
}
sub as_hashref {
my $self = shift;
# just in case content is not properly formatted
my $hash_ref = eval { $self->json->decode( $self->as_json ); };
croak $@ if $@;
return $hash_ref;
}
# Indicates whether the data is modified.
# It should be used when you request with ETag.
# https://developers.facebook.com/docs/reference/ads-api/etags-reference/
sub is_modified {
my $self = shift;
my $not_modified = $self->code == 304 && $self->message eq 'Not Modified';
return !$not_modified;
}
1;
__END__
=head1 NAME
Facebook::OpenGraph::Response - Response object for Facebook::OpenGraph.
=head1 SYNOPSIS
my $res = Facebook::OpenGraph::Response->new(+{
code => $http_status_code,
message => $http_status_message,
headers => $response_headers,
content => $response_content,
req_headers => $req_headers,
req_content => $req_content,
json => JSON->new->utf8,
});
=head1 DESCRIPTION
This handles response object for Facebook::OpenGraph.
=head1 METHODS
=head2 Class Methods
=head3 C<< Facebook::OpenGraph::Response->new(\%args) >>
Creates and returns a new Facebook::OpenGraph::Response object.
I<%args> can contain...
=over 4
( run in 0.696 second using v1.01-cache-2.11-cpan-39bf76dae61 )