Google Data API Protocol – Client Login con PHP 5
Google Data Protocol è un protocollo che deriva da REST ed il suo scopo è quello di interfacciare applicazioni di terze parti con gli applicativi Google.
Generalmente tutti i servizi Google prevedono la registrazione di un account (sebbene sia unificato). Per cui, va da se che la prima cosa che dobbiamo imparare a fare è utilizzare la API che permette di effettuare l’autenticazione.
Le Google Accounts APIs sono proprio l’oggetto di questo articolo, nello specifico vedremo come implementare in PHP 5 la API ClientLogin for Installed Applications.
Con questa tecnica possiamo effettuare l’autenticazione in maniera trasparente e direttamente da codice con una semplice transazione HTTP POST.
Lo schema che segue spiega visivamente come avviene la transazione:
La transazione è molto semplice, ed in PHP 5 possiamo utilizzare il bouquet di funzione cUrl per poter effettuare la transazione.
I valori da inviare sono la username, la password, il servizio Google al quale si vuole accedere ed il nome del nostro software.
La transazione risponderà in maniera più o meno simile a seconda del servizio al quale stiamo accedendo. Quello che c’è sempre in comune è il token Auth che è una stringa molto lunga e va utilizzata in tutte le transazioni successive: serve a riconoscerci.
La transazione potrebbe anche richiederci di rispondere ad un test Captcha. Praticamente viene inviata nella risposta una url che punta ad una immagine. Quest’ultima va visualizzata e l’utente utilizzatore deve inserire i caratteri che vede. Successivamente va rifatta la procedura di login, con i valori elencati prima più altri due: logintoken e logincaptcha; il primo è una stringa inviata contestualmente all’invio della url dell’immagine del captcha, la seconda altro non è che i caratteri inseriti dall’utilizzatori.
Dopo questa breve spiegazione (sul sito ufficiale c’è tutto!), passiamo al codice:
Molto semplice, non credo di dover spendere parole alla spiegazione del codice. Come action (variabile $action) va inserito quello che di volta in volta è la pagine al quale va inviata l’autenticazione. In generale si inviano a “https://www.google.com/accounts/ClientLogin”, tuttavia ci sono delle eccezioni, come ad esempio nel caso di YouTube, che prevede che la transazione venga inviata a “https://www.google.com/youtube/accounts/ClientLogin”.
















Ciao, ho visto il bell’articolo di ottimo utilizzo. Volevo avere un piccolo consiglio, perché sto facendo difficoltà ad adattarmi a queste API, avevo programmato con le API di Facebook e Facebook Connect e non ho mai avuto problemi (o cmq piccoli).
L’obiettivo: mostrare un blog (blogger/blogspot) con funzionalità avanzate.
Azioni:
1) Mi collego con l’account di Blogger principale e carico i feed. (Basta l’xml/ATOM prelevabile dall’url o devo fare il login attraverso GData di Zend)???
2) Se volessi far iscrivere o semplicemente loggare qualche altro utente oltre all’account principale? Dovrei effettuare un secondo login solo per i commenti o per sfruttare altre API di google?
3) In tutto questo, in Facebook c’è la possibilità di prelevare dati quali “nome”, “cognome”, “immagine del profilo”, etc etc. Qui con le API di google è possibile? Come faccio a riconoscere uno stesso utente a distanza di una settimana, ad esempio?
ps: se sai consigliarmi qualche link con qualche esempio come il tuo te ne sarei grato. Grazie.. Ciao.
Giorgio Tedesco.
@GiorgioTedesco
Grazie per aver visitato il mio blog!
Purtroppo in rete non ho trovato nulla di ben fatto.
Quello che ho fatto io è stato studiarmi le GDATA APIs dal loro sito http://code.google.com/intl/it/apis/gdata/ e poi mi sono scritto delle classi in PHP 5.
Quello che tu vuoi fare è fattibile, ci sono le interfacce adatte, come quella che ho illustrato in questo articolo, che permettono di loggare qualsiasi utente, e se lo gestisci come un oggetto, puoi loggare anche più di un utente contemporaneamente.
Vedo che utilizzi le ZF, nel package GDATA dovrebbe esserci l’interfaccia per fare questo, tuttavia non ti so dire di preciso quale; per quanto sia un Zender, non ritengo lo ZF molto utile, talvolta è molto più macchinoso del normale, quindi generalmente mi genero le classi da solo.