|
NAMEWebService::GData::ClientLogin - implements ClientLogin authorization for google data related APIs v2.SYNOPSIS#you will want to use a service instead such as WebService::GData::YouTube; use WebService::GData::Base; use WebService::GData::ClientLogin; #create an object that only has read access my $base = new WebService::GData::Base(); my $auth; eval { $auth = new WebService::GData::ClientLogin( email => '...', password => '...', service => '...', #default to youtube, source => '...' #default to WebService::GData::ClientLogin-$VERSION, type => '...' #default to HOSTED_OR_GOOGLE ); }; if(my $error = $@){ #$error->code,$error->content... } if($auth->captcha_url){ #display the image and get the answer from the user #then try to login again } #everything is fine... #give write access to the above user... $base->auth($auth); #now you can... (url are here for examples!) #create a new entry with application/x-www-form-urlencoded content-type my $ret = $base->post('http://gdata.youtube.com/feeds/api/users/default/playlists',$content); #if it fails a first time, you will need to add captcha related parameters: my $auth; eval { $auth = new WebService::GData::ClientLogin( email => '...', password => '...', captcha_token => '...', captcha_answer => '...' ); }; #youtube specific developer key my $auth; eval { $auth = new WebService::GData::ClientLogin( email => '...', password => '...', key => '...', ); }; DESCRIPTIONinherits from WebService::GDataGoogle services supports different authorization systems allowing you to write data programmaticly. ClientLogin is one of such system. This package tries to get an authorization key to the service specified by logging in with the user account information: email and password. If the loggin succeeds, the authorization key generated grants you access to write actions as long as you pass the key with each requests. ClientLogin authorization key does expire but the expire time is set on a per service basis. You should use this authorization system for installed applications. Web application should use the OAuth (to be implemented) or AuthSub (will be deprecated and will not be implemented) authorization systems. The connection is done via ssl, therefore you should install Crypt::SSLeay before using this module or an error code: 'missing_ssl_module' will be thrown. More information about ClientLogin can be found here: <http://code.google.com/intl/en/apis/accounts/docs/AuthForInstalledApps.html> Some problems can be encountered if your account is not directly linked to a Google Account. Please see <http://apiblog.youtube.com/2011/03/clientlogin-fail.html>. CONSTRUCTORnewCreate an instance by passing an hash.
Parameters
Returns
Throws
Example: use WebService::GData::Base; use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...', captcha_token => '...', captcha_answer => '...' ); my $base = new WebService::GData::YouTube(auth=>$auth); CONSTRUCTOR GETTER METHODSAll these methods allows you to get access to the data you passed to the constructor or to the data you got back from the server.Get the email address set to log in.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...' ); $auth->email; password Get the password set to log in.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...' ); $auth->password; source Get the source set to log in.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...' ); $auth->source;#by default WebService::GData::ClientLogin-$VERSION service Get the service set to log in.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...' ); $auth->service;#by default youtube type Get the account type set to log in.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...' ); $auth->service;#by default HOSTED_OR_GOOGLE key The key is required by the youtube service to identify
the application making the request. You must handle this in the developer
dashboard:<http://code.google.com/apis/youtube/dashboard/>.
See also <http://code.google.com/intl/en/apis/youtube/2.0/developers_guide_protocol.html#Developer_Key>. Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...', key => '...' ); $auth->key; CAPTCHA GETTER METHODSThe following getters are used in case of failure to connect leading in an error response from the service requiring to proove that you are a human (or at least seem to...). The reason for this error to arrive could be several errors to log in in a short interval of time.captcha_token Get the captcha token sent back by the server after a
failure to connect leading to a CaptchaRequired error message.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...' ); $auth->captcha_token;#by default nothing, so if you have something, you did not succeed in logging in. captcha_url Get the captcha token sent back by the server after a
failure to connect leading to a CaptchaRequired error message. This url links
to an image containing the challenge.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...', ); my $url = $auth->captcha_url;#by default nothing, so if you have something, you did not succeed in logging in. #you could do: print qq[<img src="$url"/>]; #display a message to decrypt... captcha_answer Get the answer from the user after he/she was presented
with the captcha image (link in captcha_url). You set this parameter in the
constructor.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...' ); my $url = $auth->captcha_url;#by default nothing, so if you have something, you did not succeed in logging in. #you could do: print qq[<img src="$url"/>]; #display a message to decrypt... print q[<input type="text" name="captcha_answer" value=""/>];#let the user enters the message displayed authorization_key Get the authorization key sent back by the server in case
of success to log in. This will be the key you put in the Authorization header
to each protect content that you want to request. This is handled by each
service and should be transparent to the end user of the library.
Parameters
Returns
Example: use WebService::GData::ClientLogin; my $auth = new WebService::GData::ClientLogin( email => '...', password => '...' ); my $url = $auth->authorization_key;#by default nothing, so if you have something, you did succeed in logging in. HANDLING ERROR/CAPTCHAGoogle data APIs relies on querying remote urls on particular services. All queries that fail will throw (die) a WebService::GData::Error object. The error instance will contain the error code as a string in code() and the full error string in "content()".The CaptchaRequired code return by the service does not throw an error though as you can recover by a captcha. Below is an example of how to implement the logic for a captcha in a web context. (WARNING:shall not be used in a web context though but easy to grasp!) Example: use WebService::GData::Constants qw(:errors); use WebService::GData::ClientLogin; my $auth; eval { $auth = new WebService::GData::ClientLogin( email => '...',#from the user password =>'...',#from the user service =>'youtube', source =>'MyCompany-MyApp-2' ); }; if(my $error = $@) { #something went wrong, display some info to the user #$error->code,$error->content if($error->code eq BAD_AUTHENTICATION){ #display a message to the user... } } #else it seems ok but... #check to see if got back a captcha_url if($auth->captcha_url){ #ok, so there was something wrong, we'll try again. my $img = $auth->captcha_url; my $key = $auth->captcha_token; #here an html form as an example #(WARNING:shall not be used in a web context but easy to grasp!) print q[<form action="/cgi-bin/...mycaptcha.cgi" method="POST">]; print qq[<input type="hidden" value="$key" name="captcha_token"/>]; print qq[<input type="text" value="" name="email"/>]; print qq[<input type="text" value="" name="password"/>]; print qq[<img src="$img" />]; print qq[<input type="text" value="" name="captcha_answer"/>]; #submit button here } #once the form is submitted, in your mycaptcha.cgi program: my $auth; eval { $auth = new WebService::GData::ClientLogin( email => '...',#from the user password =>'...',#from the user service =>'youtube', source =>'MyCompany-MyApp-2', captcha_token => '...',#from the above form captcha_answer => '...'#from the user ); }; ##error checking again:lather,rinse,repeat... DEPENDENCIESLWPCrypt::SSLeay BUGS AND LIMITATIONSIf you do me the favor to _use_ this module and find a bug, please email me i will try to do my best to fix it (patches welcome)!AUTHORshiriru <shirirulestheworld[arobas]gmail.com>LICENSE AND COPYRIGHTThis library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.POD ERRORSHey! The above document had some coding errors, which are explained below:
Visit the GSP FreeBSD Man Page Interface. |