Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment intégrer l’API Google Sheets avec PHP

1 329

Dans le passé, j’ai travaillé sur un projet où nous voulions écrire des données dynamiquement dans la feuille de calcul Google. Pour y parvenir, nous avions interagi avec l’API Sheets. J’ai trouvé que c’était un sujet intéressant pour le blog. Ainsi, dans cet article, nous étudions comment intégrer l’API Google Sheets à l’aide de PHP. Nous allons effectuer des opérations de création, d’écriture, d’ajout et de lecture sur des feuilles de calcul via l’API.

Google Spreadsheet est une suite bureautique Web gratuite gérée par Google. On peut utiliser la feuille de calcul à ses propres fins au sein du service Google Drive.

En ce qui concerne les sites Web, vous pouvez utiliser les feuilles Google à diverses fins. On peut stocker les informations de contact de son utilisateur (téléphone et e-mail), les détails de paiement, les inscriptions à des événements, les activités et bien plus encore dans la feuille Google. Sur le site Web, vous souhaiterez peut-être un système automatisé qui effectue toutes les opérations de lecture et d’écriture sur des feuilles de calcul lorsqu’une action spécifique se déclenche. Cela peut être fait via l’ API Sheets.

Enregistrer une application et créer des informations d’identification

Je vais utiliser OAuth pour interagir avec l’API. OAuth est un moyen plus sécurisé et recommandé d’effectuer des opérations d’API. Suivez les étapes ci-dessous qui sont requises pour l’intégration OAuth.

  • Accédez à la console développeur de Google https://console.developers.google.com
  • Créer un nouveau projet. Alternativement, vous pouvez également sélectionner un projet existant.
  • Donnez un nom à votre projet. Google Console générera un ID de projet unique pour celui-ci.
  • Votre projet apparaîtra en haut de la barre latérale gauche.
  • Cliquez sur Bibliothèque. Vous verrez la liste des API Google.
  • Activez l’API Google Sheets.
  • Cliquez sur les informations d’identification. Sélectionnez Oauth Client id sous Créer des informations d’identification. Choisissez le bouton radio pour l’application Web.
  • Donnez le Nom. Sous Origines JavaScript autorisées, saisissez l’URL de votre domaine. Dans les URI de redirection autorisés, ajoutez le lien de l’URL de redirection. Dans mon cas, j’ai passé l’URL http://localhost/google-sheets-api/callback.php
  • Cliquez sur le bouton Créer. Vous obtiendrez l’ID client et le secret client dans la fenêtre contextuelle. Copiez ces détails. Nous en aurons besoin dans un instant.

Comment intégrer l'API Google Sheets avec PHP

Configuration de base

Comme indiqué, nous utiliserons OAuth pour effectuer les opérations de l’API. Il vous oblige à générer un jeton d’accès qui sert d’identifiant pour votre compte. À l’aide de ce jeton d’accès, les API Google valident si la demande entrante est valide et autorisée.

Le jeton d’accès a une courte durée de vie. Ils expirent bientôt. Et une fois expiré, nous ne pouvons pas faire d’appels d’API car Google traite la demande avec le jeton expiré comme une demande non autorisée. Pour résoudre ce problème, nous utilisons le ‘refresh_token’ pour régénérer le jeton d’accès en arrière-plan. C’est ainsi que fonctionne OAuth.

Commençons à créer le flux OAuth. Créez le composer.jsonfichier et ajoutez-y les lignes ci-dessous.

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

Ensuite, exécutez la commande ci-dessous pour l’installation de ces bibliothèques.

composer install

Lorsque nous générons le jeton d’accès, il doit être stocké dans une base de données. En le stockant, vous pouvez récupérer un jeton à tout moment et effectuer les appels d’API. Exécutez la requête ci-dessous pour créer une table dans la base de données.

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

Maintenant, créez une classe DB qui interagira avec la base de données et récupère, stocke et met à jour les informations de jeton dans la table.

classe-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)");
        }
    }
}

Remplacez les espaces réservés dans le code ci-dessus par vos informations d’identification de base de données réelles. Ici, je suppose que vous souhaitez utiliser un seul compte Google. Si vous avez l’intention d’utiliser plusieurs comptes, modifiez les requêtes selon vos besoins.

