...
✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

So integrieren Sie die Google Sheets-API mit PHP

293

In der Vergangenheit habe ich an einem Projekt gearbeitet, bei dem wir Daten dynamisch in die Google-Tabelle schreiben wollten. Um dies zu erreichen, hatten wir mit der Tabellen-API interagiert. Ich fand es ein interessantes Thema für den Blogbeitrag. In diesem Artikel untersuchen wir, wie Sie die Google Sheets-API mit PHP integrieren. Wir werden Erstellungs-, Schreib-, Anfüge- und Lesevorgänge für Tabellenkalkulationen über die API ausführen.

Google Spreadsheet ist eine kostenlose, webbasierte Software-Office-Suite, die von Google verwaltet wird. Die Tabelle kann innerhalb des Google Drive-Dienstes für eigene Zwecke verwendet werden.

Wenn es um Websites geht, können Sie Google Sheets für verschiedene Zwecke verwenden. Im Google-Sheet können die Kontaktdaten der Nutzer (Telefon und E-Mail), Zahlungsdetails, Veranstaltungsregistrierungen, Aktivitäten und vieles mehr gespeichert werden. Auf der Website möchten Sie möglicherweise ein automatisiertes System, das alle Lese- und Schreibvorgänge in Tabellenkalkulationen ausführt, wenn eine bestimmte Aktion ausgelöst wird. Dies kann über die Tabellen-API erfolgen.

Registrieren Sie eine Anwendung und erstellen Sie Anmeldeinformationen

Ich werde OAuth verwenden, um mit der API zu interagieren. OAuth ist eine sicherere und empfohlene Methode zur Durchführung von API-Vorgängen. Führen Sie die folgenden Schritte aus, die für die OAuth-Integration erforderlich sind.

  • Gehen Sie zur Google-Entwicklerkonsole https://console.developers.google.com
  • Erstellen Sie ein neues Projekt. Alternativ können Sie auch ein vorhandenes Projekt auswählen.
  • Geben Sie Ihrem Projekt einen Namen. Die Google Console generiert dafür eine eindeutige Projekt-ID.
  • Ihr Projekt wird oben in der linken Seitenleiste angezeigt.
  • Klicken Sie auf Bibliothek. Sie sehen eine Liste der Google APIs.
  • Aktivieren Sie die Google Tabellen-API.
  • Klicken Sie auf die Anmeldeinformationen. Wählen Sie unter Anmeldeinformationen erstellen die OAuth-Client-ID aus. Wählen Sie das Optionsfeld für Webanwendung.
  • Geben Sie den Namen an. Geben Sie unter Autorisierte JavaScript-Ursprünge Ihre Domain-URL ein. Fügen Sie in den Autorisierte Weiterleitungs-URIs den Link der Weiterleitungs-URL hinzu. In meinem Fall habe ich die URL http://localhost/google-sheets-api/callback.php übergeben
  • Klicken Sie auf die Schaltfläche Erstellen. Sie erhalten die Client-ID und das Client-Geheimnis im Popup. Kopieren Sie diese Angaben. Wir werden es gleich brauchen.

So integrieren Sie die Google Sheets-API mit PHP

Basiseinstellung

Wie bereits erwähnt, verwenden wir OAuth, um die API-Operationen auszuführen. Dazu müssen Sie ein Zugriffstoken generieren, das als Kennung für Ihr Konto dient. Mithilfe dieses Zugriffstokens überprüfen Google APIs, ob die eingehende Anfrage gültig und autorisiert ist.

Das Zugriffstoken hat eine kurze Lebensdauer. Sie verfallen bald. Und nach Ablauf können wir keine API-Aufrufe durchführen, da Google die Anfrage mit dem abgelaufenen Token als nicht autorisierte Anfrage behandelt. Um dieses Problem zu beheben, verwenden wir das ‘refresh_token’, um das Zugriffstoken im Hintergrund neu zu generieren. So funktioniert OAuth.

Beginnen wir mit dem Aufbau des OAuth-Flows. Erstellen Sie die composer.jsonDatei und fügen Sie darunter Zeilen hinzu.

{
    "require": {
        "google/apiclient": "2.0",
        "hybridauth/hybridauth": "~3.0"
    }
}

Führen Sie als Nächstes den folgenden Befehl aus, um diese Bibliotheken zu installieren.

composer install

