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

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

194

Recientemente, publiqué un artículo Cómo integrar la API de Google Sheets con PHP donde expliqué cómo escribir datos en la hoja de Google utilizando PHP y las API de Google. Uno de los lectores preguntó de manera similar cómo escribir datos en la Hoja de OneDrive. En este tutorial, estudiaremos cómo usar Microsoft Graph API y PHP para escribir los datos en la hoja de OneDrive.

La API de Microsoft Graph sigue el flujo de OAuth para la autorización. Eso significa que necesitamos generar un token de acceso utilizando el proceso OAuth. Para ello, primero debe registrar la aplicación y obtener sus credenciales.

Registre una aplicación y cree credenciales

Al integrar un proceso de OAuth, debe tener una identificación de cliente y un secreto de cliente. Lo obtendrá después de registrar las aplicaciones. Uno puede seguir los pasos mencionados en esta página y registrar su aplicación con Microsoft.

Inicie sesión en Azure Portal y luego busque Registro de aplicaciones. Rellena el formulario. Debe pasar una URL al campo Redirigir URI. A este campo, le estoy pasando una URL de servidor local. Crearé un callback.phpen los siguientes pasos. He completado los detalles como se muestra en la captura de pantalla a continuación.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

Al enviar un formulario, obtendrá el ID de cliente de la pestaña Descripción general.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

A continuación, vaya a la pestaña ‘Certificados y secretos’ y haga clic en ‘Nuevo secreto de cliente’.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

Se abrirá una ventana emergente donde debe agregar una descripción y elegir la opción Caduca.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

Después de esto, obtendrá su secreto de cliente como se muestra a continuación.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

Instalar paquetes requeridos

Tenemos que integrar dos cosas: OAuth y REST API. Para OAuth, usaré la biblioteca Hybridauth. Y para interactuar con la API de Microsoft Graph, usemos la biblioteca Guzzle.

Podemos instalar fácilmente estos 2 paquetes usando un Compositor. Cree un composer.jsonarchivo en el directorio raíz de su proyecto y agréguele las siguientes líneas.

{
    "require": {
        "hybridauth/hybridauth": "~3.0",
        "guzzlehttp/guzzle": "^7.0"
    }
}

Ejecute el comando a continuación que instalará estos paquetes.

composer install

Como se dijo, la API de Microsoft Graph usa OAuth para realizar las operaciones de la API. Requiere que genere un token de acceso que actúa como un identificador de su cuenta. Con este token de acceso, las API de Microsoft Graph 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 hacer llamadas a la API ya que Microsoft 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.

Configuración de la base de datos

Para lograr nuestro objetivo, debemos almacenar el token en un lugar seguro. Necesitamos el token mientras llamamos a las API. Además, debería regenerarse después de su vencimiento. Entonces, para almacenar los detalles del token, cree una tabla de base de datos de la siguiente manera.

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

Insertaremos el token en la base de datos después de completar el proceso de autorización. Además, actualizaremos el token en segundo plano. Para esto, voy a crear una clase de base de datos para que podamos hacer fácilmente las operaciones de inserción, selección y actualización.

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

Generar token de acceso

Una vez que esté listo con los paquetes requeridos y la clase de base de datos, la siguiente parte es realizar la autenticación y almacenar los detalles del token en la base de datos.

La biblioteca Hybridauth proporciona su propio proceso para realizar la autorización. Entonces, sigámoslos. Cree un config.phparchivo y agregue el siguiente código en él.

config.php

<?php
require_once 'vendor/autoload.php';
require_once 'class-db.php';
 
define('ONEDRIVE_CLIENT_ID', 'CLIENT_ID_HERE');
define('ONEDRIVE_CLIENT_SECRET', 'CLIENT_SECRET_HERE');
define('ONEDRIVE_SCOPE', 'files.read files.read.all files.readwrite files.readwrite.all offline_access');
define('ONEDRIVE_CALLBACK_URL', 'CALLBACK_URL_HERE'); // in my case it is http://localhost/sajid/onedrive/callback.php
 
$config = [
    'callback' => ONEDRIVE_CALLBACK_URL,
    'keys'     => [
                    'id' => ONEDRIVE_CLIENT_ID,
                    'secret' => ONEDRIVE_CLIENT_SECRET
                ],
    'scope'    => ONEDRIVE_SCOPE,
    'authorize_url_parameters' => [
            'approval_prompt' => 'force',
            'access_type' => 'offline'
    ]
];
 
$adapter = new HybridauthProviderMicrosoftGraph( $config );

