wake-up-neo.com

Wie lese ich eine Google Drive-Tabelle in PHP?

Ich versuche nur, eine Google-Tabelle von einer Website zu lesen. Ich habe die Google Drive-API-Dokumente und alles, was Google Drive PHP zum Stack-Überlauf enthält, gelesen und erneut gelesen und komme immer noch nicht zur Endzone.

Folgendes habe ich getan:

  1. War in der Google APIs-Konsole und:
    1. Aktiviert "Drive API" und "Drive SDK" unter "Services";
    2. Erstellt eine OAuth 2.0-Client-ID unter "API-Zugriff". Unter "Client-ID für Webanwendungen" hat mir die Konsole "Client-ID", "E-Mail-Adresse", "Client-Geheimnis", "URIs umleiten" und "JavaScript-Ursprung" mitgeteilt.
  2. Heruntergeladene "Google API PHP Client Library";
  3. Öffnete das Google Drive-Dokument (Tabellenkalkulation) und klickte auf "Freigeben", um den "Schlüssel" des Dokuments abzurufen.
  4. Richten Sie den folgenden Code ein:
<?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(); 
} 
?> 

Alles läuft einwandfrei (trotzdem keine Fehler), bis der $service->files->get( GDRIVE_FILE_KEY ) -Aufruf die Ausnahme auslöst:

Ein Fehler ist aufgetreten: Fehler beim Aufrufen von GET https://www.googleapis.com/drive/v2/files: (403) Tägliches Limit für nicht authentifizierte Verwendung überschritten. Für die weitere Verwendung ist eine Registrierung erforderlich.

Was mache ich falsch? Ich habe mir die Haare ausgezogen (na ja, was war noch übrig).

34
Kiser

Es gibt auch eine viel einfachere, aber weniger saubere Lösung, wenn Sie sich nicht mit der API oder der Google-Authentifizierung befassen möchten.

  1. Wechseln Sie in Google Drive zu Ihrer Tabelle.
  2. Gehen Sie zu Dateien -> Im Web veröffentlichen
  3. Wählen Sie das richtige Arbeitsblatt aus und aktivieren Sie das Kontrollkästchen Immer aktualisieren.
  4. Immer noch im selben Feld können Sie einen .csv-Link zu Ihrer Tabelle erhalten.

Sie können jetzt wie bei jeder anderen CSV-Datei im Web auf den Inhalt zugreifen. Hier ist ein Beispielcode:

$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

Bitte überprüfen Sie die Google Drive PHP Quickstart . Sie haben Ihren Client nicht autorisiert. Ausgehend von $authUrl = $client->createAuthUrl();

Für alle Google Drive-Anfragen ist eine Autorisierung erforderlich.

7
Ali Afshar

Ich habe ein Beispielprojekt erstellt, in dem ein Dienstkonto zur Authentifizierung bei Google Spreadsheets verwendet wird, um auf den Inhalt einer Tabelle zuzugreifen.

Schauen Sie sich README at https://github.com/juampynr/google-spreadsheet-reader an.

3
Juampy NR

Sie müssen oauth verwenden, wenn Sie nicht googeln, können Sie nur ein paar Anfragen stellen.

Wenn Sie nur Daten aus einer Google-Tabelle lesen oder Daten in diese schreiben möchten, können Sie einfach die API der Tabelle verwenden. Check out PHP-Google-Spreadsheet-Client .

2
Asim

Wenn Sie möchten, dass Ihre eigene Datei gelesen wird, benötigen Sie ein Dienstkonto anstelle einer "Client-ID für Webanwendungen". Ich habe dieses Problem viel zu lange selbst bekämpft und dies brachte mir die Lösung: https://developers.google.com/drive/web/service-accounts

1
Daan Luttik