...
✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

61

Di recente, ho pubblicato un articolo Come integrare l’API di Fogli Google con PHP in cui ho spiegato come scrivere dati su Fogli Google utilizzando PHP e le API di Google. Uno dei lettori ha chiesto in modo simile come scrivere i dati nel foglio di OneDrive. In questo tutorial, studieremo come utilizzare l’API Microsoft Graph e PHP per scrivere i dati nel foglio OneDrive.

L’API Microsoft Graph segue il flusso OAuth per l’autorizzazione. Ciò significa che dobbiamo generare un token di accesso utilizzando il processo OAuth. Per questo, devi prima registrare l’applicazione e prendere le tue credenziali.

Registra un’applicazione e crea credenziali

Durante l’integrazione di un processo OAuth, è necessario disporre di un ID client e di un segreto client. Lo otterrai dopo aver registrato le applicazioni. Si possono seguire i passaggi menzionati in questa pagina e registrare la propria applicazione con Microsoft.

Accedi al portale di Azure e quindi cerca Registrazione app. Compila il modulo. Devi passare un URL al campo URI di reindirizzamento. A questo campo, sto passando un URL del server locale. Creerò un callback.phpnei prossimi passaggi. Ho compilato i dettagli come mostrato nello screenshot qui sotto.

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Dopo aver inviato un modulo, otterrai l’ID cliente dalla scheda Panoramica.

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Successivamente, vai alla scheda "Certificati e segreti" e fai clic su "Nuovo segreto cliente".

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Si aprirà un popup in cui è necessario aggiungere una descrizione e scegliere l’opzione Scade.

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Successivamente, otterrai il tuo segreto cliente come mostrato di seguito.

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Installa i pacchetti richiesti

Dobbiamo integrare due cose: OAuth e API REST. Per OAuth, userò la libreria Hybridauth. E per interagire con l’API Microsoft Graph usiamo la libreria Guzzle.

Possiamo facilmente installare questi 2 pacchetti utilizzando un Composer. Crea un composer.jsonfile nella directory principale del tuo progetto e aggiungi le righe sottostanti.

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

Esegui il comando sotto che installerà questi pacchetti.

composer install

Come detto, l’API Microsoft Graph utilizza OAuth per eseguire le operazioni API. Richiede di generare un token di accesso che funge da identificatore del tuo account. Usando questo token di accesso, le API Microsoft Graph convalidano se la richiesta in ingresso è valida e autorizzata.

Il token di accesso ha una vita breve. Scadono presto. E una volta scaduto, non possiamo effettuare chiamate API poiché Microsoft tratta la richiesta con il token scaduto come una richiesta non autorizzata. Per risolvere questo problema, utilizziamo "refresh_token" per rigenerare il token di accesso in background. Ecco come funziona OAuth.

Configurazione del database

Per raggiungere il nostro obiettivo, dobbiamo conservare il token in un luogo sicuro. Abbiamo bisogno del token durante la chiamata alle API. Inoltre, dovrebbe rigenerarsi dopo la sua scadenza. Quindi, per memorizzare i dettagli del token, creare una tabella di database come segue.

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

Inseriremo il token nel database dopo aver completato il processo di autorizzazione. Inoltre, aggiorneremo il token in background. Per questo, creerò una classe di database in modo da poter facilmente eseguire le operazioni di inserimento, selezione e aggiornamento.

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

Genera token di accesso

Una volta che sei pronto con i pacchetti e la classe del database richiesti, la parte successiva consiste nell’eseguire l’autenticazione e archiviare i dettagli del token nel database.

La libreria Hybridauth fornisce il proprio processo per eseguire l’autorizzazione. Quindi, seguiamoli. Crea un config.phpfile e aggiungi il codice seguente al suo interno.

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

Assicurati di sostituire tutti i segnaposto con i loro valori effettivi. Ho superato gli ambiti richiesti per il nostro obiettivo finale, quindi tienilo così com’è. Ora, nel callback.phpquale è il mio URL di callback, scriverò un codice che avvia il processo di autenticazione, reindirizza ad esso dopo l’autorizzazione riuscita e memorizza le informazioni sui token nella tabella del database.

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

Esegui callback.phpsul browser, completa il processo di autenticazione. Al completamento dell’autenticazione, dovresti vedere i dettagli del token memorizzati nella tabella "token".

Aggiungi tabella nel foglio OneDriveDrive

Per aggiungere i dati tramite l’API Microsoft Graph, è necessario inserire una tabella nel foglio di OneDrive. Vai alla pagina OneDrive. Fare clic su "Cartella di lavoro di Excel" nel menu a discesa "Nuovo".

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Una volta che sei nella pagina del foglio, fai clic sull’icona "Tabella" e quindi su "OK" dal pop-up aperto.

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Successivamente, vedrai la tabella inserita nel tuo foglio OneDrive come segue.

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Regola le colonne secondo le tue esigenze. Nel mio caso, ho mantenuto 3 colonne.

Ora, ci si può chiedere perché è necessario inserire una tabella nel foglio? Durante la ricerca su questo argomento, ho scoperto che questo è l’unico modo per scrivere dati nella cartella di lavoro di Excel. Puoi leggere di più su questo nella loro documentazione.

Tieni nota quando inseriamo la tabella per la prima volta nel foglio il suo valore è ‘Table1’. Abbiamo bisogno di questo valore al momento della chiamata delle API. Se per qualche motivo, rimuovi la tabella e la inserisci di nuovo, il suo valore diventa "Table2" e così via.

Copia il tuo ID foglio richiesto in una chiamata API. Puoi ottenerlo dall’URL del browser come mostrato nello screenshot qui sotto.

Scrivi dati su OneDrive Sheet utilizzando Microsoft Graph API e PHP

Scrivi dati su un foglio OneDrive con Microsoft Graph API e PHP

Finora, abbiamo finito con l’installazione dei pacchetti richiesti, l’inserimento dei token nel database, la creazione di una cartella di lavoro Excel con una tabella al suo interno. Ora possiamo andare avanti e scrivere un codice che aggiunga i dati al foglio di OneDrive utilizzando l’API Microsoft Graph e PHP.

Sto creando un file append-to-onedrive-sheet.phpe il mio codice sarà come scritto di seguito.

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

Nel codice sopra, ho creato un array che ha l’elemento array con 3 valori. Puoi passare tanti elementi dell’array. Devi passare il tuo ID foglio alla $item_idvariabile.

Questo codice recupera un token di accesso dal database e invia una richiesta POST all’endpoint API richiesto. Se il token scade, lo rigenera automaticamente in background e continua il processo.

Provalo e dovresti vedere che i tuoi dati sono stati aggiunti alla cartella di lavoro di Excel del tuo account OneDrive.

Spero che tu sappia come scrivere dati sul foglio OneDrive utilizzando l’API Microsoft Graph e PHP. Per favore condividi i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.

articoli Correlati

Fonte di registrazione: 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