Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Google Drive e PHP: come integrarli

Come integrare i servizi di Google Drive in un'applicazione PHP: logica di programmazione ed esempio d'uso
Come integrare i servizi di Google Drive in un'applicazione PHP: logica di programmazione ed esempio d'uso
Link copiato negli appunti

Cos’è Google Drive

Google Drive (o semplicemente GDrive) è il nome di una piattaforma basata sul Cloud Computing e messa a disposizione dal gruppo di Mountain View per l’archiviazione e la condivisione di contenuti attraverso la rete.

Il servizio, che di base fornisce gratuitamente 5 Gb per l’allocazione a tutti i possessori di un Google account, è dotato di funzionalità per la sincronizzazione grazie alle quali sarà sempre possibile disporre dei propri documenti, indipendentemente dal dispositivo utilizzato, dal sistema operativo di riferimento e dalla propria sede di lavoro.

Essendo Google Drive associato a delle API (Application Programming Interface), gli sviluppatori avranno la possibilità di realizzare software basati su vari linguaggi in grado di interagire con i contenuti da esso gestiti.

In questa trattazione sarà affrontato il discorso relativo alla creazione di applicazioni PHP per la manipolazione di documenti archiviati tramite tale servizio.

Registrazione dell’applicazione e attivazione delle API

La prima operazione da compiere per la creazione di un’applicazione in grado di interagire con Google Drive, sarà quella di effettuare la registrazione di un API project nella Google APIs console; tale procedura consentirà di entrare in comunicazione con le interfacce per la programmazione messe a disposizione oltre i limiti imposti dall'accesso anonimo, di monitorare l’utilizzo delle API e di controllare l’accesso ad esse nonché di condividere la gestione delle API all'interno di uno staff.

Una volta effettuata l’autenticazione al proprio account su Google, sarà possibile recarsi sulla pagina per la creazione dei progetti, “Google apis”; l’utilizzatore potrà così cliccare sul pulsante Create project situato all’interno del box riprodotto dall’immagine seguente:

Creazione di un API project

La piattaforma proporrà un elenco completo delle interfacce disponibili, di ognuna di esse verranno riportate le informazioni relative allo stato (“off” quando inattive, “on” se attivate e “Request access...” quando è necessario formulare una richiesta specifica per l’accesso), al limite massimo (Courtesy limit) di chiamate quotidiane consentite per il servizio e, eventualmente, al prezzo per il loro utilizzo.

Nel caso specifico, le API da utilizzare saranno quelle denominate Drive API e Drive SDK (una delle poche a non prevedere un massimale per le richieste d’interazione) che, come impostazione predefinita, sono disabilitate:

API per l'interazione con Google Drive

Per attivare le API sarà necessario clickare sul pulsante associato a ciascuna voce presente nella colonna denominata Status; il sistema chiederà di accettare i termini di servizio per poter utilizzare le interfacce, fatto questo esse risulteranno attive:

Attivazione delle API per l'interazione con Google Drive

Perché un’applicazione possa interagire con le API di Mountain View, sarà necessario che queste siano in grado di autenticarsi al servizio attraverso una procedura che verrà descritta nel paragrafo successivo; per ora, basti sapere le l’applicazione creata in questa trattazione interagirà essenzialmente con l’interfaccia Drive API, Drive SDK è invece un kit di strumenti che potrà essere utilizzato da chi desidera integrare applicazioni in Google Drive.

Autenticazione delle applicazioni su Google Drive

L’accesso anonimo alle API di Google prevede la possibilità di effettuare soltanto un numero limitato di richieste, per questo motivo, clickando sulla voce “API access” del menù verticale posto sulla sinistra della sezione API project di Google apis, si avrà la possibilità di accedere alle credenziali utilizzabili per l’autenticazione delle applicazioni alle API; nello specifico, il sistema prevede due differenti modalità di autorizzazione: la prima è denominata Simple API Access e prevede l’utilizzo di API keys che consentano di identificare un progetto quando non vi è la necessità di accedere a dati utente.

API Keys per l'identificazione di un API project

Il livello di autenticazione più avanzato prende invece il nome di Authorized API Access, esso si basa sul protocollo OAuth (specifiche 2.0) che consente d’interagire con dati protetti tramite dispositivi virtuali, detti tokens, passati come parametri alle API messe a disposizione da un Service Provider quale Google.

L’utilizzo di OAuth prevede la generazione di un identificatore univoco detto client ID che si potrà ottenere cliccando sul pulsante Create an OAuth 2.0 client ID...

