Stylized line drawing of mark playing the flute

Google Client Logins

I'm working on a little PHP app which is going to read data from a Google Spreadsheet document (more on that later).

The first thing I needed was the ability to authenticate against a Google Account which lead me to Authentication for Installed Applications. Pretty straightforward. POST a bunch of variables and, on successful login, get an Auth code back that can be used for future queries.

To that end, I threw together a little class to handle logins. I'm sure it's been done many times before but it was a fun exercise.

class LoginFailedException extends Exception {}class GoogleClientLogin {    public $url;    public $accountType;    public $email;    public $password;    public $service;    public $source;    public static $CALENDAR_SERVICE = 'cl';    public static $SPREADSHEET_SERVICE = 'wise';    private $responseCode;    private $auth;    public function __construct($email, $password, $service, $source, $accountType = 'GOOGLE',                                    $url = 'https://www.google.com/accounts/ClientLogin', $autoLogin = true) {        $this->url = $url;        $this->accountType = $accountType;        $this->email = $email;        $this->password = $password;        $this->service = $service;        $this->source = $source;        if($autoLogin) {            $this->login();        }    }    public function login() {        $postData = array(            'accountType'=>$this->accountType,            'Email'=>$this->email,            'Passwd'=>$this->password,            'service'=>$this->service,            'source'=>$this->source        );        $httprequest = curl_init($this->url);        curl_setopt($httprequest, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($httprequest, CURLOPT_POST, true);        curl_setopt($httprequest, CURLOPT_RETURNTRANSFER, true);        curl_setopt($httprequest, CURLOPT_HEADER, true);        curl_setopt($httprequest, CURLOPT_POSTFIELDS, $postData);        $rawresult = curl_exec($httprequest);        $result = explode("\n", $rawresult);        foreach($result as $line) {            $matches = array();            if( preg_match('/^HTTP.*?\s([0-9]{3})/', $line, $matches) > 0) {                $this->responseCode = $matches[1];                if($this->responseCode != '200') {                    throw new LoginFailedException('The login attempt failed with a response code of ' . $this->responseCode);                }            }            $matches = array();            if( preg_match('/^Auth=(.*?)$/', $line, $matches) > 0) {                $this->auth = $matches[1];            }        }    }    public function getAuth() {        return $this->auth;    }    public function getResponseCode() {        return $this->responseCode;    }}

And here's how you use it

try {    $login = new GoogleClientLogin( '[username]@gmail.com', '[password]', GoogleClientLogin::$SPREADSHEET_SERVICE, '[identifier]');    echo $login->getAuth();    echo $login->getResponseCode();}catch(LoginFailedException $e) {    echo 'Login Failed:  ' . $e->getMessage();}catch(Exception $e) {    echo 'Error occurred:  ' . $e->getMessage();}

<identifier> is just some string that identifies your app, presumably so Google can cut down on abuse.