Google Drive API

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Referències i Introducció

Learn more about the Drive REST API :


La plataforma Drive proporciona una sèrie de APIs juntament amb llibreries de client, exemples específics per al llenguatge de programació triat, i documentació, per tal d'ajudar al desenvolupador d'apps a integrar les seves aplicacions amb Drive. Amb la API de Google Drive podràs fer: (més informació a l'enllaç):

En aquesta pràctica seguirem el següent enllaç, PHP Quickstart:

En aquesta pràctica accedirem a la API de Google Drive des de PHP. PHP és un dels llenguatges des dels que podem accedir a la API. N'hi ha d'altres com python o Java.

El que farem és senzillament seguir els passos que es proposen en aquest enllaç, i que té per objectiu llistar els fitxers que tenim en el Drive, des d'un script PHP. És només un exemple senzill. El que és important, com s'ha comentat a classe, és que els programadors i les empreses tenen la possibilitat de relacionar-se i interacturar amb Google Drive de moltes formes, i no estàs sotmès només a la interfície gràfica/web que se't proposa com a predefinida.

El fet d'executar el script en mode línia de comandes (CLI, recorda que has de tenir instal.lat el paquest php5-cli), fa que puguis interactuar amb Google Drive des de la línia de comandes, i opcionalment ficar comandes en els teus bash scripts que facin feina a Google Drive...

A classe també hem vist i comentat el video (25'):

que no és més que la pràctica que has de realitzar feta pas a pas en el video. Això sí, hauràs de practicar l'anglès (recorda posar els subtítols...).

Desenvolupament

Prerequisits:

$ sudo apt-get install php-cli
$ sudo apt-get install php-json

Els passos que has de realitzar són els següents (fico un comentari al costat de cada pas, però per veure com es fa el pas has d'anar a l'enllaç).

Step 1: Habilitar la Drive API

Primer de tot, clar, has de tenir un compte de Google. Veuràs que Google té publicades moltes APIs, la majoria d'elles gratuïtes, o amb un accés gratuït i no sobrepasses un determinat ample de banda. Els programadors s'ho poden passar molt bé amb les APIs de Google: pots fer aplicacions per a Google Maps, geolocalització, pots accedir al cercador, l'empresa pot tenir un calendari corporatiu accedint que treballi sobre la API de Google Calendar,... En el nostre cas has d'activar la API de Google Drive.

Quan acabis aquesta secció hauràs de tenir un Client ID, i també hauràs configurat un nou projecte que tindrà una API key. L'aplicació que crearàs no és ni una aplicació web ni d'escriptori. És una aplicació de consola, i hauràs de posar Other.

Tal com es comenta en el tutorial, descarreguem el json i el renombrem a client_secret.json en el nostre directori de treball.

Step 2: Install the Google Client Library

Hi ha diverses maneres d'instal.lar la llibreria. La manera més fàcil és, des del teu directori de treball,

$ sudo apt-get install composer
$ composer require google/apiclient:^2.0

es crea la carpeta vendor/, i a dins hi ha el fitxer vendor/autoload.php.

Step 3: Set up the sample

Els valors de YOUR_CLIENT_ID i YOUR_CLIENT_SECRET els llegirem de les credencials que es crearan.

Fitxer quickstart.php:

<?php
require_once __DIR__ . '/vendor/autoload.php';


define('APPLICATION_NAME', 'Drive API PHP Quickstart');
define('CREDENTIALS_PATH', '~/.credentials/drive-php-quickstart.json');
define('CLIENT_SECRET_PATH', __DIR__ . '/client_secret.json');
// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/drive-php-quickstart.json
define('SCOPES', implode(' ', array(
  Google_Service_Drive::DRIVE_METADATA_READONLY)
));

if (php_sapi_name() != 'cli') {
  throw new Exception('This application must be run on the command line.');
}

/**
 * Returns an authorized API client.
 * @return Google_Client the authorized client object
 */
function getClient() {
  $client = new Google_Client();
  $client->setApplicationName(APPLICATION_NAME);
  $client->setScopes(SCOPES);
  $client->setAuthConfig(CLIENT_SECRET_PATH);
  $client->setAccessType('offline');

  // Load previously authorized credentials from a file.
  $credentialsPath = expandHomeDirectory(CREDENTIALS_PATH);
  if (file_exists($credentialsPath)) {
    $accessToken = json_decode(file_get_contents($credentialsPath), true);
  } else {
    // Request authorization from the user.
    $authUrl = $client->createAuthUrl();
    printf("Open the following link in your browser:\n%s\n", $authUrl);
    print 'Enter verification code: ';
    $authCode = trim(fgets(STDIN));

    // Exchange authorization code for an access token.
    $accessToken = $client->fetchAccessTokenWithAuthCode($authCode);

    // Store the credentials to disk.
    if(!file_exists(dirname($credentialsPath))) {
      mkdir(dirname($credentialsPath), 0700, true);
    }
    file_put_contents($credentialsPath, json_encode($accessToken));
    printf("Credentials saved to %s\n", $credentialsPath);
  }
  $client->setAccessToken($accessToken);

  // Refresh the token if it's expired.
  if ($client->isAccessTokenExpired()) {
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
    file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
  }
  return $client;
}

/**
 * Expands the home directory alias '~' to the full path.
 * @param string $path the path to expand.
 * @return string the expanded path.
 */
function expandHomeDirectory($path) {
  $homeDirectory = getenv('HOME');
  if (empty($homeDirectory)) {
    $homeDirectory = getenv('HOMEDRIVE') . getenv('HOMEPATH');
  }
  return str_replace('~', realpath($homeDirectory), $path);
}

// 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());
  }
}