Wenn wir das Zugriffstoken generieren, muss es in einer Datenbank gespeichert werden. Durch das Speichern können Sie jederzeit ein Token abrufen und die API-Aufrufe ausführen. Führen Sie die folgende Abfrage aus, um eine Tabelle in der Datenbank zu erstellen.

CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `access_token` text NOT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Erstellen Sie nun eine DB-Klasse, die mit der Datenbank interagiert und Token-Informationen in der Tabelle abruft, speichert und aktualisiert.

class-db.php

<?php
class DB {
    private $dbHost     = "DB_HOST";
    private $dbUsername = "DB_USERNAME";
    private $dbPassword = "DB_PASSWORD";
    private $dbName     = "DB_NAME";
      
    public function __construct(){
        if(!isset($this->db)){
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if($conn->connect_error){
                die("Failed to connect with MySQL: ". $conn->connect_error);
            }else{
                $this->db = $conn;
            }
        }
    }
  
    public function is_table_empty() {
        $result = $this->db->query("SELECT id FROM token");
        if($result->num_rows) {
            return false;
        }
  
        return true;
    }
  
    public function get_access_token() {
        $sql = $this->db->query("SELECT access_token FROM token");
        $result = $sql->fetch_assoc();
        return json_decode($result['access_token']);
    }
  
    public function get_refersh_token() {
        $result = $this->get_access_token();
        return $result->refresh_token;
    }
  
    public function update_access_token($token) {
        if($this->is_table_empty()) {
            $this->db->query("INSERT INTO token(access_token) VALUES('$token')");
        } else {
            $this->db->query("UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)");
        }
    }
}

Ersetzen Sie die Platzhalter im obigen Code durch Ihre tatsächlichen Datenbankanmeldeinformationen. Hier gehe ich davon aus, dass Sie ein einzelnes Google-Konto verwenden möchten. Wenn Sie mehrere Konten verwenden möchten, ändern Sie die Abfragen gemäß Ihren Anforderungen.

Zugriffstoken generieren

Wir sind damit fertig, eine Tabelle zu erstellen und Bibliotheken zu installieren. Als nächstes müssen Sie das Google-Konto autorisieren und das Zugriffstoken in der Tabelle ‘token’ speichern.

Erstellen Sie eine config.phpDatei und schreiben Sie eine Konfiguration gemäß den Richtlinien der HybridAuth-Bibliothek.

config.php

<?php
require_once 'vendor/autoload.php';
require_once 'class-db.php';
  
define('GOOGLE_CLIENT_ID', 'PASTE_CLIENT_ID_HERE');
define('GOOGLE_CLIENT_SECRET', 'PASTE_CLIENT_SECRET_HERE');
  
$config = [
    'callback' => 'YOUR_DOMAIN_URL/callback.php',
    'keys'     => [
                    'id' => GOOGLE_CLIENT_ID,
                    'secret' => GOOGLE_CLIENT_SECRET
                ],
    'scope'    => 'https://www.googleapis.com/auth/spreadsheets',
    'authorize_url_parameters' => [
            'approval_prompt' => 'force', // to pass only when you need to acquire a new refresh token.
            'access_type' => 'offline'
    ]
];
  
$adapter = new HybridauthProviderGoogle( $config );

Stellen Sie sicher, dass Sie Werte der Konstanten GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET definieren. Übergeben Sie außerdem die Rückruf-URL im obigen Code. Wenn der Benutzer die Autorisierung abschließt, wird er zur Rückruf-URL umgeleitet.

Mit callback.phpfile holen wir die Zugriffstoken-Details ab und speichern sie wie folgt in der Datenbank.

callback.php

<?php
require_once 'config.php';
  
try {
    $adapter->authenticate();
    $token = $adapter->getAccessToken();
    $db = new DB();
    if($db->is_table_empty()) {
        $db->update_access_token(json_encode($token));
        echo "Access token inserted successfully.";
    }
}
catch( Exception $e ){
    echo $e->getMessage() ;
}

Gehen Sie zu diesem Zeitpunkt zum Browser und führen Sie YOUR_DOMAIN_URL/callback.php aus, um Sie zum Google-Konto umzuleiten. Schließen Sie den Autorisierungsprozess ab. Überprüfen Sie nach Abschluss des Vorgangs die Tabelle "Token". Es sollte die Token-Informationen gespeichert haben.

Erstellen Sie eine Tabelle mit der Tabellen-API und PHP