Générer un jeton d’accès

Nous avons terminé avec la création d’une table et l’installation des bibliothèques. La prochaine chose à faire est d’autoriser le compte Google et de stocker le jeton d’accès dans la table "token".

Créez un config.phpfichier et écrivez une configuration conformément aux directives de la bibliothèque HybridAuth.

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 );

Assurez-vous de définir les valeurs des constantes GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET. Transmettez également l’URL de rappel dans le code ci-dessus. Lorsque l’utilisateur aura terminé l’autorisation, il sera redirigé vers l’URL de rappel.

À l’aide du callback.phpfichier, nous allons récupérer les détails du jeton d’accès et les stocker dans la base de données comme suit.

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

A ce stade, allez dans le navigateur et exécutez YOUR_DOMAIN_URL/callback.php, il vous redirigera vers le compte Google. Terminez le processus d’autorisation. Après avoir terminé le processus, vérifiez le tableau « jeton ». Il aurait dû stocker les informations du jeton.

Créer une feuille de calcul à l’aide de Sheets API et PHP

Vous avez maintenant stocké le jeton d’accès dans votre table. Cela signifie que vous pouvez procéder aux autres opérations sur les feuilles Google de votre compte. Commençons d’abord par la création d’une feuille de calcul à l’aide de l’API Sheets.

créer-feuille.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.
        }
    }
}

Ce code obtient d’abord les détails du jeton de la base de données. À l’aide de ce jeton, il appelle le service de feuille Google et crée une feuille de calcul. J’ai imprimé l’ID d’une feuille de calcul créée.

Si un jeton d’accès a expiré, le code passe au bloc catch. Dans le bloc catch, il régénère le jeton d’accès, le met à jour dans la base de données et continue l’opération de l’API.

Le même code avec de petits changements sera utilisé pour d’autres opérations sur des feuilles de calcul.

Écrire des données dans une feuille de calcul

Pour effectuer les opérations d’écriture, vous devez passer une plage de cellules à écrire. Par exemple, vous souhaitez ajouter les en-têtes Nom et E-mail en haut. Dans ce cas, votre plage devient « A1 : B1 ». Cela signifie que nous écrirons les en-têtes Nom et E-mail respectivement dans les cellules A1 et B1.

<?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.
        }
    }
}

Ici, j’ai passé l’ID de la feuille de calcul à la méthode. Vous pouvez modifier cette fonction et passer des paramètres supplémentaires. Dans le code précédent, nous avons renvoyé l’ID de la feuille de calcul qui peut être utilisé dans le code ci-dessus. Vous pouvez également obtenir l’ID de la feuille de calcul à partir de l’URL de votre feuille. Voir la capture d’écran ci-dessous.

Comment intégrer l'API Google Sheets avec PHP

La chaîne apparaissant entre « d » et « modifier » est l’ID d’une feuille de calcul Google.

Ajouter des données à une feuille Google

Si vous souhaitez stocker des informations spécifiques dans la feuille Google, vous devez les ajouter à la feuille de calcul existante. Il peut arriver que vous souhaitiez ajouter une ou plusieurs lignes en une seule fois. L’utilisateur peut transmettre un ou plusieurs éléments du tableau et ajouter des données à la feuille comme indiqué ci-dessous.

<?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.
        }
    }
}

J’ai utilisé la plage ‘A1:B1’ et passé 2 éléments de tableau séparés. L’API Sheets ajoute ces détails après les données du tableau. Notez bien que nous passons ‘A1:B1’ dans la plage, cela ne remplacera pas les valeurs déjà écrites dans ces cellules. Au lieu de cela, il écrit des données dans les prochaines cellules disponibles.

Lire les données d’une feuille Google

Nous avons écrit un code pour créer une feuille de calcul, écrire dans une feuille de calcul et ajouter des données à la feuille de calcul. Enfin, voyons comment lire les données d’une feuille Google.

<?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.
        }
    }
}

J’espère que vous comprenez comment intégrer l’API Google Sheets à l’aide de PHP. J’aimerais entendre vos pensées et suggestions dans la section des commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails