Api di Google Drive: 3 Esempi applicativi
Come visto nell'articolo precedente, dove veniva spiegato come accedere ai servizi di Google Drive attraverso le API via PHP, in questo articolo vedremo tre esempi pratici per capirne le potenzialità.
Impostiamo il giusto SCOPE / Permessi per i nostri esempi
Uno dei problemi più riccorrenti con l'utilizzo delle api di Google Drive è sicuramente impostare i giusti Scope in base al tipo di azione che dobbiamo fare.
Come possiamo vedere dalla tabella sotto riportata ne esistono di diversi:
E' importante impostare i giusti permessi alla prima invocazione del nostro script in modo che ci venga generato il file token.json appropriato con i grant corretti.
Questi sono due esempi:
$client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY);
$client->setScopes(Google_Service_Drive::DRIVE);
Quindi se dobbiamo scrivere o comunque avere il pieno controllo utiliziamo lo Scope "DRIVE".
Tale impostazione va fatta nella funzione getClient().
function getClient() { $client = new Google_Client(); $client->setApplicationName('Google Drive API PHP Quickstart'); //$client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY); $client->setScopes(Google_Service_Drive::DRIVE); ... ... ...
Google Drive: Generiamo un PDF da un documento word
Nel primo esempio vediamo come generare un pdf partendo da un word (il fileid sorgente è appunto un documento word)
Come detto lo scope in questo caso deve essere massimo : Google_Service_Drive::DRIVE
// Get the API client and construct the service object.
$client = getClient();
$service = new Google_Service_Drive($client);
$fileId = '1QKjahQ2LDTEGtt-RNRA45uU4eZP2pEFv1JQB_jAyftM';
$response = $service->files->export($fileId, 'application/pdf', array('alt' => 'media' ));
$content = $response->getBody()->getContents();
file_put_contents ("output.pdf" , $content);
$fileMetadata = new Google_Service_Drive_DriveFile(array('name' => 'output.pdf'));
$content = file_get_contents('output.pdf');
$file = $service->files->create($fileMetadata, array(
'data' => $content,
'mimeType' => 'application/pdf',
'uploadType' => 'multipart',
'fields' => 'id'));
echo "File ID: " . $file->id;
echo "";
Se ora invochiamo la procedura di lettura file, nella lista vediamo anche il file pdf appena creato.
// Get the API client and construct the service object.
$client = getClient();
$service = new Google_Service_Drive($client);
// Print the names and IDs for up to 10 files.
$optParams = array(
'pageSize' => 10,
'fields' => 'nextPageToken, files(id, name)'
);
$results = $service->files->listFiles($optParams);
if (count($results->getFiles()) == 0) {
print "No files found.\n";
} else {
print "Files:\n";
foreach ($results->getFiles() as $file) {
printf("%s (%s)\n", $file->getName(), $file->getId());
}
}
Google spreadsheet
In questo esempio, vediamo come visualizzare un foglio di calcolo - Google Spreadsheet.
Il file è visibile direttamente al seguente url essendo pubblico: https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
Ora, analizziamo un semplice script per leggerlo direttamente via API:
// Get the API client and construct the service object. GOOGLE SPREADSHEET
$client = getClient();
$service = new Google_Service_Sheets($client);
// Prints the names and majors of students in a sample spreadsheet:
// https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
$spreadsheetId = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms';
$range = 'Class Data!A1:F';
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();
if (count($values) == 0) {
print "No data found.\n";
} else {
echo "\n";
foreach ($values as $row) {
for ($i=0;$i<count($row);$i++){
echo $row[$i]."\t\t\t";
}
}
}
e come prima andando sul broswer otteremo questo risultato.
Google calendar
Infine se vogliamo creare un evento su Google Calendar inseriamo il seguente codice
// Get the API client and construct the service object. GOOGLE CALENDAR $client = getClient(); $service = new Google_Service_Calendar($client); // Print the next 10 events on the user's calendar. $calendarId = Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.'; $optParams = array( 'maxResults' => 10, 'orderBy' => 'startTime', 'singleEvents' => TRUE, 'timeMin' => date('c'), ); $results = $service->events->listEvents($calendarId, $optParams); if (count($results->getItems()) == 0) { print "No upcoming events found.\n"; } else { print "Upcoming events:
"; foreach ($results->getItems() as $event) { $start = $event->start->dateTime; if (empty($start)) { $start = $event->start->date; } $end = $event->end->dateTime; if (empty($end)) { $end = $event->end->date; } printf("%s, start(%s), end(%s)
", $event->getSummary(), $start, $end); } } $event = new Google_Service_Calendar_Event(array( 'summary' => 'Evento prova 1', 'description' => 'è un evento di prova.', 'start' => array( 'dateTime' => '2017-06-30T09:00:00+02:00', 'timeZone' => 'Europe/Rome', ), 'end' => array( 'dateTime' => '2017-06-30T17:00:00+02:00', 'timeZone' => 'Europe/Rome', ), )); $calendarId = Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.'; $event = $service->events->insert($calendarId, $event); printf('Event created: %s\n', $event->htmlLink);
e sempre come prima andiamo sul broswer e otteremo questo risultato.