HomeBlogGoogle Drive: Esempi di app PHP per utilizzare le API

Google Drive: Esempi di app PHP per utilizzare le API

Come visto nell' articolo precedente dove veniva spiegato come creare un app PHP per poter utilizzare Google Drive attraverso un API, in questo articolo andremo a vedere tre esempi di API diverse:

 

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 dobbiamo fare.

Come possiamo vedere dalla tabella sotto riportata ne esistono di diversi:

scope google drive

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

google drive spreadsheet example

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.

 

Spreadsheet

 

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.

 

Calendar