Step 4: Run the sample

$ php quickstart.php

Veuràs que per la consola s'ha printat una url. Quan vas a aquest enllaç se't mostra un codi d'autorització, que és el que hauràs de posar quan se't demani.

$ php quickstart.php
Please visit: (has de posar la url que et surti)
https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&client_id=886497827039-04invogngql1acsf7r2the9u4t8om6eu.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&access_type=offline&approval_prompt=force

Please enter the auth code
4/UVxUq... (has de posar el teu)

Això només ho hauràs de fer la primera vegada. Quan executis el script veuràs com per pantalla es mostren 10 documents que tens en el Drive.

Aquest només és un primer pas. Evidentment, hi ha tècniques de certificació per evitar haver de posar el codi d'autorització. Si es dóna una ullada a la documentació de la API (totes les APIs tenen una documentació pública), un es pot fer la idea de les enormes possibilitats que se'ns obren.

Tasques a realitzar

Per entregar la pràctica n'hi ha prou en fer exitosament l'exercici proposat, que en resum és llistar els documents que tens al Drive.

Un cop realitzada aquesta part obligatòria, se't proposa de forma opcional:

  1. Investigar com ho podem fer per tal de què cada vegada que executem el script no ens demani el auth code que ens proporciona la visita de la url.
  2. Descarregar el contingut d'un fitxer a l'ordinador local.
  3. Crear un document en el Drive amb el contingut d'un fitxer local (aquest era el quickstart.php en el tutorial de l'any anterior).
  4. Utilitzar un altre llenguatge de programació, com ara Python (https://developers.google.com/drive/v3/web/quickstart/pythonv).
  5. Utilitzar una altra API de Google, entre totes les que teniu a disposició (per exemple, Google Maps).

NOTA. Nosaltres hem escollit de realitzar aquest exemple amb PHP des de la consola per simplicitat, i perquè podríem integrar aquest script en un script més gran (per ex un bash script) que s'executi des d'un cron de forma automàtica. Per exemple, si enviem el fitxer cada dia al Drive a les 12:00, estem fent una còpia de seguretat del fitxer, doncs tenir fitxers al Drive és una forma segura de preservar-los. Només falta solucionar la part de què no ens demani el Auth code.

Per fer l'execució del script automatizant l'autenticació oauth et pot servir aquest enllaç:

Entrega

Recorda la normativa per entregar les pràctiques al Schoology: ASIX-M09-IAW#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Moodle.

Per demostrar que has fet allò que es pretén i que has arribat allà on es pretén, n'hi haurà prou en fer unes captures de pantalla. Recorda d'escriure en el fitxer LLEEIX-ME els dubtes, problemes, èxits i fracassos que t'has trobat.


creat per Joan Quintana Compte, març 2019

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines