✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo integrar la API de Google Sheets con PHP

2.863

En el pasado, trabajé en un proyecto en el que queríamos escribir datos de forma dinámica en la hoja de cálculo de Google. Para lograrlo, interactuamos con la API de Hojas de cálculo. Me pareció un tema interesante para la publicación del blog. Entonces, en este artículo, estudiamos cómo integrar la API de Google Sheets usando PHP. Vamos a realizar operaciones de creación, escritura, adición y lectura en hojas de cálculo a través de la API.

Google Spreadsheet es un paquete de software de oficina gratuito basado en la web mantenido por Google. Uno puede usar la hoja de cálculo para su propio propósito dentro del servicio Google Drive.

Cuando se trata de sitios web, puede utilizar las hojas de Google para diversos fines. Uno puede almacenar la información de contacto de su usuario (teléfono y correo electrónico), detalles de pago, registros de eventos, actividades y mucho más en la hoja de Google. En el sitio web, es posible que desee un sistema automatizado que realice todas las operaciones de lectura y escritura en hojas de cálculo cuando se active una acción específica. Se puede hacer a través de la API de Hojas de cálculo.

Registre una aplicación y cree credenciales

Voy a usar OAuth para interactuar con la API. OAuth es una forma más segura y recomendada de realizar operaciones de API. Siga los pasos a continuación que son necesarios para la integración de OAuth.

  • Vaya a la Consola para desarrolladores de Google https://console.developers.google.com
  • Crea un nuevo proyecto. Alternativamente, también puede seleccionar un proyecto existente.
  • Dale un nombre a tu proyecto. Google Console generará un ID de proyecto único para él.
  • Su proyecto aparecerá en la parte superior de la barra lateral izquierda.
  • Haga clic en Biblioteca. Verá la lista de API de Google.
  • Habilite la API de Google Sheets.
  • Haga clic en Credenciales. Seleccione ID de cliente de Oauth en Crear credenciales. Elija el botón de opción para la aplicación web.
  • Dar el nombre. En Orígenes de JavaScript autorizados, ingrese la URL de su dominio. En los URI de redireccionamiento autorizados, agregue el enlace de la URL de redireccionamiento. En mi caso pasé la URL http: //localhost/google-sheets-api/callback.php
  • Haga clic en el botón Crear. Obtendrá la identificación del cliente y el secreto del cliente en la ventana emergente. Copie estos detalles. Lo necesitaremos en un momento.

Cómo integrar la API de Google Sheets con PHP

Configuracion basica

Como se dijo, usaremos OAuth para realizar las operaciones de la API. Requiere que genere un token de acceso que actúa como un identificador para su cuenta. Con este token de acceso, las API de Google validan si la solicitud entrante es válida y está autorizada.

El token de acceso tiene una vida corta. Caducan pronto. Y una vez caducado, no podemos realizar llamadas a la API ya que Google trata la solicitud con el token caducado como una solicitud no autorizada. Para resolver este problema, usamos el ‘refresh_token’ para regenerar el token de acceso en segundo plano. Así es como funciona OAuth.

Comencemos a construir el flujo de OAuth. Cree el composer.jsonarchivo y agregue las siguientes líneas en él.

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

A continuación, ejecute el siguiente comando para la instalación de estas bibliotecas.

composer install

Cuando generamos el token de acceso, debe almacenarse en una base de datos. Al almacenarlo, puede obtener un token en cualquier momento y realizar las llamadas a la API. Ejecute la siguiente consulta para crear una tabla en la base de datos.

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

Ahora, cree una clase de base de datos que interactúe con la base de datos y recupere, almacene y actualice la información del token en la tabla.

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

Reemplace los marcadores de posición en el código anterior con sus credenciales de base de datos reales. Aquí supongo que desea utilizar una sola cuenta de Google. Si tiene la intención de utilizar varias cuentas, modifique las consultas según sus requisitos.

Generar token de acceso

Hemos terminado con la creación de una tabla y la instalación de bibliotecas. Lo siguiente que debe hacer es autorizar la cuenta de Google y almacenar el token de acceso en la tabla ‘token’.

Cree un config.phparchivo y escriba una configuración según las pautas de la biblioteca 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 );

Asegúrese de definir los valores de las constantes GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET. Además, pase la URL de devolución de llamada en el código anterior. Cuando el usuario complete la autorización, lo redireccionará a la URL de devolución de llamada.

Usando el callback.phparchivo, obtendremos los detalles del token de acceso y los almacenaremos en la base de datos de la siguiente manera.

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

En esta etapa, vaya al navegador y ejecute YOUR_DOMAIN_URL / callback.php, lo redireccionará a la cuenta de Google. Completa el proceso de autorización. Después de completar el proceso, consulte la tabla ‘token’. Debería haber almacenado la información del token.

Cree una hoja de cálculo usando Sheets API y PHP

Ahora ha almacenado el token de acceso en su tabla. Significa que puede continuar con las operaciones adicionales en las hojas de Google de su cuenta. Primero comencemos con la creación de la hoja de cálculo usando la API de Hojas de cálculo.

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

Este código primero obtiene los detalles del token de la base de datos. Con este token, llama al servicio de hojas de Google y crea una hoja de cálculo. Imprimí el ID de una hoja de cálculo creada.

Si un token de acceso caduca, el código va al bloque de captura. En el bloque de captura, regenera el token de acceso, lo actualiza en la base de datos y continúa la operación de la API.

El mismo código con pequeños cambios de bits se utilizará para otras operaciones en hojas de cálculo.

Escribir datos en una hoja de cálculo

Para realizar las operaciones de escritura, debe pasar un rango de celdas a escribir. Por ejemplo, desea agregar encabezados Nombre y Correo electrónico en la parte superior. En ese caso, su rango se convierte en ‘A1: B1’. Significa que escribiremos los títulos Nombre y Correo electrónico en las celdas A1 y B1 respectivamente.

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

Aquí, he pasado el ID de la hoja de cálculo al método. Puede modificar esta función y pasar parámetros adicionales. En el código anterior, hemos devuelto el ID de la hoja de cálculo que se puede utilizar en el código anterior. Alternativamente, puede obtener el ID de la hoja de cálculo de la URL de su hoja. Vea la captura de pantalla a continuación.

Cómo integrar la API de Google Sheets con PHP

La cadena que aparece entre ‘d’ y ‘editar’ es el ID de una hoja de cálculo de Google.

Agregar datos a una hoja de Google

Si está buscando almacenar información específica en la hoja de Google, debe agregarla a la hoja de cálculo existente. Puede haber casos en los que desee agregar una o más filas de una sola vez. El usuario puede pasar los elementos de matriz únicos o múltiples y agregar datos a la hoja como se muestra a continuación.

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

Utilicé el rango ‘A1: B1’ y pasé 2 elementos de matriz separados. La API de Hojas de cálculo agrega estos detalles después de los datos de la tabla. Tenga en cuenta que, aunque estamos pasando ‘A1: B1’ en el rango, no reemplazará los valores ya escritos en estas celdas. En cambio, escribe datos en las siguientes celdas disponibles.

Leer datos de una hoja de Google

Hemos escrito un código para crear una hoja de cálculo, escribir en una hoja de cálculo y agregar datos a la hoja de cálculo. Finalmente, veamos cómo leer datos de una hoja de 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.
        }
    }
}

Espero que comprenda cómo integrar la API de Google Sheets usando PHP. Me gustaría escuchar sus pensamientos y sugerencias en la sección de comentarios a continuación.

Artículos relacionados

Fuente de grabación: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More