Sie haben nun das Zugriffstoken in Ihrer Tabelle gespeichert. Dies bedeutet, dass Sie mit den weiteren Vorgängen auf Google-Tabellen Ihres Kontos fortfahren können. Beginnen wir zunächst mit der Erstellung einer Tabelle mit der Tabellen-API.

create-sheet.php

<?php
require_once 'config.php';
 
create_spreadsheet();
 
function create_spreadsheet() {
 
    $client = new Google_Client();
 
    $db = new DB();
 
    $arr_token = (array) $db->get_access_token();
    $accessToken = array(
        'access_token' => $arr_token['access_token'],
        'expires_in' => $arr_token['expires_in'],
    );
 
    $client->setAccessToken($accessToken);
 
    $service = new Google_Service_Sheets($client);
 
    try {
        $spreadsheet = new Google_Service_Sheets_Spreadsheet([
            'properties' => [
                'title' => 'API Sheet'
            ]
        ]);
        $spreadsheet = $service->spreadsheets->create($spreadsheet, [
            'fields' => 'spreadsheetId'
        ]);
        printf("Spreadsheet ID: %sn", $spreadsheet->spreadsheetId);
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
 
            $client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
 
            $response = $client->request('POST', '/o/oauth2/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => GOOGLE_CLIENT_ID,
                    "client_secret" => GOOGLE_CLIENT_SECRET,
                ],
            ]);
 
            $data = (array) json_decode($response->getBody());
            $data['refresh_token'] = $refresh_token;
 
            $db->update_access_token(json_encode($data));
 
            create_spreadsheet();
        } else {
            echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}

Dieser Code ruft zuerst die Tokendetails von der DB ab. Mit diesem Token ruft es den Google-Tabellendienst auf und erstellt eine Tabelle. Ich habe die ID einer erstellten Tabelle ausgedruckt.

Wenn ein Zugriffstoken abgelaufen ist, geht der Code an den Catch-Block. Im catch-Block wird das Zugriffstoken neu generiert, in der Datenbank aktualisiert und die API-Operation fortgesetzt.

Derselbe Code mit kleinen Änderungen wird für andere Operationen in Tabellenkalkulationen verwendet.

Daten in eine Tabellenkalkulation schreiben

Um die Schreiboperationen durchzuführen, müssen Sie einen Bereich von zu schreibenden Zellen übergeben. Zum Beispiel möchten Sie oben die Überschriften Name und E-Mail hinzufügen. In diesem Fall wird Ihre Reichweite zu ‘A1:B1’. Das bedeutet, dass wir die Überschriften Name und E-Mail in die Zellen A1 bzw. B1 schreiben.

<?php
require_once 'config.php';
 
write_to_sheet('SPREADSHEET_ID');
 
function write_to_sheet($spreadsheetId = '') {
  
    $client = new Google_Client();
  
    $db = new DB();
  
    $arr_token = (array) $db->get_access_token();
    $accessToken = array(
        'access_token' => $arr_token['access_token'],
        'expires_in' => $arr_token['expires_in'],
    );
  
    $client->setAccessToken($accessToken);
  
    $service = new Google_Service_Sheets($client);
  
    try {
        $range = 'A1:B1';
        $values = [
            [
                'Name',
                'Email',
            ],
        ];
        $body = new Google_Service_Sheets_ValueRange([
            'values' => $values
        ]);
        $params = [
            'valueInputOption' => 'USER_ENTERED'
        ];
        $result = $service->spreadsheets_values->update($spreadsheetId, $range, $body, $params);
        printf("%d cells updated.", $result->getUpdatedCells());
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
  
            $client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
  
            $response = $client->request('POST', '/o/oauth2/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => GOOGLE_CLIENT_ID,
                    "client_secret" => GOOGLE_CLIENT_SECRET,
                ],
            ]);
  
            $data = (array) json_decode($response->getBody());
            $data['refresh_token'] = $refresh_token;
  
            $db->update_access_token(json_encode($data));
  
            write_to_sheet($spreadsheetId);
        } else {
            echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}

Hier habe ich die Tabellenkalkulations-ID an die Methode übergeben. Sie können diese Funktion ändern und zusätzliche Parameter übergeben. Im vorherigen Code haben wir die Tabellenkalkulations-ID zurückgegeben, die im obigen Code verwendet werden kann. Alternativ können Sie die Tabellen-ID aus Ihrer Tabellen-URL abrufen. Siehe den Screenshot unten.

So integrieren Sie die Google Sheets-API mit PHP

