WebService::TWFY::API - API interface for TheyWorkForYou.com


WebService-TWFY-API documentation Contained in the WebService-TWFY-API distribution.

Index


Code Index:

NAME

Top

WebService::TWFY::API - API interface for TheyWorkForYou.com

VERSION

Top

Version 0.04

SYNOPSIS

Top

  use WebService::TWFY::API ;

  my $rh = { key => 'ABC123' }; 
  my $api = WebService::TWFY::API->new( $rh ) ;

  my $rv = $api->query ( 'getConstituency', { 'postcode' => 'W128JL'
                                              'output'   => 'xml',
                                             } ) ;

  if ($rv->{is_success}) {

    my $results = $rv->{results} ;
    ### do whatever with results

  }

DESCRIPTION

Top

This module provides a simple interface to the API of TheyWorkForYou.com.

The actual core class, WebService::TWFY::API is a subsclass of LWP::UserAgent so you are able to tweak all the normal options such as timeout etc. The UserAgent identifier however is hardcoded to "WebService::TWFY::API module". This does not provide any personal information to the API. However, it helps them track and monitor usage of the API service from this module.

METHODS

Top

new

The following constructor method creates WebService::TWFY::API object and returns it.

  my $rh = { key => 'ABC123' };

  my $api = WebService::TWFY::API->new( $rh ) ;

The API now requires a key, you can obtain one at http://www.theyworkforyou.com/api/key. The key above will not work, its only used as an example.

In future versions, if needed, it will support specifying the version of the API you wish to use.

execute_query

Internal function which executes a request and blesses the response into a WebService::TWFY::Response object.

query

Creates a new WebService::TWFY::Request request object and executes it with the parameters specified.

  my $rv = $api->query ( 'getConstituency', { 'postcode' => 'W128JL'
                                              'output'   => 'xml',
                                             } ) ;

  or

  my $rv = $api->query ( 'getMP', { 'postcode' => 'W128JL'
                                    'output'   => 'js',
                                  } ) ; 




  abstract :

  my $rv = $api->query ( function, { parameter1 => value, 
                                     parameter2 => value,
                                     ...  
                                   } ) ;

For a complete list of functions supported by the API, visit http://www.theyworkforyou.com/api. Current output methods supported at the moment are XML (xml), JS (js), php (php) and RPC over Anything But XML (rabx). This essentially returns a WebService::TWFY::Response object, which is a HTTP::Response subclass with some additional keys in place:

* is_success : 0 or 1
* results : results returned from the API
* error_code : the error code (if any)
* error_message : the error message (if any)

SUPPORT

Top

Please feel free to send any bug reports and suggestions to my email listed below.

For more information and useless facts on my life, you can also check my blog:

  http://idaru.blogspot.com/




AUTHOR

Top

    Spiros Denaxas
    CPAN ID: SDEN
    Lokku Ltd
    s [dot] denaxas [@] gmail [dot]com
    http://idaru.blogspot.com

COPYRIGHT

Top

SEE ALSO

Top

WebService::TWFY::Request, WebService::TWFY::Response, http://www.theyworkforyou.com/api/, http://www.theyworkforyou.com/


WebService-TWFY-API documentation Contained in the WebService-TWFY-API distribution.
package WebService::TWFY::API;

use strict;
use warnings ;

use WebService::TWFY::Request ;
use WebService::TWFY::Response ;

use LWP::UserAgent ;

our @ISA = qw( LWP::UserAgent ) ;
our $VERSION = 0.04 ;

sub new {
    my $class = shift ;
    my $rh    = shift;
    
    unless ( defined $rh->{key} ) {
       die "The API requires a key. You can obtain one at http://www.theyworkforyou.com/api/key";
    }
    
    # Please do not change the following user agent parameter.
    # It does not provide TheyWorkForYou.com with any personal information
    # but however helps them track usage of this CPAN module.
    
    my %options = ( 'agent' => 'WebService::TWFY::API module' ) ;
    
    my $self = new LWP::UserAgent( %options ) ;
    
    bless $self, $class ;
    
    $self->{'_api_key'} = $rh->{'key'};
    
    return $self ;
}


sub query {
  my ( $self, $function, $rh_args ) = (@_) ;
  
  return unless ( (defined $function) and (defined $rh_args) ) ;
  return unless ref $rh_args eq 'HASH' ;
  
  $rh_args->{key} = $self->{_api_key};
  
  my $query = new WebService::TWFY::Request ( $function, $rh_args ) ;
  
  if ( defined $query ) {
    $self->execute_query($query) ;
  } else {
    return ;
  }

}

sub execute_query {
  my ($self, $query) = (@_) ;
  
  my $url = $query->encode_arguments() ;
  my $response = $self->get($url) ;
  
  bless $response, 'WebService::TWFY::Response' ;
  
  unless ($response->{_rc} = 200) {
  	  $response->set_fail(0, "API returned a non-200 status code: ($response->{_rc})") ;
  		return $response ;
    } ;
  
  unless ($response->{_msg} eq 'OK') {
    $response->set_fail(0, "An API error has occured: $response->{_msg}") ;
    return $response ;
  }
  
  my $results = $response->{_content} ;
  $response->set_success($results) ;
  
  return $response ;
  
}

1;