Asegúrese de reemplazar todos los marcadores de posición con sus valores reales. Pasé los alcances requeridos para nuestro objetivo final, así que manténgalo como está. Ahora, en callback.phpcuál es mi URL de devolución de llamada, escribiré un código que inicia el proceso de autenticación, lo redirecciona después de una autorización exitosa y almacena la información de los tokens en la tabla de la base de datos.

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

Ejecute el callback.phpen el navegador, complete el proceso de autenticación. Una vez completada la autenticación, debería ver los detalles del token almacenados dentro de la tabla ‘tokens’.

Agregar tabla en la hoja de OneDrive

Para agregar los datos a través de la API de Microsoft Graph, debe insertar una tabla en la hoja de OneDrive. Dirígete a la página de OneDrive. Haga clic en el ‘libro de trabajo de Excel’ debajo del menú desplegable ‘Nuevo’.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

Una vez que esté en la página de la hoja, haga clic en el icono ‘Tabla’ y luego en ‘Aceptar’ en la ventana emergente abierta.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

Después de esto, verá la Tabla insertada en su hoja de OneDrive de la siguiente manera.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

Ajuste las columnas según sus requisitos. En mi caso, mantuve 3 columnas.

Ahora, uno puede preguntarse por qué es necesario insertar una tabla en la hoja. Cuando estaba investigando este tema, descubrí que esta es la única forma de escribir datos en el libro de Excel. Puede leer más sobre esto en su documentación.

Tome nota cuando insertemos la tabla por primera vez en la hoja, su valor es ‘Table1’. Necesitamos este valor en el momento de llamar a las API. Si por alguna razón, quita la tabla y la inserta nuevamente, su valor se convierte en ‘Table2’ y así sucesivamente.

Copie su ID de hoja que se requiere en una llamada API. Puede obtenerlo desde la URL del navegador como se muestra en la captura de pantalla a continuación.

Escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP

Escribir datos en la hoja de OneDrive con Microsoft Graph API y PHP

Hasta ahora, hemos terminado con la instalación de los paquetes necesarios, la inserción de tokens en la base de datos y la creación de un libro de Excel con una tabla. Ahora, estamos listos para seguir adelante y escribir un código que agregue datos a la hoja de OneDrive usando la API de Microsoft Graph y PHP.

Estoy creando un archivo append-to-onedrive-sheet.phpy mi código será como se escribe a continuación.

<?php
require_once 'config.php';
 
// here you can pass as many data as a separate array element
$arr_data = [
    ['John Doe', '[email protected]', '8888888888']
];
 
append_to_sheet($arr_data);
 
function append_to_sheet($arr_data = array()) {
    $item_id = 'YOUR_SHEET_ID';
    $table = 'Table1'; //in your case it can be Table2, Table3, ...
 
    $db = new DB();
 
    $arr_token = (array) $db->get_access_token();
    $accessToken = $arr_token['access_token'];
 
    try {
 
        $client = new GuzzleHttpClient([
            // Base URI is used with relative requests
            'base_uri' => 'https://graph.microsoft.com',
        ]);
 
        $response = $client->request("POST", "/v1.0/me/drive/items/$item_id/workbook/tables/$table/rows/add", [
            'json' => [
                'values' => $arr_data
            ],
            'headers' => [
                'Authorization' => 'Bearer '. $accessToken
            ],
            'verify' => false,
        ]);
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
 
            $client = new GuzzleHttpClient(['base_uri' => 'https://login.microsoftonline.com']);
 
            $response = $client->request('POST', '/common/oauth2/v2.0/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => ONEDRIVE_CLIENT_ID,
                    "client_secret" => ONEDRIVE_CLIENT_SECRET,
                    "scope" => ONEDRIVE_SCOPE,
                    "redirect_uri" => ONEDRIVE_CALLBACK_URL,
                ],
            ]);
 
            $db->update_access_token($response->getBody());
 
            append_to_sheet($arr_data);
        } else {
            echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}

En el código anterior, creé una matriz que tiene el elemento de matriz con 3 valores. Puede pasar tantos elementos de matriz. Tienes que pasar tu ID de hoja a la $item_idvariable.

Este código obtiene un token de acceso de la base de datos y envía una solicitud POST al punto final de API requerido. Si el token caduca, lo regenera automáticamente en segundo plano y continúa el proceso.

Pruébelo y verá que sus datos se adjuntan al libro de Excel de su cuenta de OneDrive.

Espero que sepas cómo escribir datos en la hoja de OneDrive usando Microsoft Graph API y PHP. Comparta 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