{"id":25381,"date":"2021-06-05T14:29:00","date_gmt":"2021-06-05T11:29:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25381"},"modified":"2021-10-18T02:08:48","modified_gmt":"2021-10-17T23:08:48","slug":"ecrire-des-donnees-dans-une-feuille-onedrive-a-l-aide-de-l-api-microsoft-graph-et-de-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/ecrire-des-donnees-dans-une-feuille-onedrive-a-l-aide-de-l-api-microsoft-graph-et-de-php\/","title":{"rendered":"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&rsquo;aide de l&rsquo;API Microsoft Graph et de PHP"},"content":{"rendered":"<p>R\u00e9cemment, j&rsquo;ai publi\u00e9 un article <a href=\"https:\/\/themewp.inform.click\/fr\/comment-integrer-l-api-google-sheets-avec-php\/\" title=\"Comment int\u00e9grer l'API Google Sheets avec PHP\" >Comment int\u00e9grer l&rsquo;API Google Sheets avec PHP<\/a> o\u00f9 j&rsquo;expliquais comment \u00e9crire des donn\u00e9es dans la feuille Google \u00e0 l&rsquo;aide de PHP et des API Google. L&rsquo;un des lecteurs a demand\u00e9 de la m\u00eame mani\u00e8re comment \u00e9crire des donn\u00e9es sur la feuille OneDrive. Dans ce tutoriel, nous allons \u00e9tudier comment utiliser l&rsquo;API Microsoft Graph et PHP pour \u00e9crire les donn\u00e9es dans la feuille OneDrive.<\/p>\n<p>L&rsquo;API Microsoft Graph suit le flux OAuth pour l&rsquo;autorisation. Cela signifie que nous devons g\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s \u00e0 l&rsquo;aide du processus OAuth. Pour cela, vous devez d&rsquo;abord enregistrer l&rsquo;application et r\u00e9cup\u00e9rer vos informations d&rsquo;identification.<\/p>\n<h3>Enregistrer une application et cr\u00e9er des informations d&rsquo;identification<\/h3>\n<p>Lors de l&rsquo;int\u00e9gration d&rsquo;un processus OAuth, vous devez disposer d&rsquo;un identifiant client et d&rsquo;un secret client. Vous l&rsquo;obtiendrez apr\u00e8s avoir enregistr\u00e9 les applications. On peut suivre les \u00e9tapes mentionn\u00e9es sur <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/active-directory\/develop\/quickstart-register-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cette page<\/a> et enregistrer son application aupr\u00e8s de Microsoft.<\/p>\n<p>Connectez-vous au <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">portail Azure<\/a>, puis recherchez Inscription d&rsquo;application. Remplissez le formulaire. Vous devez transmettre une URL au champ URI de redirection. \u00c0 ce champ, je passe une URL de serveur local. Je vais cr\u00e9er un <code>callback.php<\/code>dans les prochaines \u00e9tapes. J&rsquo;ai rempli les d\u00e9tails comme indiqu\u00e9 dans la capture d&rsquo;\u00e9cran ci-dessous.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b181786.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b181786.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<p>Lors de la soumission d&rsquo;un formulaire, vous obtiendrez l&rsquo;ID client \u00e0 partir de l&rsquo;onglet Aper\u00e7u.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b219158.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b219158.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<p>Ensuite, allez dans l&rsquo;onglet &lsquo;Certificats et secrets&rsquo; et cliquez sur le &lsquo;Nouveau secret client&rsquo;.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<p>Il ouvrira une fen\u00eatre contextuelle dans laquelle vous devrez ajouter une description et choisir l&rsquo;option Expire.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<p>Apr\u00e8s cela, vous obtiendrez votre secret client comme indiqu\u00e9 ci-dessous.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<h4>Installer les packages requis<\/h4>\n<p>Nous devons int\u00e9grer deux choses \u2013 OAuth et REST API. Pour l&rsquo;OAuth, je vais utiliser la biblioth\u00e8que <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hybridauth<\/a>. Et pour interagir avec l&rsquo;API Microsoft Graph, utilisons la biblioth\u00e8que <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a>.<\/p>\n<p>Nous pouvons facilement installer ces 2 packages \u00e0 l&rsquo;aide d&rsquo;un Composer. Cr\u00e9ez un <code>composer.json<\/code>fichier dans le r\u00e9pertoire racine de votre projet et ajoutez-y les lignes ci-dessous.<\/p>\n<pre><code>{\n\u00a0\u00a0\u00a0\u00a0\"require\": {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"hybridauth\/hybridauth\": \"~3.0\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"guzzlehttp\/guzzle\": \"^7.0\"\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Ex\u00e9cutez la commande ci-dessous qui installera ces packages.<\/p>\n<pre><code>composer install<\/code><\/pre>\n<p>Comme indiqu\u00e9, l&rsquo;API Microsoft Graph utilise OAuth pour effectuer les op\u00e9rations de l&rsquo;API. Il vous oblige \u00e0 g\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s qui sert d&rsquo;identifiant de votre compte. \u00c0 l&rsquo;aide de ce jeton d&rsquo;acc\u00e8s, les API Microsoft Graph valident si la demande entrante est valide et autoris\u00e9e.<\/p>\n<p>Le jeton d&rsquo;acc\u00e8s a une courte dur\u00e9e de vie. Ils expirent bient\u00f4t. Et une fois expir\u00e9, nous ne pouvons pas faire d&rsquo;appels d&rsquo;API car Microsoft traite la demande avec le jeton expir\u00e9 comme une demande non autoris\u00e9e. Pour r\u00e9soudre ce probl\u00e8me, nous utilisons le &lsquo;refresh_token&rsquo; pour r\u00e9g\u00e9n\u00e9rer le jeton d&rsquo;acc\u00e8s en arri\u00e8re-plan. C&rsquo;est ainsi que fonctionne OAuth.<\/p>\n<h3>Configuration de la base de donn\u00e9es<\/h3>\n<p>Pour atteindre notre objectif, nous devons stocker le jeton dans un endroit s\u00fbr. Nous avons besoin du jeton lors de l&rsquo;appel des API. En outre, il devrait se r\u00e9g\u00e9n\u00e9rer apr\u00e8s son expiration. Donc, pour stocker les d\u00e9tails du jeton, cr\u00e9ez une table de base de donn\u00e9es comme suit.<\/p>\n<pre><code>CREATE TABLE `token` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`access_token` text NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<\/code><\/pre>\n<p>Nous ins\u00e9rerons le jeton dans la base de donn\u00e9es apr\u00e8s avoir termin\u00e9 le processus d&rsquo;autorisation. De plus, nous mettrons \u00e0 jour le jeton en arri\u00e8re-plan. Pour cela, je vais cr\u00e9er une classe de base de donn\u00e9es afin que nous puissions facilement effectuer les op\u00e9rations d&rsquo;insertion, de s\u00e9lection et de mise \u00e0 jour.<\/p>\n<p><strong>classe-db.php<\/strong><\/p>\n<pre><code>&lt;?php\nclass DB {\n\u00a0\u00a0\u00a0\u00a0private $dbHost\u00a0\u00a0\u00a0\u00a0 = \"DB_HOST\";\n\u00a0\u00a0\u00a0\u00a0private $dbUsername = \"DB_USERNAME\";\n\u00a0\u00a0\u00a0\u00a0private $dbPassword = \"DB_PASSWORD\";\n\u00a0\u00a0\u00a0\u00a0private $dbName\u00a0\u00a0\u00a0\u00a0 = \"DB_NAME\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!isset($this-&gt;db)){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Connect to the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$conn = new mysqli($this-&gt;dbHost, $this-&gt;dbUsername, $this-&gt;dbPassword, $this-&gt;dbName);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($conn-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die(\"Failed to connect with MySQL: \". $conn-&gt;connect_error);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}else{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db = $conn;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function is_table_empty() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;db-&gt;query(\"SELECT id FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($result-&gt;num_rows) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_access_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sql = $this-&gt;db-&gt;query(\"SELECT access_token FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $sql-&gt;fetch_assoc();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return json_decode($result['access_token']);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_refersh_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $result-&gt;refresh_token;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function update_access_token($token) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($this-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"INSERT INTO token(access_token) VALUES('$token')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h3>G\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s<\/h3>\n<p>Une fois que vous \u00eates pr\u00eat avec les packages et la classe de base de donn\u00e9es requis, la partie suivante consiste \u00e0 effectuer l&rsquo;authentification et \u00e0 stocker les d\u00e9tails du jeton dans la base de donn\u00e9es.<\/p>\n<p>La biblioth\u00e8que Hybridauth fournit son propre processus pour effectuer l&rsquo;autorisation. Alors, suivons-les. Cr\u00e9ez un <code>config.php<\/code>fichier et ajoutez-y le code ci-dessous.<\/p>\n<p><strong>config.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\nrequire_once 'class-db.php';\n\u00a0\ndefine('ONEDRIVE_CLIENT_ID', 'CLIENT_ID_HERE');\ndefine('ONEDRIVE_CLIENT_SECRET', 'CLIENT_SECRET_HERE');\ndefine('ONEDRIVE_SCOPE', 'files.read files.read.all files.readwrite files.readwrite.all offline_access');\ndefine('ONEDRIVE_CALLBACK_URL', 'CALLBACK_URL_HERE'); \/\/ in my case it is http:\/\/localhost\/sajid\/onedrive\/callback.php\n\u00a0\n$config = [\n\u00a0\u00a0\u00a0\u00a0'callback' =&gt; ONEDRIVE_CALLBACK_URL,\n\u00a0\u00a0\u00a0\u00a0'keys'\u00a0\u00a0\u00a0\u00a0 =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'id' =&gt; ONEDRIVE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; ONEDRIVE_CLIENT_SECRET\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0'scope'\u00a0\u00a0\u00a0 =&gt; ONEDRIVE_SCOPE,\n\u00a0\u00a0\u00a0\u00a0'authorize_url_parameters' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'approval_prompt' =&gt; 'force',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access_type' =&gt; 'offline'\n\u00a0\u00a0\u00a0\u00a0]\n];\n\u00a0\n$adapter = new HybridauthProviderMicrosoftGraph( $config );<\/code><\/pre>\n<p>Assurez-vous de remplacer tous les espaces r\u00e9serv\u00e9s par leurs valeurs r\u00e9elles. J&rsquo;ai pass\u00e9 les port\u00e9es requises pour notre objectif final, alors gardez-le tel quel. Maintenant, dans <code>callback.php<\/code>quelle est mon URL de rappel, je vais \u00e9crire un code qui d\u00e9marre le processus d&rsquo;authentification, le redirige apr\u00e8s une autorisation r\u00e9ussie et stocke les informations des jetons dans la table de la base de donn\u00e9es.<\/p>\n<p><strong>rappel.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$adapter-&gt;authenticate();\n\u00a0\u00a0\u00a0\u00a0$token = $adapter-&gt;getAccessToken();\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\u00a0\u00a0\u00a0if($db-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($token));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Access token inserted successfully.\";\n\u00a0\u00a0\u00a0\u00a0}\n}\ncatch( Exception $e ){\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage() ;\n}<\/code><\/pre>\n<p>Ex\u00e9cutez le <code>callback.php<\/code>sur le navigateur, terminez le processus d&rsquo;authentification. Une fois l&rsquo;authentification termin\u00e9e, vous devriez voir les d\u00e9tails du jeton stock\u00e9s dans la table \u00ab\u00a0jetons\u00a0\u00bb.<\/p>\n<h3>Ajouter une table dans la feuille OneDrive<\/h3>\n<p>Pour ajouter les donn\u00e9es via l&rsquo;API Microsoft Graph, vous devez ins\u00e9rer un tableau dans la feuille OneDrive. Rendez-vous sur la page OneDrive. Cliquez sur le \u00ab\u00a0classeur Excel\u00a0\u00bb dans la liste d\u00e9roulante \u00ab\u00a0Nouveau\u00a0\u00bb.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<p>Une fois que vous \u00eates sur la page de la feuille, cliquez sur l&rsquo;ic\u00f4ne \u00ab\u00a0Tableau\u00a0\u00bb puis sur \u00ab\u00a0OK\u00a0\u00bb dans la fen\u00eatre contextuelle ouverte.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<p>Apr\u00e8s cela, vous verrez le tableau ins\u00e9r\u00e9 dans votre feuille OneDrive comme suit.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<p>Ajustez les colonnes selon vos besoins. Dans mon cas, j&rsquo;ai gard\u00e9 3 colonnes.<\/p>\n<p>Maintenant, on peut se demander pourquoi avoir besoin d&rsquo;ins\u00e9rer un tableau dans la feuille? Lors de mes recherches sur ce sujet, j&rsquo;ai d\u00e9couvert que c&rsquo;\u00e9tait le seul moyen d&rsquo;\u00e9crire des donn\u00e9es dans le classeur Excel. Vous pouvez en savoir plus \u00e0 ce sujet sur leur <a href=\"https:\/\/docs.microsoft.com\/en-us\/graph\/excel-write-to-workbook\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentation<\/a>.<\/p>\n<p>Notez que lorsque nous ins\u00e9rons le tableau pour la premi\u00e8re fois dans la feuille, sa valeur est \u00ab\u00a0Table1\u00a0\u00bb. Nous avons besoin de cette valeur au moment de l&rsquo;appel des API. Si, pour une raison quelconque, vous supprimez le tableau et l&rsquo;ins\u00e9rez \u00e0 nouveau, sa valeur devient \u00ab\u00a0Table2\u00a0\u00bb et ainsi de suite.<\/p>\n<p>Copiez votre ID de feuille qui est requis dans un appel API. Vous pouvez l&rsquo;obtenir \u00e0 partir de l&rsquo;URL du navigateur, comme indiqu\u00e9 dans la capture d&rsquo;\u00e9cran ci-dessous.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"\u00c9crire des donn\u00e9es dans une feuille OneDrive \u00e0 l&#039;aide de l&#039;API Microsoft Graph et de PHP\" ><\/a><\/p>\n<h3>\u00c9crire des donn\u00e9es dans une feuille OneDrive avec l&rsquo;API Microsoft Graph et PHP<\/h3>\n<p>Jusqu&rsquo;\u00e0 pr\u00e9sent, nous avons termin\u00e9 d&rsquo;installer les packages requis, d&rsquo;ins\u00e9rer des jetons dans la base de donn\u00e9es, de cr\u00e9er un classeur Excel contenant un tableau. Maintenant, nous sommes pr\u00eats \u00e0 \u00e9crire un code qui ajoute des donn\u00e9es \u00e0 la feuille OneDrive \u00e0 l&rsquo;aide de l&rsquo;API Microsoft Graph et de PHP.<\/p>\n<p>Je cr\u00e9e un fichier <code>append-to-onedrive-sheet.php<\/code>et mon code sera comme \u00e9crit ci-dessous.<\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\n\/\/ here you can pass as many data as a separate array element\n$arr_data = [\n\u00a0\u00a0\u00a0\u00a0['John Doe', 'john@test.com', '8888888888']\n];\n\u00a0\nappend_to_sheet($arr_data);\n\u00a0\nfunction append_to_sheet($arr_data = array()) {\n\u00a0\u00a0\u00a0\u00a0$item_id = 'YOUR_SHEET_ID';\n\u00a0\u00a0\u00a0\u00a0$table = 'Table1'; \/\/in your case it can be Table2, Table3, ...\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_token = (array) $db-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0$accessToken = $arr_token['access_token'];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/graph.microsoft.com',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request(\"POST\", \"\/v1.0\/me\/drive\/items\/$item_id\/workbook\/tables\/$table\/rows\/add\", [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'json' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'values' =&gt; $arr_data\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'headers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Authorization' =&gt; 'Bearer '. $accessToken\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'verify' =&gt; false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if( 401 == $e-&gt;getCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$refresh_token = $db-&gt;get_refersh_token();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/login.microsoftonline.com']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/common\/oauth2\/v2.0\/token', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"refresh_token\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"refresh_token\" =&gt; $refresh_token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_id\" =&gt; ONEDRIVE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_secret\" =&gt; ONEDRIVE_CLIENT_SECRET,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"scope\" =&gt; ONEDRIVE_SCOPE,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"redirect_uri\" =&gt; ONEDRIVE_CALLBACK_URL,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token($response-&gt;getBody());\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0append_to_sheet($arr_data);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage(); \/\/print the error just in case your video is not uploaded.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Dans le code ci-dessus, j&rsquo;ai cr\u00e9\u00e9 un tableau qui a l&rsquo;\u00e9l\u00e9ment de tableau avec 3 valeurs. Vous pouvez passer autant d&rsquo;\u00e9l\u00e9ments de tableau. Vous devez passer votre identifiant de feuille \u00e0 la <code>$item_id<\/code>variable.<\/p>\n<p>Ce code r\u00e9cup\u00e8re un jeton d&rsquo;acc\u00e8s dans la base de donn\u00e9es et envoie une requ\u00eate POST au point de terminaison d&rsquo;API requis. Si le jeton expire, il le r\u00e9g\u00e9n\u00e8re automatiquement en arri\u00e8re-plan et poursuit le processus.<\/p>\n<p>Essayez-le et vous devriez voir que vos donn\u00e9es sont ajout\u00e9es au classeur Excel de votre compte OneDrive.<\/p>\n<p>J&rsquo;esp\u00e8re que vous avez appris \u00e0 \u00e9crire des donn\u00e9es sur la feuille OneDrive \u00e0 l&rsquo;aide de l&rsquo;API Microsoft Graph et de PHP. S&rsquo;il vous pla\u00eet partager vos pens\u00e9es et suggestions dans la section commentaires ci-dessous.<\/p>\n<h4>Articles Li\u00e9s<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/speech-to-text-a-l-aide-d-amazon-transcribe-en-php\/\" title=\"Speech-To-Text \u00e0 l&#039;aide d&#039;Amazon Transcribe en PHP\">Speech-To-Text \u00e0 l&rsquo;aide d&rsquo;Amazon Transcribe en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/envoyer-un-e-mail-a-l-aide-de-mailjet-alternative-au-serveur-smtp-de-gmail-en-php\/\" title=\"Envoyer un e-mail avec Mailjet en PHP\">Envoyer un e-mail avec Mailjet en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/integration-de-la-passerelle-de-paiement-paypal-dans-php-a-l-aide-de-l-api-rest-paypal\/\" title=\"Int\u00e9gration de la passerelle de paiement PayPal dans PHP \u00e0 l&#039;aide de l&#039;API REST PayPal\">Int\u00e9gration de la passerelle de paiement PayPal dans PHP \u00e0 l&rsquo;aide de l&rsquo;API REST PayPal<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article, nous \u00e9tudions comment \u00e9crire des donn\u00e9es sur la feuille OneDrive \u00e0 l&rsquo;aide de l&rsquo;API Microsoft Graph et de PHP. L&rsquo;API Microsoft Graph suit le flux OAuth pour<\/p>\n","protected":false},"author":1,"featured_media":20342,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[205,273],"tags":[844],"class_list":["post-25381","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-4","category-php-4","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/25381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/comments?post=25381"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/25381\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/20342"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=25381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=25381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=25381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}