{"id":29143,"date":"2021-06-05T14:19:00","date_gmt":"2021-06-05T11:19:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29143"},"modified":"2021-10-17T04:25:19","modified_gmt":"2021-10-17T01:25:19","slug":"skriv-data-till-onedrive-ark-med-microsoft-graph-api-och-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/skriv-data-till-onedrive-ark-med-microsoft-graph-api-och-php\/","title":{"rendered":"Skriv data till OneDrive-ark med Microsoft Graph API och PHP"},"content":{"rendered":"<p>Nyligen har jag publicerat en artikel <a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-integrerar-google-sheets-api-med-php\/\" title=\"Hur man integrerar Google Sheets API med PHP\" >Hur man integrerar Google Sheets API med PHP<\/a> d\u00e4r jag f\u00f6rklarade hur man skriver data till Google Sheet med PHP och Google API. En av l\u00e4sarna fr\u00e5gade p\u00e5 liknande s\u00e4tt hur man skulle skriva data till OneDrive-arket. I den h\u00e4r handledningen studerar vi hur man anv\u00e4nder Microsoft Graph API och PHP f\u00f6r att skriva data i OneDrive-arket.<\/p>\n<p>Microsoft Graph API f\u00f6ljer OAuth-fl\u00f6det f\u00f6r auktoriseringen. Det betyder att vi m\u00e5ste skapa en \u00e5tkomsttoken med OAuth-processen. F\u00f6r detta m\u00e5ste du f\u00f6rst registrera applikationen och ta dina referenser.<\/p>\n<h3>Registrera en ans\u00f6kan och skapa referenser<\/h3>\n<p>N\u00e4r du integrerar en OAuth-process m\u00e5ste du ha ett klient-id och en klienthemlighet. Du f\u00e5r det efter att du registrerat ans\u00f6kningarna. Man kan f\u00f6lja stegen som n\u00e4mns p\u00e5 den <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/active-directory\/develop\/quickstart-register-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4r sidan<\/a> och registrera deras applikation hos Microsoft.<\/p>\n<p>Logga in p\u00e5 <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Azure Portal<\/a> och s\u00f6k sedan efter appregistrering. Fyll i formul\u00e4ret. Du m\u00e5ste skicka en URL till URI-f\u00e4ltet Redirect. Till det h\u00e4r f\u00e4ltet skickar jag en lokal server-URL. Jag skapar en <code>callback.php<\/code>i n\u00e4sta steg. Jag har fyllt i detaljerna som visas p\u00e5 sk\u00e4rmdumpen nedan.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<p>N\u00e4r du skickar ett formul\u00e4r f\u00e5r du klient-ID fr\u00e5n fliken \u00d6versikt.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<p>G\u00e5 sedan till fliken &#8217;Certifikat och hemligheter&#8217; och klicka p\u00e5 &#8217;Ny klienthemlighet&#8217;.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<p>Det \u00f6ppnar en popup d\u00e4r du beh\u00f6ver l\u00e4gga till en beskrivning och v\u00e4lja alternativet Utg\u00e5r.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<p>Efter detta f\u00e5r du din klienthemlighet som visas nedan.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<h4>Installera obligatoriska paket<\/h4>\n<p>Vi m\u00e5ste integrera tv\u00e5 saker &#8211; OAuth och REST API. F\u00f6r OAuth ska jag anv\u00e4nda <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hybridauth-<\/a> biblioteket. Och f\u00f6r att interagera med Microsoft Graph API, l\u00e5t oss anv\u00e4nda <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle-<\/a> biblioteket.<\/p>\n<p>Vi kan enkelt installera dessa tv\u00e5 paket med en Composer. Skapa en <code>composer.json<\/code>fil i din projektkatalog och l\u00e4gg till nedanst\u00e5ende rader i den.<\/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>K\u00f6r kommandot nedan som kommer att installera dessa paket.<\/p>\n<pre><code>composer install<\/code><\/pre>\n<p>Som sagt anv\u00e4nder Microsoft Graph API OAuth f\u00f6r att utf\u00f6ra API-operationerna. Det kr\u00e4ver att du genererar en \u00e5tkomsttoken som fungerar som en identifierare f\u00f6r ditt konto. Med hj\u00e4lp av denna \u00e5tkomsttoken validerar Microsoft Graph API: er om den inkommande beg\u00e4ran \u00e4r giltig och auktoriserad.<\/p>\n<p>\u00c5tkomsttoken har kort livsl\u00e4ngd. De upph\u00f6r snart. Och n\u00e4r den har l\u00f6pt ut kan vi inte g\u00f6ra API-samtal eftersom Microsoft behandlar beg\u00e4ran med den utg\u00e5ngna token som en obeh\u00f6rig beg\u00e4ran. F\u00f6r att l\u00f6sa problemet anv\u00e4nder vi &#8217;refresh_token&#8217; f\u00f6r att \u00e5terskapa \u00e5tkomsttoken i bakgrunden. S\u00e5 h\u00e4r fungerar OAuth.<\/p>\n<h3>Databaskonfiguration<\/h3>\n<p>F\u00f6r att uppn\u00e5 v\u00e5rt m\u00e5l m\u00e5ste vi lagra symbolen p\u00e5 en s\u00e4ker plats. Vi beh\u00f6ver token n\u00e4r vi ringer till API: er. Det b\u00f6r ocks\u00e5 regenereras n\u00e4r det har l\u00f6pt ut. S\u00e5 f\u00f6r att lagra tokeninformation skapar du en databastabell enligt f\u00f6ljande.<\/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>Vi s\u00e4tter in token i databasen efter att auktoriseringsprocessen har slutf\u00f6rts. Vi kommer ocks\u00e5 att uppdatera token i bakgrunden. F\u00f6r detta ska jag skapa en databasklass s\u00e5 att vi enkelt kan g\u00f6ra ins\u00e4ttnings-, markerings- och uppdaterings\u00e5tg\u00e4rder.<\/p>\n<p><strong>klass-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>Skapa \u00e5tkomsttoken<\/h3>\n<p>N\u00e4r du \u00e4r redo med de obligatoriska paketen och databasklassen g\u00f6r n\u00e4sta del autentisering och lagring av tokeninformation i databasen.<\/p>\n<p>Hybridauth-biblioteket tillhandah\u00e5ller sin egen process f\u00f6r att utf\u00f6ra auktorisering. S\u00e5, l\u00e5t oss f\u00f6lja dem. Skapa en <code>config.php<\/code>fil och l\u00e4gg till koden nedan i den.<\/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>Se till att ers\u00e4tta alla platsh\u00e5llare med deras faktiska v\u00e4rden. Jag har klarat de n\u00f6dv\u00e4ndiga r\u00e4ckvidden f\u00f6r v\u00e5rt slutm\u00e5l s\u00e5 h\u00e5ll det som det \u00e4r. Nu, i <code>callback.php<\/code>vilken \u00e4r min \u00e5teruppringnings-URL, skriver jag en kod som startar autentiseringsprocessen, omdirigerar till den efter lyckad auktorisering och lagrar tokensinformationen i databastabellen.<\/p>\n<p><strong>callback.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>K\u00f6r i <code>callback.php<\/code>webbl\u00e4saren, slutf\u00f6r autentiseringsprocessen. N\u00e4r autentiseringen \u00e4r klar b\u00f6r du se tokeninformation lagrad i tabellen &#8217;tokens&#8217;.<\/p>\n<h3>L\u00e4gg till tabell i OneDrive-ark<\/h3>\n<p>F\u00f6r att l\u00e4gga till data via Microsoft Graph API m\u00e5ste du infoga en tabell i OneDrive-arket. G\u00e5 \u00f6ver till OneDrive-sidan. Klicka p\u00e5 &quot;Excel-arbetsbok&quot; under rullgardinsmenyn &quot;Ny&quot;.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<p>N\u00e4r du v\u00e4l \u00e4r p\u00e5 arksidan klickar du p\u00e5 &quot;Tabell&quot; -ikonen och sedan &quot;OK&quot; fr\u00e5n det \u00f6ppnade popup-f\u00f6nstret.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<p>Efter detta ser du tabellen infogad i ditt OneDrive-ark enligt f\u00f6ljande.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<p>Justera kolumnerna enligt dina behov. I mitt fall beh\u00f6ll jag tre kolumner.<\/p>\n<p>Nu kan man fr\u00e5ga varf\u00f6r behovet av att infoga en tabell i arket? N\u00e4r jag unders\u00f6kte detta \u00e4mne fann jag att det h\u00e4r \u00e4r det enda s\u00e4ttet att skriva data till Excel-arbetsboken. Du kan l\u00e4sa mer om detta i deras <a href=\"https:\/\/docs.microsoft.com\/en-us\/graph\/excel-write-to-workbook\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentation<\/a>.<\/p>\n<p>Notera n\u00e4r vi s\u00e4tter in tabellen f\u00f6rsta g\u00e5ngen i arket, dess v\u00e4rde \u00e4r &#8217;Tabell1&#8217;. Vi beh\u00f6ver det h\u00e4r v\u00e4rdet n\u00e4r vi ringer API: er. Om du av n\u00e5gon anledning tar bort tabellen och s\u00e4tter in den igen blir dess v\u00e4rde &#8217;Table2&#8217; och s\u00e5 vidare.<\/p>\n<p>Kopiera ditt ark-ID som kr\u00e4vs i ett API-samtal. Du kan h\u00e4mta det fr\u00e5n webbl\u00e4sarens URL som visas p\u00e5 sk\u00e4rmdumpen nedan.<\/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=\"Skriv data till OneDrive-ark med Microsoft Graph API och PHP\" ><\/a><\/p>\n<h3>Skriv data till OneDrive-ark med Microsoft Graph API och PHP<\/h3>\n<p>Hittills \u00e4r vi klara med att installera de n\u00f6dv\u00e4ndiga paketen, infoga tokens i databasen, skapa en Excel-arbetsbok med en tabell i den. Nu \u00e4r det bra att g\u00e5 vidare och skriva en kod som bifogar data till OneDrive-arket med hj\u00e4lp av Microsoft Graph API och PHP.<\/p>\n<p>Jag skapar en fil <code>append-to-onedrive-sheet.php<\/code>och min kod kommer att vara som skrivet nedan.<\/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>I ovanst\u00e5ende kod skapade jag en array som har arrayelementet med 3 v\u00e4rden. Du kan skicka s\u00e5 m\u00e5nga matriselement. Du m\u00e5ste skicka ditt ark-id till <code>$item_id<\/code>variabeln.<\/p>\n<p>Den h\u00e4r koden h\u00e4mtar en \u00e5tkomsttoken fr\u00e5n databasen och skickar en POST-beg\u00e4ran till det n\u00f6dv\u00e4ndiga API-slutpunkten. Om token upph\u00f6r, regenererar den automatiskt i bakgrunden och forts\u00e4tter processen.<\/p>\n<p>Prova det och du b\u00f6r se att dina data l\u00e4ggs till i Excel-arbetsboken f\u00f6r ditt OneDrive-konto.<\/p>\n<p>Jag hoppas att du fick l\u00e4ra dig att skriva data till OneDrive-arket med Microsoft Graph API och PHP. Dela dina tankar och f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/tal-till-text-med-amazon-transcribe-i-php\/\" title=\"Tal till text med Amazon Transcribe i PHP\">Tal till text med Amazon Transcribe i PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/skicka-e-post-med-mailjet-alternativ-till-gmail-smtp-server-i-php\/\" title=\"Skicka e-post med Mailjet i PHP\">Skicka e-post med Mailjet i PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/paypal-payment-gateway-integration-i-php-med-paypal-rest-api\/\" title=\"PayPal Payment Gateway-integration i PHP med PayPal REST API\">PayPal Payment Gateway-integration i PHP med PayPal REST API<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I den h\u00e4r artikeln studerar vi hur man skriver data till OneDrive-arket med hj\u00e4lp av Microsoft Graph API och PHP. Microsoft Graph API f\u00f6ljer OAuth-fl\u00f6de f\u00f6r<\/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":[211,279],"tags":[850],"class_list":["post-29143","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-10","category-php-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29143"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29143\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/20342"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}