Ho seguito di nuovo THIS TUTORIAL per caricare un file su Google Drive con php, direttamente dal mio REMOTE SERVER: così ho creato un nuovo progetto API da Google API Console, abilitato servizio API Drive, richiesto ID client OAuth e client segreto, li ha scritto in uno script, quindi caricarlo insieme con la cartella Google APIs Client Library for PHP a questo http://www.MYSERVER.com/script1.php, per recuperare il codice di accesso:Aggiorna automaticamente token tramite google drive api con script php
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('XXX'); // HERE I WRITE MY Client ID
$drive->setClientSecret('XXX'); // HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$url = $drive->createAuthUrl();
$authorizationCode = trim(fgets(STDIN));
$token = $drive->authenticate($authorizationCode);
?>
Quando visito http://www.MYSERVER.com/script1.php I permetto autorizzazione e ottenere l'Auth codice che posso scrivere in un secondo script. Poi ho caricarlo http://www.MYSERVER.com/script2.php, che sembra:
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('X'); // HERE I WRITE MY Client ID
$drive->setClientSecret('X'); // HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$_GET['code']= 'X/XXX'; // HERE I WRITE AUTH CODE RETRIEVED AFTER RUNNING REMOTE script.php
file_put_contents('token.json', $drive->authenticate());
$drive->setAccessToken(file_get_contents('token.json'));
$doc = new Google_DriveFile();
$doc->setTitle('Test Drive');
$doc->setDescription('Document');
$doc->setMimeType('text/plain');
$content = file_get_contents('drive.txt');
$output = $gdrive->files->insert($doc, array(
'data' => $content,
'mimeType' => 'text/plain',
));
print_r($output);
?>
Bene, ora il file drive.txt viene caricato sul mio Google Drive e la struttura del file di token.json è una sorta di:
{"access_token":"XXX","token_type":"Bearer","expires_in":3600,"refresh_token":"YYY","created":1365505148}
Ora, come puoi immaginare, posso chiamare script2.php e caricare file fino a un certo momento. Infine, il punto è: I non voglio il token che scade, I non voglio consentire l'autorizzazione ogni volta che scade (richiamando script1.php): Ho bisogno di chiamare period2 script.php durante il giorno, per caricare automaticamente il mio file, senza l'interazione dell'utente. Quindi, qual è il modo migliore per aggiornare automaticamente il token per sempre in questo contesto? Ho bisogno di un altro script? Posso aggiungere del codice a script2.php? o modificare il file token.json? E dove posso leggere il tempo rimanente prima della scadenza del token? Grazie!
Grazie @Burcu, il punto è nelle tue parole "Se il token di accesso è scaduto": QUANDO POSSO VEDERE che il mio token di accesso è scaduto? è permanente o no? – Huxley
@Huxley, genererà un 'Google_AuthException'. D'altra parte, questa libreria client aggiorna automaticamente il token di accesso se quello attuale sta per scadere. Quindi, normalmente non dovresti mai vedere un errore di autenticazione. Sto modificando la mia risposta sopra. –
Ho recuperato refresh_token e access_token dalla console OAuth 2.0 Playground e l'ho memorizzato nel mio file token.json: è la stessa cosa? sono permanenti? – Huxley