Die Zeichenfolge zwischen ‘d’ und ‘edit’ ist die ID einer Google-Tabelle.

Daten an ein Google Sheet anhängen

Wenn Sie bestimmte Informationen in Google-Tabellen speichern möchten, müssen Sie sie an die vorhandene Tabelle anhängen. Es kann Fälle geben, in denen Sie eine oder mehrere Zeilen auf einmal anhängen möchten. Der Benutzer kann die einzelnen oder mehrere Array-Elemente übergeben und Daten an das Blatt anhängen, wie unten gezeigt.

<?php
require_once 'config.php';
 
append_to_sheet('SPREADSHEET_ID');
  
function append_to_sheet($spreadsheetId = '') {
  
    $client = new Google_Client();
  
    $db = new DB();
  
    $arr_token = (array) $db->get_access_token();
    $accessToken = array(
        'access_token' => $arr_token['access_token'],
        'expires_in' => $arr_token['expires_in'],
    );
  
    $client->setAccessToken($accessToken);
  
    $service = new Google_Service_Sheets($client);
  
    try {
        $range = 'A1:B1';
        $values = [
            [
                'John Doe',
                '[email protected]',
            ],
            [
                'Jack Waugh',
                '[email protected]',
            ],
            // Additional rows ...
        ];
        $body = new Google_Service_Sheets_ValueRange([
            'values' => $values
        ]);
        $params = [
            'valueInputOption' => 'USER_ENTERED'
        ];
        $result = $service->spreadsheets_values->append($spreadsheetId, $range, $body, $params);
        printf("%d cells appended.", $result->getUpdates()->getUpdatedCells());
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
  
            $client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
  
            $response = $client->request('POST', '/o/oauth2/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => GOOGLE_CLIENT_ID,
                    "client_secret" => GOOGLE_CLIENT_SECRET,
                ],
            ]);
  
            $data = (array) json_decode($response->getBody());
            $data['refresh_token'] = $refresh_token;
  
            $db->update_access_token(json_encode($data));
  
            append_to_sheet($spreadsheetId);
        } else {
            echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}

Ich habe den Bereich ‘A1:B1’ verwendet und 2 separate Array-Elemente übergeben. Die Tabellen-API fügt diese Details nach den Tabellendaten an. Beachten Sie, dass wir ‘A1:B1’ im Bereich übergeben, jedoch keine Werte ersetzen, die bereits in diese Zellen geschrieben wurden. Stattdessen schreibt es Daten in die nächsten verfügbaren Zellen.

Daten aus einem Google Sheet lesen

Wir haben einen Code zum Erstellen einer Tabelle, zum Schreiben in eine Tabelle und zum Anhängen von Daten an die Tabelle geschrieben. Sehen wir uns schließlich an, wie Sie Daten aus einem Google-Tabellenblatt lesen.

<?php
require_once 'config.php';
 
read_sheet('SPREADSHEET_ID');
  
function read_sheet($spreadsheetId = '') {
  
    $client = new Google_Client();
  
    $db = new DB();
  
    $arr_token = (array) $db->get_access_token();
    $accessToken = array(
        'access_token' => $arr_token['access_token'],
        'expires_in' => $arr_token['expires_in'],
    );
  
    $client->setAccessToken($accessToken);
  
    $service = new Google_Service_Sheets($client);
  
    try {
        $range = 'A:B';
        $response = $service->spreadsheets_values->get($spreadsheetId, $range);
        $values = $response->getValues();
 
        if (empty($values)) {
            print "No data found.n";
        } else {
            print "Name, Email:n";
            foreach ($values as $row) {
                // Print columns A and E, which correspond to indices 0 and 4.
                printf("%s, %sn", $row[0], $row[1]);
            }
        }
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
  
            $client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
  
            $response = $client->request('POST', '/o/oauth2/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => GOOGLE_CLIENT_ID,
                    "client_secret" => GOOGLE_CLIENT_SECRET,
                ],
            ]);
  
            $data = (array) json_decode($response->getBody());
            $data['refresh_token'] = $refresh_token;
  
            $db->update_access_token(json_encode($data));
  
            read_sheet($spreadsheetId);
        } else {
            echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}

Ich hoffe, Sie verstehen, wie Sie die Google Sheets-API mit PHP integrieren. Ich würde gerne Ihre Gedanken und Vorschläge im Kommentarbereich unten hören.

Zum Thema passende Artikel

Aufnahmequelle: artisansweb.net

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen