Rapleaf Address Book API in Perl
It accesses the Rapleaf API Web server and executes a request to retrieve the contact list of a given user of either Gmail, Yahoo, Hotmail and AOL.
Returns an associative array with the contacts names and e-mail addresses, as well the HTTP response status and any errors.
1 2 package Rapleaf; 3 use strict; 4 5 use LWP::UserAgent; 6 use HTTP::Request; 7 use XML::Simple; 8 9 sub getData { 10 my ($email, $pass, $api_key, $url) = @_; 11 my $post_data = "login=$email&password=$pass"; 12 13 $url ||= 'http://api.rapleaf.com/v2/abook'; 14 my $agent = LWP::UserAgent->new(); 15 my $request = HTTP::Request->new(POST => $url); 16 $request->content($post_data); 17 $request->header( 'Authorization' => $api_key ); 18 my $response; 19 $response = $agent->request($request); 20 my %result; 21 if($response->code == 200) { 22 my $xml = new XML::Simple; 23 %result = %{$xml->XMLin($response->content)}; 24 25 # if a single contact if found, XMLin returns a result set of a different format, therefore we need to manually format it 26 if ($result{'contact'}->{'name'}) { 27 $result{'contact'}->{$result{'contact'}->{'name'}} 28 = {'email'=>$result{'contact'}->{'email'}}; 29 delete $result{'contact'}->{'name'}; 30 delete $result{'contact'}->{'email'}; 31 } 32 } elsif ($response->code == 400) { 33 $result{'error'} = 'The request did not contain all required parameters: '.$response; 34 } elsif ($response->code == 401) { 35 $result{'error'} = 'API key was not provided or is invalid.'; 36 } elsif ($response->code == 420) { 37 $result{'error'} = 'Login failed.'; 38 } elsif ($response->code == 500) { 39 $result{'error'} = 'There was an unexpected error on our server. This should be very rare and if you see it please contact developer@rapleaf.com.'; 40 } elsif ($response->code == 520) { 41 $result{'error'} = 'There was an error while reading the contacts from the address book.'; 42 } 43 44 $result{'status'} = $response->code; 45 return \%result; 46 } 47 48 1; 49