Kürzlich habe ich einen Artikel veröffentlicht, wie man Google Sheets API mit PHP integriert, in dem ich erklärt habe, wie man Daten mit PHP und Google APIs in das Google Sheet schreibt. Einer der Leser fragte in ähnlicher 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.
Die Microsoft Graph-API folgt dem OAuth-Flow für die Autorisierung. Das heißt, wir müssen ein Zugriffstoken mithilfe des OAuth-Prozesses generieren. Dazu müssen Sie zuerst die Anwendung registrieren und Ihre Zugangsdaten abrufen.
Registrieren Sie eine Anwendung und erstellen Sie Anmeldeinformationen
Bei der Integration eines OAuth-Prozesses benötigen Sie eine Client-ID und ein Client-Geheimnis. Sie erhalten es nach der Registrierung der Anwendungen. Man kann die auf dieser Seite genannten Schritte befolgen und seine Anwendung bei Microsoft registrieren.
Melden Sie sich beim Azure-Portal an und suchen Sie dann nach App-Registrierung. Fülle das Formular aus. Sie müssen eine URL an das Umleitungs-URI-Feld übergeben. An dieses Feld übergebe ich eine lokale Server-URL. Ich werde callback.php
in den nächsten Schritten eine erstellen. Ich habe die Details wie im Screenshot unten gezeigt ausgefüllt.
Beim Absenden eines Formulars erhalten Sie die Kunden-ID aus der Registerkarte Übersicht.
Wechseln Sie als Nächstes zum Tab „Zertifikate und Geheimnisse” und klicken Sie auf „Neues Client-Geheimnis”.
Es öffnet sich ein Popup, in dem Sie eine Beschreibung hinzufügen und die Option Expires auswählen müssen.
Danach erhalten Sie Ihr Client-Geheimnis wie unten gezeigt.
Erforderliche Pakete installieren
Wir müssen zwei Dinge integrieren – OAuth und REST API. Für das OAuth werde ich die Hybridauth- Bibliothek verwenden. Und um mit der Microsoft Graph-API zu interagieren, verwenden wir die Guzzle- Bibliothek.
Wir können diese 2 Pakete einfach mit einem Composer installieren. Erstellen Sie eine composer.json
Datei in Ihrem Projekt-Stammverzeichnis und fügen Sie die folgenden Zeilen hinzu.
{
"require": {
"hybridauth/hybridauth": "~3.0",
"guzzlehttp/guzzle": "^7.0"
}
}
Führen Sie den folgenden Befehl aus, der diese Pakete installiert.
composer install
Wie bereits erwähnt, verwendet die Microsoft Graph API OAuth, um die API-Operationen auszuführen. Es erfordert, dass Sie ein Zugriffstoken generieren, das als Kennung Ihres Kontos dient. Mithilfe dieses Zugriffstokens überprüfen Microsoft Graph-APIs, ob die eingehende Anforderung gültig und autorisiert ist.
Das Zugriffstoken hat eine kurze Lebensdauer. Sie verfallen bald. Und nach Ablauf können wir keine API-Aufrufe ausführen, da Microsoft die Anfrage mit dem abgelaufenen Token als nicht autorisierte Anfrage behandelt. Um dieses Problem zu beheben, verwenden wir das ‘refresh_token’, um das Zugriffstoken im Hintergrund neu zu generieren. So funktioniert OAuth.
Datenbankkonfiguration
Um unser Ziel zu erreichen, müssen wir den Token an einem sicheren Ort aufbewahren. Wir benötigen das Token beim Aufrufen der APIs. Außerdem sollte es sich nach dem Ablauf regenerieren. Um die Token-Details zu speichern, erstellen Sie eine Datenbanktabelle wie folgt.
CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`access_token` text NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Wir werden den Token nach Abschluss des Autorisierungsvorgangs in die Datenbank einfügen. Außerdem aktualisieren wir das Token im Hintergrund. Dazu werde ich eine Datenbankklasse erstellen, damit wir die Einfüge-, Auswahl- und Aktualisierungsoperationen einfach durchführen können.
class-db.php
<?php
class DB {
private $dbHost = "DB_HOST";
private $dbUsername = "DB_USERNAME";
private $dbPassword = "DB_PASSWORD";
private $dbName = "DB_NAME";
public function __construct(){
if(!isset($this->db)){
// Connect to the database
$conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
if($conn->connect_error){
die("Failed to connect with MySQL: ". $conn->connect_error);
}else{
$this->db = $conn;
}
}
}
public function is_table_empty() {
$result = $this->db->query("SELECT id FROM token");
if($result->num_rows) {
return false;
}
return true;
}
public function get_access_token() {
$sql = $this->db->query("SELECT access_token FROM token");
$result = $sql->fetch_assoc();
return json_decode($result['access_token']);
}
public function get_refersh_token() {
$result = $this->get_access_token();
return $result->refresh_token;
}
public function update_access_token($token) {
if($this->is_table_empty()) {
$this->db->query("INSERT INTO token(access_token) VALUES('$token')");
} else {
$this->db->query("UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)");
}
}
}
Zugriffstoken generieren
Sobald Sie mit den erforderlichen Paketen und der Datenbankklasse fertig sind, führt der nächste Teil die Authentifizierung durch und speichert die Token-Details in der Datenbank.
Die Hybridauth-Bibliothek bietet einen eigenen Prozess zum Ausführen der Autorisierung. Folgen wir ihnen also. Erstellen Sie eine config.php
Datei und fügen Sie den folgenden Code darin ein.
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 );
Stellen Sie sicher, dass Sie alle Platzhalter durch ihre tatsächlichen Werte ersetzen. Ich habe die erforderlichen Bereiche für unser Endziel bestanden, also behalte es so wie es ist. Nun callback.php
schreibe ich in das, was meine Rückruf-URL ist, einen Code, der den Authentifizierungsprozess startet, nach erfolgreicher Autorisierung dorthin umleitet und die Token-Informationen in der Datenbanktabelle speichert.
callback.php
<?php
require_once 'config.php';
try {
$adapter->authenticate();
$token = $adapter->getAccessToken();
$db = new DB();
if($db->is_table_empty()) {
$db->update_access_token(json_encode($token));
echo "Access token inserted successfully.";
}
}
catch( Exception $e ){
echo $e->getMessage() ;
}
Führen Sie die callback.php
im Browser aus und schließen Sie den Authentifizierungsprozess ab. Nach Abschluss der Authentifizierung sollten Sie die Token-Details sehen, die in der ‘tokens’-Tabelle gespeichert sind.
Tabelle in OneDrive-Tabelle hinzufügen
Um die Daten über die Microsoft Graph-API hinzuzufügen, müssen Sie eine Tabelle in das OneDrive-Blatt einfügen. Gehen Sie zur OneDrive-Seite. Klicken Sie im Dropdown-Menü "Neu" auf die "Excel-Arbeitsmappe".
Sobald Sie sich auf der Blattseite befinden, klicken Sie auf das Symbol "Tabelle" und dann auf "OK" aus dem geöffneten Popup.
Danach wird die Tabelle wie folgt in Ihr OneDrive-Blatt eingefügt.
Passen Sie die Spalten nach Ihren Wünschen an. In meinem Fall habe ich 3 Spalten behalten.
Nun kann man sich fragen, warum eine Tabelle in das Blatt eingefügt werden muss? Als ich zu diesem Thema recherchierte, stellte ich fest, dass dies die einzige Möglichkeit ist, Daten in die Excel-Arbeitsmappe zu schreiben. Weitere Informationen hierzu finden Sie in deren Dokumentation.
Notieren Sie sich, wenn wir die Tabelle zum ersten Mal in das Blatt einfügen, ist ihr Wert ‘Tabelle1’. Wir benötigen diesen Wert zum Zeitpunkt des Aufrufens von APIs. Wenn Sie die Tabelle aus irgendeinem Grund entfernen und erneut einfügen, wird ihr Wert ‘Table2’ und so weiter.
Kopieren Sie Ihre Blatt-ID, die in einem API-Aufruf erforderlich ist. Sie können es über die Browser-URL abrufen, wie im Screenshot unten gezeigt.
Schreiben von Daten in OneDrive Sheet mit Microsoft Graph API und PHP
Bisher sind wir damit fertig, die erforderlichen Pakete zu installieren, Token in die Datenbank einzufügen und eine Excel-Arbeitsmappe mit einer Tabelle darin zu erstellen. Jetzt können wir einen Code schreiben, der Daten mithilfe der Microsoft Graph-API und PHP an das OneDrive-Blatt anhängt.
Ich erstelle eine Datei append-to-onedrive-sheet.php
und mein Code wird wie unten beschrieben aussehen.
<?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.
}
}
}
Im obigen Code habe ich ein Array erstellt, das das Array-Element mit 3 Werten enthält. Sie können beliebig viele Array-Elemente übergeben. Sie müssen Ihre Blatt-ID an die $item_id
Variable übergeben.
Dieser Code ruft ein Zugriffstoken aus der Datenbank ab und sendet eine POST-Anforderung an den erforderlichen API-Endpunkt. Wenn das Token abläuft, wird es automatisch im Hintergrund neu generiert und der Vorgang fortgesetzt.
Probieren Sie es aus und Sie sollten sehen, dass Ihre Daten an die Excel-Arbeitsmappe Ihres OneDrive-Kontos angehängt werden.
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äge im Kommentarbereich unten mit.
Zum Thema passende Artikel
- Speech-to-Text mit Amazon Transcribe in PHP
- Senden Sie E-Mails mit Mailjet in PHP
- PayPal Payment Gateway-Integration in PHP über die PayPal REST API