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 )