web-dev-qa-db-fra.com

Comment lire une feuille de calcul Google Drive en PHP?

Tout ce que j'essaie de faire, c'est de lire une feuille de calcul Google à partir d'un site Web. J'ai lu et relu les documents de l'API Google Drive et tout ce qui concerne Google Drive PHP sur Stack Overflow et je ne parviens toujours pas à la zone de fin.

Voici ce que j'ai fait:

  1. Été à la console Google API et:
    1. Activé "Drive API" et "Drive SDK" sous "Services";
    2. Création d'un OAuth 2.0 ID client sous 'API Access'. Sous "ID client pour les applications Web", la console m'a donné "ID client", "Adresse e-mail", "Secret client", " Rediriger les URI "et" origines JavaScript ";
  2. Téléchargé la "Google API PHP Client Library";
  3. Ouvert le document Google Drive (feuille de calcul) et cliqué sur "Partager" pour obtenir la "clé" du document;
  4. Configurez le code suivant:
<?php 
session_start(); 
require_once 'lib/gapi/Google_Client.php'; 
require_once 'lib/gapi/contrib/Google_DriveService.php'; 

define( 'GDRIVE_CLIENT_ID', '<API Console - API Access - Client ID>' ); 
define( 'GDRIVE_CLIENT_SECRET', '<API Console - API Access - Client secret>' ); 
define( 'GDRIVE_REDIRECT_URIS', '<API Console - API Access - Redirect URIs>' ); 

define( 'GDRIVE_SCOPE_01', 'h t t p s://www.googleapis.com/auth/drive' ); 
define( 'GDRIVE_SCOPE_02', 'h t t p s://www.googleapis.com/auth/drive.apps.readonly' ); 
define( 'GDRIVE_SCOPE_03', 'h t t p s://www.googleapis.com/auth/drive.file' ); 
define( 'GDRIVE_SCOPE_04', 'h t t p s://www.googleapis.com/auth/drive.metadata.readonly' ); 
define( 'GDRIVE_SCOPE_05', 'h t t p s://www.googleapis.com/auth/drive.readonly' ); 
define( 'GDRIVE_FILE_KEY', '<'key' given from 'sharing' document>' ); 

$client = new Google_Client(); 
$client->setClientId( GDRIVE_CLIENT_ID ); 
$client->setClientSecret( GDRIVE_CLIENT_SECRET ); 
$client->setRedirectUri( GDRIVE_REDIRECT_URIS ); 
$client->setScopes( array( GDRIVE_SCOPE_01, GDRIVE_SCOPE_02, GDRIVE_SCOPE_03, GDRIVE_SCOPE_04, GDRIVE_SCOPE_05 ) ); 

try { 
  $file = $service->files->get( GDRIVE_FILE_KEY ); 
  echo "Title: ", $file->getTitle(); 
  echo "Description: ", $file->getDescription(); 
  echo "MIME type: ", $file->getMimeType(); 
} catch (Exception $e) { 
  echo "An error occurred: ", $e->getMessage(); 
} 
?> 

Tout se passe bien (pas d'erreur de toute façon) jusqu'à l'appel de $service->files->get( GDRIVE_FILE_KEY ) qui déclenche l'exception:

Une erreur s'est produite: Erreur lors de l'appel de GET https://www.googleapis.com/drive/v2/files: (403) Limite quotidienne pour utilisation non authentifiée dépassée. Une utilisation continue nécessite une inscription.

Qu'est-ce que je fais mal? J'ai arraché mes cheveux (enfin, ce qui restait).

34
Kiser

Il existe également une solution beaucoup plus facile, mais moins propre, si vous ne voulez pas vous soucier de l'API ou de l'authentification Google.

  1. Accédez à votre feuille de calcul dans Google Drive.
  2. Accédez aux fichiers -> Publier sur le Web
  3. Sélectionnez la bonne feuille de calcul et assurez-vous que la case à cocher est toujours mise à jour.
  4. Toujours dans la même case, vous pouvez obtenir un lien .csv vers votre feuille de calcul.

Vous pouvez désormais accéder au contenu comme tout autre fichier csv sur le Web. Voici un exemple de code:

$spreadsheet_url="https://docs.google.com/spreadsheet/pub?key=<somecode>&single=true&gid=0&output=csv";

if(!ini_set('default_socket_timeout', 15)) echo "<!-- unable to change socket timeout -->";

if (($handle = fopen($spreadsheet_url, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $spreadsheet_data[] = $data;
    }
    fclose($handle);
}
else
    die("Problem reading csv");
68
Ben

Veuillez vérifier Google Drive PHP Quickstart . Vous n'avez pas réellement autorisé votre client. À partir de $authUrl = $client->createAuthUrl();

Toutes les demandes Google Drive nécessitent une autorisation quelconque.

7
Ali Afshar

J'ai créé un exemple de projet qui utilise un compte de service pour s'authentifier auprès de Google Spreadsheets afin d'accéder au contenu d'une feuille de calcul.

Jetez un œil au README à https://github.com/juampynr/google-spreadsheet-reader .

3
Juampy NR

Vous devez utiliser oauth, si vous ne le faites pas, Google ne vous permettra que de faire quelques demandes.

Si tout ce que vous voulez faire est de lire des données dans une feuille de calcul Google ou d'y écrire des données, vous pouvez simplement utiliser l'API de la feuille de calcul. Découvrez php-google-spreadsheet-client .

2
Asim

Si vous voulez que votre propre fichier soit lu, vous avez besoin d'un compte de service au lieu d'un "ID client pour les applications Web". Je me bats moi-même depuis longtemps avec ce problème et cela m'a amené la sollicution: https://developers.google.com/drive/web/service-accounts

1
Daan Luttik