Authorized API Access

Il sistema permetterà così di accedere ad un modulo che richiederà la definizione dei dati riguardanti il progetto (Branding Information), come il nome e il logo ad esso associati, questi parametri verranno mostrati all'utente ogni qual volta vi sarà una richiesta di accesso alle loro informazioni riservate tramite il client ID:

inserimento delle Branding Informations

Inseriti i dati richiesti, si potrà clickare su Next e passare alla fase vera e propria di generazione del client ID, il nuovo modulo permetterà di definire il tipo di applicazione relativa al progetto e, nel caso specifico, dovrà essere spuntato il radio button associato alla voce Installed application; la procedura per la creazione delle Installed applications è praticamente la medesima rispetto a quella prevista per le “Web applications” ma più rapida, si faccia soltanto attenzione a scegliere la voce Other nella sezione di menù denominata Installed application type.

Fatto questo, si potrà terminare la fase corrente utilizzando il pulsante Create client ID:

creazione del Client ID

A questo punto il progetto avrà a disposizione un suo identificatore a cui saranno associati anche una chiave segreta (Client secret) per l’identificazione e una URI predefinita per il rindirizzamento delle chiamate al servizio:

identificatori del Project API

Questi dati permetteranno di autorizzare il progetto nel momento in cui verrà richiesto di interagire con le API fornite dal Service Provider.

Interazione tramite Google API PHP Client Library

Una volta ottenute le credenziali necessarie per interagire con le API del servizio, sarà possibile passare alla fase relativa alla creazione dell'applicazione vera e propria; per far questo gli sviluppatori PHP avranno a disposizione una libreria apposita denominata Google API PHP Client che potrà essere scaricata gratuitamente e utilizzata liberamente in quanto rilasciata sotto licenza Open Source.

Una volta effettuato il download della libreria, questa potrà essere utilizzata per richiedere a Google Drive di autorizzare l'accesso da parte del progetto generato alle funzionalità per  la visualizzazione e la gestione dei contenuti salvati nel Cloud della piattaforma; a tal scopo  sarà possibile eseguire uno script sul modello del seguente:

<?php
// inclusione delle librerie del client
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

// istanza dell'oggetto di classe relativo al client
$drive = new Google_Client();

/* credenziali e parametri per l'autenticazione */
# identificatore, o client ID, associato al progetto
$drive->setClientId('xxxxxxxxxxx.apps.googleusercontent.com');

# chiave segreta associata al progetto
$drive->setClientSecret('xxxxxxxxxxxxxxxxW5sOe');

# URI per la redirezione delle richieste
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');

# percorso alla risorsa di Google Drive alla quale è indirizzata la richiesta
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));

// istanza dell'oggetto di classe relativo al servizio
$gdrive = new Google_DriveService($drive);

// creazione dell'URL per l'autenticazione
$url = $drive->createAuthUrl();
$authorizationCode = trim(fgets(STDIN));

// trasferimento del token di accesso per l'utorizzazione
$token = $drive->authenticate($authorizationCode);
?>

In pratica, lo snippet proposto invierà al servizio una richiesta di connessione e, per far questo, utilizzerà come parametri il client ID e la chiave segreta precedentemente ottenute che dovranno essere passate come argomenti rispettivamente ai metodi setClientId() e setClientSecret(); inoltre, sarà necessario passare al metodo setRedirectUri() la redirect URI predefinita fornita in modo automatico dal servizio al momento della generazione del client ID e, al metodo setScopes(), l’URL del servizio verso la quale verrà effettuata la richiesta di accesso che, nel caso specifico, è “https://www.googleapis.com/auth/drive”.

Eseguendo lo script, il browser del client dovrebbe subire una redirezione ad una pagina per la richiesta di autorizzazione come la seguente:

Figura 9: richiesta di accesso alle API

A questo punto, per proseguire sarà necessario clickare sul pulsante “Consenti accesso”; il sistema, rispettando la meccanica di OAuth basata sullo scambio di tokens tra applicazione e Provider, metterà a disposizione un codice che potrà essere utilizzato per autorizzare l’applicazione al momento dell’interazione con le API.

Figura 10: codice d'accesso al servizio

Una volta ottenuto il codice, non sarà necessario richiederlo nuovamente per interagire con i contenuti presenti in Google Drive, ma per far questo l’applicazione di riferimento dovrà essere in grado di comunicarlo al servizio nel momento in cui esso verrà richiesto ai fini dell’autenticazione.

