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

Écrire des données dans une feuille OneDrive à l’aide de l’API Microsoft Graph et de PHP

125

Récemment, j’ai publié un article Comment intégrer l’API Google Sheets avec PHP où j’expliquais comment écrire des données dans la feuille Google à l’aide de PHP et des API Google. L’un des lecteurs a demandé de la même manière comment écrire des données sur la feuille OneDrive. Dans ce tutoriel, nous allons étudier comment utiliser l’API Microsoft Graph et PHP pour écrire les données dans la feuille OneDrive.

L’API Microsoft Graph suit le flux OAuth pour l’autorisation. Cela signifie que nous devons générer un jeton d’accès à l’aide du processus OAuth. Pour cela, vous devez d’abord enregistrer l’application et récupérer vos informations d’identification.

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

Lors de l’intégration d’un processus OAuth, vous devez disposer d’un identifiant client et d’un secret client. Vous l’obtiendrez après avoir enregistré les applications. On peut suivre les étapes mentionnées sur cette page et enregistrer son application auprès de Microsoft.

Connectez-vous au portail Azure, puis recherchez Inscription d’application. Remplissez le formulaire. Vous devez transmettre une URL au champ URI de redirection. À ce champ, je passe une URL de serveur local. Je vais créer un callback.phpdans les prochaines étapes. J’ai rempli les détails comme indiqué dans la capture d’écran ci-dessous.

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Lors de la soumission d’un formulaire, vous obtiendrez l’ID client à partir de l’onglet Aperçu.

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Ensuite, allez dans l’onglet ‘Certificats et secrets’ et cliquez sur le ‘Nouveau secret client’.

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Il ouvrira une fenêtre contextuelle dans laquelle vous devrez ajouter une description et choisir l’option Expire.

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Après cela, vous obtiendrez votre secret client comme indiqué ci-dessous.

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Installer les packages requis

Nous devons intégrer deux choses – OAuth et REST API. Pour l’OAuth, je vais utiliser la bibliothèque Hybridauth. Et pour interagir avec l’API Microsoft Graph, utilisons la bibliothèque Guzzle.

Nous pouvons facilement installer ces 2 packages à l’aide d’un Composer. Créez un composer.jsonfichier dans le répertoire racine de votre projet et ajoutez-y les lignes ci-dessous.

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

Exécutez la commande ci-dessous qui installera ces packages.

composer install

Comme indiqué, l’API Microsoft Graph utilise OAuth pour effectuer les opérations de l’API. Il vous oblige à générer un jeton d’accès qui sert d’identifiant de votre compte. À l’aide de ce jeton d’accès, les API Microsoft Graph 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 Microsoft 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.

Configuration de la base de données

Pour atteindre notre objectif, nous devons stocker le jeton dans un endroit sûr. Nous avons besoin du jeton lors de l’appel des API. En outre, il devrait se régénérer après son expiration. Donc, pour stocker les détails du jeton, créez une table de base de données comme suit.

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

Nous insérerons le jeton dans la base de données après avoir terminé le processus d’autorisation. De plus, nous mettrons à jour le jeton en arrière-plan. Pour cela, je vais créer une classe de base de données afin que nous puissions facilement effectuer les opérations d’insertion, de sélection et de mise à jour.

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

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

Une fois que vous êtes prêt avec les packages et la classe de base de données requis, la partie suivante consiste à effectuer l’authentification et à stocker les détails du jeton dans la base de données.

La bibliothèque Hybridauth fournit son propre processus pour effectuer l’autorisation. Alors, suivons-les. Créez un config.phpfichier et ajoutez-y le code ci-dessous.

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

Assurez-vous de remplacer tous les espaces réservés par leurs valeurs réelles. J’ai passé les portées requises pour notre objectif final, alors gardez-le tel quel. Maintenant, dans callback.phpquelle est mon URL de rappel, je vais écrire un code qui démarre le processus d’authentification, le redirige après une autorisation réussie et stocke les informations des jetons dans la table de la base de données.

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

Exécutez le callback.phpsur le navigateur, terminez le processus d’authentification. Une fois l’authentification terminée, vous devriez voir les détails du jeton stockés dans la table « jetons ».

Ajouter une table dans la feuille OneDrive

Pour ajouter les données via l’API Microsoft Graph, vous devez insérer un tableau dans la feuille OneDrive. Rendez-vous sur la page OneDrive. Cliquez sur le « classeur Excel » dans la liste déroulante « Nouveau ».

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Une fois que vous êtes sur la page de la feuille, cliquez sur l’icône « Tableau » puis sur « OK » dans la fenêtre contextuelle ouverte.

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Après cela, vous verrez le tableau inséré dans votre feuille OneDrive comme suit.

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Ajustez les colonnes selon vos besoins. Dans mon cas, j’ai gardé 3 colonnes.

Maintenant, on peut se demander pourquoi avoir besoin d’insérer un tableau dans la feuille? Lors de mes recherches sur ce sujet, j’ai découvert que c’était le seul moyen d’écrire des données dans le classeur Excel. Vous pouvez en savoir plus à ce sujet sur leur documentation.

Notez que lorsque nous insérons le tableau pour la première fois dans la feuille, sa valeur est « Table1 ». Nous avons besoin de cette valeur au moment de l’appel des API. Si, pour une raison quelconque, vous supprimez le tableau et l’insérez à nouveau, sa valeur devient « Table2 » et ainsi de suite.

Copiez votre ID de feuille qui est requis dans un appel API. Vous pouvez l’obtenir à partir de l’URL du navigateur, comme indiqué dans la capture d’écran ci-dessous.

Écrire des données dans une feuille OneDrive à l'aide de l'API Microsoft Graph et de PHP

Écrire des données dans une feuille OneDrive avec l’API Microsoft Graph et PHP

Jusqu’à présent, nous avons terminé d’installer les packages requis, d’insérer des jetons dans la base de données, de créer un classeur Excel contenant un tableau. Maintenant, nous sommes prêts à écrire un code qui ajoute des données à la feuille OneDrive à l’aide de l’API Microsoft Graph et de PHP.

Je crée un fichier append-to-onedrive-sheet.phpet mon code sera comme écrit ci-dessous.

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

Dans le code ci-dessus, j’ai créé un tableau qui a l’élément de tableau avec 3 valeurs. Vous pouvez passer autant d’éléments de tableau. Vous devez passer votre identifiant de feuille à la $item_idvariable.

Ce code récupère un jeton d’accès dans la base de données et envoie une requête POST au point de terminaison d’API requis. Si le jeton expire, il le régénère automatiquement en arrière-plan et poursuit le processus.

Essayez-le et vous devriez voir que vos données sont ajoutées au classeur Excel de votre compte OneDrive.

J’espère que vous avez appris à écrire des données sur la feuille OneDrive à l’aide de l’API Microsoft Graph et de PHP. S’il vous plaît partager vos pensées et suggestions dans la section 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