Your browser is very old. You might enjoy surfing the web more if you used something newer like:

Google Chrome

Even Firefox would be OK.

If you're being forced at gunpoint to use Internet Explorer, you should at least upgrade it. Version 8 is tolerable and 9 will be OK when it comes out.

Posts tagged “google”

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.