diff options
author | Struan Donald <struan@exo.org.uk> | 2011-08-02 16:38:35 +0100 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2011-08-02 16:38:35 +0100 |
commit | 149412d1d4f680a5b7186814db0f1886157bb2d0 (patch) | |
tree | 53bdfb5d1792ff0bf002bc0482b5ccd2a23ae33d /perllib/Open311.pm | |
parent | 8ac0fceb6c34a626d97eab2a667a18550204aef8 (diff) |
add simple open311 test, add some error checking and reduce repeated code
Diffstat (limited to 'perllib/Open311.pm')
-rw-r--r-- | perllib/Open311.pm | 59 |
1 files changed, 43 insertions, 16 deletions
diff --git a/perllib/Open311.pm b/perllib/Open311.pm index 12f3c2433..86a2c58fd 100644 --- a/perllib/Open311.pm +++ b/perllib/Open311.pm @@ -15,10 +15,8 @@ sub get_service_list { my $self = shift; my $service_list_xml = $self->_get( 'services.xml' ); - my $xml = XML::Simple->new(); - my $obj = $xml->XMLin( $service_list_xml ); - return $obj; + return $self->_get_xml_object( $service_list_xml ); } sub get_service_meta_info { @@ -70,14 +68,15 @@ EOT my $response = $self->_post( 'requests.xml', $params ); if ( $response ) { - my $xml = XML::Simple->new(); - my $obj = $xml->XMLin( $response ); - - if ( $obj->{ request }->{ service_request_id } ) { - return $obj->{ request }->{ service_request_id }; - } else { - my $token = $obj->{ request }->{ token }; - return $self->get_service_request_id_from_token( $token ); + my $obj = $self->_get_xml_object( $response ); + + if ( $obj ) { + if ( $obj->{ request }->{ service_request_id } ) { + return $obj->{ request }->{ service_request_id }; + } else { + my $token = $obj->{ request }->{ token }; + return $self->get_service_request_id_from_token( $token ); + } } } } @@ -94,10 +93,9 @@ sub get_service_request_id_from_token { my $service_token_xml = $self->_get( "tokens/$token.xml" ); - my $xml = XML::Simple->new(); - my $obj = $xml->XMLin( $service_token_xml ); + my $obj = $self->_get_xml_object( $service_token_xml ); - if ( $obj->{ request }->{ service_request_id } ) { + if ( $obj && $obj->{ request }->{ service_request_id } ) { return $obj->{ request }->{ service_request_id }; } else { return 0; @@ -126,7 +124,6 @@ sub _post { my $uri = URI->new( $self->endpoint ); $uri->path( $uri->path . $path ); - use Data::Dumper; my $req = POST $uri->as_string, [ jurisdiction_id => $self->jurisdiction, @@ -141,8 +138,38 @@ sub _post { return $res->decoded_content; } else { warn "request failed: " . $res->status_line; - warn $res->decoded_content; + warn $self->_process_error( $res->decoded_content ); return 0; } } + +sub _process_error { + my $self = shift; + my $error = shift; + + my $obj = $self->_get_xml_object( $error ); + + my $msg = ''; + if ( ref $obj && exists $obj->{error} ) { + my $errors = $obj->{error}; + $errors = [ $errors ] if ref $errors ne 'ARRAY'; + $msg .= sprintf( "%s: %s\n", $_->{code}, $_->{description} ) for @{ $errors }; + } + + return $msg || 'unknown error'; +} + +sub _get_xml_object { + my $self = shift; + my $xml= shift; + + my $simple = XML::Simple->new(); + my $obj; + + eval { + $obj = $simple ->XMLin( $xml ); + }; + + return $obj; +} 1; |