Upload di file in Google Drive da un’applicazione PHP

Un’applicazione pratica dal punto di vista dell’interazione di uno script PHP con le interfacce di programmazione di Google Drive, potrebbe essere l’inserimento di un file nella cartella relativa al proprio account.

Per far questo è possibile sfruttare nuovamente la libreria Google API PHP Client creando un’applicazione in parte simile a quella precedentemente proposta:

<?php

// inclusione delle librerie del client
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

// istanza dell'oggetto di classe relativo al client
$drive = new Google_Client();

// credenziali per l'autenticazione
$drive->setClientId(' xxxxxxxxxxx.apps.googleusercontent.com');
$drive->setClientSecret('xxxxxxxxxxxxxxxxW5sOe');
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));

// istanza dell'oggetto di classe relativo al servizio
$gdrive = new Google_DriveService($drive);

// salvataggio del token in una variabile
$_GET['code']= '4/xxxxxNIVCxxxxxx1xAO0bxMe.kjgvxxxxxl05txxxxxxdAI';

// memorizzazione del token in un file
file_put_contents('token.json', $drive->authenticate());

// lettura delle informazioni contenute nel file
$drive->setAccessToken(file_get_contents('token.json'));

// istanza dell'oggetto di classe relativo al file per i test
$doc = new Google_DriveFile();

// intestazioni per il file di test
$doc->setTitle('Test Progetto Drive');
$doc->setDescription('Documento di prova');
$doc->setMimeType('text/plain');

// lettura del contenuto del file e restituzione sotto forma di stringa
$content = file_get_contents('progettodrive.txt');

// generazione del file per il test
$output = $gdrive->files->insert($doc, array(
      'data' => $content,
      'mimeType' => 'text/plain',
    ));

// stampa del risultato
print_r($output);

?>

La prima parte del codice prevede l’inclusione dei file di libreria e l’autenticazione tramite le credenziali associate al proprio progetto; in questo caso però, il codice fornito al momento della richiesta d’accesso verrà passato come parametro ad una variabile di metodo in modo che possa essere scritto tramite la funzione file_put_contents() all’interno di un file (“token.json”), esso sarà quindi leggibile attraverso un’altra funzione di PHP, file_get_contents(), in modo che l’applicazione venga autorizzata.

Il passaggio successivo riguarderà la scrittura delle intestazioni di un semplice file di testo del quale sarà possibile definire:

  • un titolo tramite il metodo setTitle();
  • una breve descrizione, tramite il metodo setDescription();
  • il tipo MIME (nel caso specifico “text/plain”) grazie al metodo setMimeType().

Nell’esempio, il file da uploadare (chiamato semplicemente progettodrive.txt), si dovrà trovare nello stesso percorso del file contenente il codice dell’applicazione e, all’interno di esso, potrà essere scritta una stringa qualsiasi (nel caso specifico “Prova effettuata con successo!”) per verificare successivamente l’avvenuto passaggio alla cartella di Google Drive.

Il metodo insert() si occuperà della scrittura delle intestazioni sul file e di effettuare l’upload richiesto; passando la variabile così popolata (“$output”) alla funzione print_r(), si potranno visualizzare le informazione relative al processo di modifica e trasferimento del file.

Una volta eseguita l’applicazione PHP proposta, all’interno della cartella di Google Drive dovrebbe essere presente un nuovo file avente come titolo la stringa passata al metodo setTitle() (“Test Progetto Drive” nell’esempio):

Test sull'upload del file

 

Aprendo il nuovo file, dovrebbe essere visualizzabile all’interno di esso la stessa stringa scritta nel file di testo sorgente, ciò a testimonianza dell’avvenuto upload:

Contenuto del file uploadato

L’esito dell’ultimo test effettuato dimostrerà inconfutabilmente il superamento delle fasi di autenticazione dell’applicazione al servizio e di comunicazione con le sue API.

 

Conclusioni

In questa breve trattazione è stato affrontato l’argomento relativo alla creazione di un’applicazione scritta in PHP in grado di interagire con le interfacce di programmazione del servizio per il l’archiviazione e la sincronizzazione tramite Cloud Computing Google Drive.

A questo scopo sono stati descritti i passaggi necessari per abilitare le API necessarie, per creare un progetto e per fornire ad esso le credenziali richieste per l’autenticazione alla piattaforma. Successivamente, sono stati presentati due esempi pratici riguardanti rispettivamente l’accesso al servizio e l’upload di contenuti nella cartella del servizio.


Ti consigliamo anche