{"id":25327,"date":"2021-06-05T14:44:00","date_gmt":"2021-06-05T11:44:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25327"},"modified":"2021-10-18T02:34:04","modified_gmt":"2021-10-17T23:34:04","slug":"schreiben-von-daten-in-onedrive-sheet-mit-microsoft-graph-api-und-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/schreiben-von-daten-in-onedrive-sheet-mit-microsoft-graph-api-und-php\/","title":{"rendered":"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP"},"content":{"rendered":"<p>K\u00fcrzlich habe ich einen Artikel ver\u00f6ffentlicht, <a href=\"https:\/\/themewp.inform.click\/de\/so-integrieren-sie-die-google-sheets-api-mit-php\/\" title=\"wie man Google Sheets API mit PHP integriert,\" >wie man Google Sheets API mit PHP integriert,<\/a> in dem ich erkl\u00e4rt habe, wie man Daten mit PHP und Google APIs in das Google Sheet schreibt. Einer der Leser fragte in \u00e4hnlicher Weise, wie man Daten in das OneDrive Sheet schreibt. In diesem Tutorial lernen wir, wie Sie die Microsoft Graph-API und PHP verwenden, um die Daten in das OneDrive-Blatt zu schreiben.<\/p>\n<p>Die Microsoft Graph-API folgt dem OAuth-Flow f\u00fcr die Autorisierung. Das hei\u00dft, wir m\u00fcssen ein Zugriffstoken mithilfe des OAuth-Prozesses generieren. Dazu m\u00fcssen Sie zuerst die Anwendung registrieren und Ihre Zugangsdaten abrufen.<\/p>\n<h3>Registrieren Sie eine Anwendung und erstellen Sie Anmeldeinformationen<\/h3>\n<p>Bei der Integration eines OAuth-Prozesses ben\u00f6tigen Sie eine Client-ID und ein Client-Geheimnis. Sie erhalten es nach der Registrierung der Anwendungen. Man kann die auf <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/active-directory\/develop\/quickstart-register-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dieser Seite<\/a> genannten Schritte befolgen und seine Anwendung bei Microsoft registrieren.<\/p>\n<p>Melden Sie sich beim <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Azure-Portal an<\/a> und suchen Sie dann nach App-Registrierung. F\u00fclle das Formular aus. Sie m\u00fcssen eine URL an das Umleitungs-URI-Feld \u00fcbergeben. An dieses Feld \u00fcbergebe ich eine lokale Server-URL. Ich werde <code>callback.php<\/code>in den n\u00e4chsten Schritten eine erstellen. Ich habe die Details wie im Screenshot unten gezeigt ausgef\u00fcllt.<\/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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<p>Beim Absenden eines Formulars erhalten Sie die Kunden-ID aus der Registerkarte \u00dcbersicht.<\/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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<p>Wechseln Sie als N\u00e4chstes zum Tab \u201eZertifikate und Geheimnisse&#8220; und klicken Sie auf \u201eNeues Client-Geheimnis&#8220;.<\/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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<p>Es \u00f6ffnet sich ein Popup, in dem Sie eine Beschreibung hinzuf\u00fcgen und die Option Expires ausw\u00e4hlen m\u00fcssen.<\/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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<p>Danach erhalten Sie Ihr Client-Geheimnis wie unten gezeigt.<\/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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<h4>Erforderliche Pakete installieren<\/h4>\n<p>Wir m\u00fcssen zwei Dinge integrieren \u2013 OAuth und REST API. F\u00fcr das OAuth werde ich die <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hybridauth-<\/a> Bibliothek verwenden. Und um mit der Microsoft Graph-API zu interagieren, verwenden wir die <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle-<\/a> Bibliothek.<\/p>\n<p>Wir k\u00f6nnen diese 2 Pakete einfach mit einem Composer installieren. Erstellen Sie eine <code>composer.json<\/code>Datei in Ihrem Projekt-Stammverzeichnis und f\u00fcgen Sie die folgenden Zeilen hinzu.<\/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>F\u00fchren Sie den folgenden Befehl aus, der diese Pakete installiert.<\/p>\n<pre><code>composer install<\/code><\/pre>\n<p>Wie bereits erw\u00e4hnt, verwendet die Microsoft Graph API OAuth, um die API-Operationen auszuf\u00fchren. Es erfordert, dass Sie ein Zugriffstoken generieren, das als Kennung Ihres Kontos dient. Mithilfe dieses Zugriffstokens \u00fcberpr\u00fcfen Microsoft Graph-APIs, ob die eingehende Anforderung g\u00fcltig und autorisiert ist.<\/p>\n<p>Das Zugriffstoken hat eine kurze Lebensdauer. Sie verfallen bald. Und nach Ablauf k\u00f6nnen wir keine API-Aufrufe ausf\u00fchren, da Microsoft die Anfrage mit dem abgelaufenen Token als nicht autorisierte Anfrage behandelt. Um dieses Problem zu beheben, verwenden wir das &#8218;refresh_token&#8216;, um das Zugriffstoken im Hintergrund neu zu generieren. So funktioniert OAuth.<\/p>\n<h3>Datenbankkonfiguration<\/h3>\n<p>Um unser Ziel zu erreichen, m\u00fcssen wir den Token an einem sicheren Ort aufbewahren. Wir ben\u00f6tigen das Token beim Aufrufen der APIs. Au\u00dferdem sollte es sich nach dem Ablauf regenerieren. Um die Token-Details zu speichern, erstellen Sie eine Datenbanktabelle wie folgt.<\/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>Wir werden den Token nach Abschluss des Autorisierungsvorgangs in die Datenbank einf\u00fcgen. Au\u00dferdem aktualisieren wir das Token im Hintergrund. Dazu werde ich eine Datenbankklasse erstellen, damit wir die Einf\u00fcge-, Auswahl- und Aktualisierungsoperationen einfach durchf\u00fchren k\u00f6nnen.<\/p>\n<p><strong>class-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>Zugriffstoken generieren<\/h3>\n<p>Sobald Sie mit den erforderlichen Paketen und der Datenbankklasse fertig sind, f\u00fchrt der n\u00e4chste Teil die Authentifizierung durch und speichert die Token-Details in der Datenbank.<\/p>\n<p>Die Hybridauth-Bibliothek bietet einen eigenen Prozess zum Ausf\u00fchren der Autorisierung. Folgen wir ihnen also. Erstellen Sie eine <code>config.php<\/code>Datei und f\u00fcgen Sie den folgenden Code darin ein.<\/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>Stellen Sie sicher, dass Sie alle Platzhalter durch ihre tats\u00e4chlichen Werte ersetzen. Ich habe die erforderlichen Bereiche f\u00fcr unser Endziel bestanden, also behalte es so wie es ist. Nun <code>callback.php<\/code>schreibe ich in das, was meine R\u00fcckruf-URL ist, einen Code, der den Authentifizierungsprozess startet, nach erfolgreicher Autorisierung dorthin umleitet und die Token-Informationen in der Datenbanktabelle speichert.<\/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>F\u00fchren Sie die <code>callback.php<\/code>im Browser aus und schlie\u00dfen Sie den Authentifizierungsprozess ab. Nach Abschluss der Authentifizierung sollten Sie die Token-Details sehen, die in der &#8218;tokens&#8216;-Tabelle gespeichert sind.<\/p>\n<h3>Tabelle in OneDrive-Tabelle hinzuf\u00fcgen<\/h3>\n<p>Um die Daten \u00fcber die Microsoft Graph-API hinzuzuf\u00fcgen, m\u00fcssen Sie eine Tabelle in das OneDrive-Blatt einf\u00fcgen. Gehen Sie zur OneDrive-Seite. Klicken Sie im Dropdown-Men\u00fc &quot;Neu&quot; auf die &quot;Excel-Arbeitsmappe&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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<p>Sobald Sie sich auf der Blattseite befinden, klicken Sie auf das Symbol &quot;Tabelle&quot; und dann auf &quot;OK&quot; aus dem ge\u00f6ffneten Popup.<\/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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<p>Danach wird die Tabelle wie folgt in Ihr OneDrive-Blatt eingef\u00fcgt.<\/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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<p>Passen Sie die Spalten nach Ihren W\u00fcnschen an. In meinem Fall habe ich 3 Spalten behalten.<\/p>\n<p>Nun kann man sich fragen, warum eine Tabelle in das Blatt eingef\u00fcgt werden muss? Als ich zu diesem Thema recherchierte, stellte ich fest, dass dies die einzige M\u00f6glichkeit ist, Daten in die Excel-Arbeitsmappe zu schreiben. Weitere Informationen hierzu finden Sie in deren <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>Notieren Sie sich, wenn wir die Tabelle zum ersten Mal in das Blatt einf\u00fcgen, ist ihr Wert &#8218;Tabelle1&#8216;. Wir ben\u00f6tigen diesen Wert zum Zeitpunkt des Aufrufens von APIs. Wenn Sie die Tabelle aus irgendeinem Grund entfernen und erneut einf\u00fcgen, wird ihr Wert &#8218;Table2&#8216; und so weiter.<\/p>\n<p>Kopieren Sie Ihre Blatt-ID, die in einem API-Aufruf erforderlich ist. Sie k\u00f6nnen es \u00fcber die Browser-URL abrufen, wie im Screenshot unten gezeigt.<\/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=\"Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP\" ><\/a><\/p>\n<h3>Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP<\/h3>\n<p>Bisher sind wir damit fertig, die erforderlichen Pakete zu installieren, Token in die Datenbank einzuf\u00fcgen und eine Excel-Arbeitsmappe mit einer Tabelle darin zu erstellen. Jetzt k\u00f6nnen wir einen Code schreiben, der Daten mithilfe der Microsoft Graph-API und PHP an das OneDrive-Blatt anh\u00e4ngt.<\/p>\n<p>Ich erstelle eine Datei <code>append-to-onedrive-sheet.php<\/code>und mein Code wird wie unten beschrieben aussehen.<\/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>Im obigen Code habe ich ein Array erstellt, das das Array-Element mit 3 Werten enth\u00e4lt. Sie k\u00f6nnen beliebig viele Array-Elemente \u00fcbergeben. Sie m\u00fcssen Ihre Blatt-ID an die <code>$item_id<\/code>Variable \u00fcbergeben.<\/p>\n<p>Dieser Code ruft ein Zugriffstoken aus der Datenbank ab und sendet eine POST-Anforderung an den erforderlichen API-Endpunkt. Wenn das Token abl\u00e4uft, wird es automatisch im Hintergrund neu generiert und der Vorgang fortgesetzt.<\/p>\n<p>Probieren Sie es aus und Sie sollten sehen, dass Ihre Daten an die Excel-Arbeitsmappe Ihres OneDrive-Kontos angeh\u00e4ngt werden.<\/p>\n<p>Ich hoffe, Sie haben gelernt, wie Sie Daten mit der Microsoft Graph-API und PHP in das OneDrive-Blatt schreiben. Bitte teilen Sie Ihre Gedanken und Vorschl\u00e4ge im Kommentarbereich unten mit.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/speech-to-text-mit-amazon-transcribe-in-php\/\" title=\"Speech-to-Text mit Amazon Transcribe in PHP\">Speech-to-Text mit Amazon Transcribe in PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/senden-sie-e-mails-mit-mailjet-alternative-zum-gmail-smtp-server-in-php\/\" title=\"Senden Sie E-Mails mit Mailjet in PHP\">Senden Sie E-Mails mit Mailjet in PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/paypal-payment-gateway-integration-in-php-uber-die-paypal-rest-api\/\" title=\"PayPal Payment Gateway-Integration in PHP \u00fcber die PayPal REST API\">PayPal Payment Gateway-Integration in PHP \u00fcber die PayPal REST API<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel untersuchen wir, wie Sie mithilfe der Microsoft Graph-API und PHP Daten in das OneDrive-Blatt schreiben. Microsoft Graph API folgt dem OAuth-Flow f\u00fcr<\/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":[204,272],"tags":[845],"class_list":["post-25327","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-3","category-php-3","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/25327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/comments?post=25327"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/25327\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/20342"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=25327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=25327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=25327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}