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:
<?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).
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.
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");
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.
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 .
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 .
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