...
✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

33

Nyligen har jag publicerat en artikel Hur man integrerar Google Sheets API med PHP där jag förklarade hur man skriver data till Google Sheet med PHP och Google API. En av läsarna frågade på liknande sätt hur man skulle skriva data till OneDrive-arket. I den här handledningen studerar vi hur man använder Microsoft Graph API och PHP för att skriva data i OneDrive-arket.

Microsoft Graph API följer OAuth-flödet för auktoriseringen. Det betyder att vi måste skapa en åtkomsttoken med OAuth-processen. För detta måste du först registrera applikationen och ta dina referenser.

Registrera en ansökan och skapa referenser

När du integrerar en OAuth-process måste du ha ett klient-id och en klienthemlighet. Du får det efter att du registrerat ansökningarna. Man kan följa stegen som nämns på den här sidan och registrera deras applikation hos Microsoft.

Logga in på Azure Portal och sök sedan efter appregistrering. Fyll i formuläret. Du måste skicka en URL till URI-fältet Redirect. Till det här fältet skickar jag en lokal server-URL. Jag skapar en callback.phpi nästa steg. Jag har fyllt i detaljerna som visas på skärmdumpen nedan.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

När du skickar ett formulär får du klient-ID från fliken Översikt.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

Gå sedan till fliken ‘Certifikat och hemligheter’ och klicka på ‘Ny klienthemlighet’.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

Det öppnar en popup där du behöver lägga till en beskrivning och välja alternativet Utgår.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

Efter detta får du din klienthemlighet som visas nedan.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

Installera obligatoriska paket

Vi måste integrera två saker – OAuth och REST API. För OAuth ska jag använda Hybridauth- biblioteket. Och för att interagera med Microsoft Graph API, låt oss använda Guzzle- biblioteket.

Vi kan enkelt installera dessa två paket med en Composer. Skapa en composer.jsonfil i din projektkatalog och lägg till nedanstående rader i den.

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

Kör kommandot nedan som kommer att installera dessa paket.

composer install

Som sagt använder Microsoft Graph API OAuth för att utföra API-operationerna. Det kräver att du genererar en åtkomsttoken som fungerar som en identifierare för ditt konto. Med hjälp av denna åtkomsttoken validerar Microsoft Graph API: er om den inkommande begäran är giltig och auktoriserad.

Åtkomsttoken har kort livslängd. De upphör snart. Och när den har löpt ut kan vi inte göra API-samtal eftersom Microsoft behandlar begäran med den utgångna token som en obehörig begäran. För att lösa problemet använder vi ‘refresh_token’ för att återskapa åtkomsttoken i bakgrunden. Så här fungerar OAuth.

Databaskonfiguration

För att uppnå vårt mål måste vi lagra symbolen på en säker plats. Vi behöver token när vi ringer till API: er. Det bör också regenereras när det har löpt ut. Så för att lagra tokeninformation skapar du en databastabell enligt följande.

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

Vi sätter in token i databasen efter att auktoriseringsprocessen har slutförts. Vi kommer också att uppdatera token i bakgrunden. För detta ska jag skapa en databasklass så att vi enkelt kan göra insättnings-, markerings- och uppdateringsåtgärder.

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

Skapa åtkomsttoken

När du är redo med de obligatoriska paketen och databasklassen gör nästa del autentisering och lagring av tokeninformation i databasen.

Hybridauth-biblioteket tillhandahåller sin egen process för att utföra auktorisering. Så, låt oss följa dem. Skapa en config.phpfil och lägg till koden nedan i den.

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

Se till att ersätta alla platshållare med deras faktiska värden. Jag har klarat de nödvändiga räckvidden för vårt slutmål så håll det som det är. Nu, i callback.phpvilken är min återuppringnings-URL, skriver jag en kod som startar autentiseringsprocessen, omdirigerar till den efter lyckad auktorisering och lagrar tokensinformationen i databastabellen.

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

Kör i callback.phpwebbläsaren, slutför autentiseringsprocessen. När autentiseringen är klar bör du se tokeninformation lagrad i tabellen ‘tokens’.

Lägg till tabell i OneDrive-ark

För att lägga till data via Microsoft Graph API måste du infoga en tabell i OneDrive-arket. Gå över till OneDrive-sidan. Klicka på "Excel-arbetsbok" under rullgardinsmenyn "Ny".

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

När du väl är på arksidan klickar du på "Tabell" -ikonen och sedan "OK" från det öppnade popup-fönstret.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

Efter detta ser du tabellen infogad i ditt OneDrive-ark enligt följande.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

Justera kolumnerna enligt dina behov. I mitt fall behöll jag tre kolumner.

Nu kan man fråga varför behovet av att infoga en tabell i arket? När jag undersökte detta ämne fann jag att det här är det enda sättet att skriva data till Excel-arbetsboken. Du kan läsa mer om detta i deras dokumentation.

Notera när vi sätter in tabellen första gången i arket, dess värde är ‘Tabell1’. Vi behöver det här värdet när vi ringer API: er. Om du av någon anledning tar bort tabellen och sätter in den igen blir dess värde ‘Table2’ och så vidare.

Kopiera ditt ark-ID som krävs i ett API-samtal. Du kan hämta det från webbläsarens URL som visas på skärmdumpen nedan.

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

Skriv data till OneDrive-ark med Microsoft Graph API och PHP

Hittills är vi klara med att installera de nödvändiga paketen, infoga tokens i databasen, skapa en Excel-arbetsbok med en tabell i den. Nu är det bra att gå vidare och skriva en kod som bifogar data till OneDrive-arket med hjälp av Microsoft Graph API och PHP.

Jag skapar en fil append-to-onedrive-sheet.phpoch min kod kommer att vara som skrivet nedan.

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

I ovanstående kod skapade jag en array som har arrayelementet med 3 värden. Du kan skicka så många matriselement. Du måste skicka ditt ark-id till $item_idvariabeln.

Den här koden hämtar en åtkomsttoken från databasen och skickar en POST-begäran till det nödvändiga API-slutpunkten. Om token upphör, regenererar den automatiskt i bakgrunden och fortsätter processen.

Prova det och du bör se att dina data läggs till i Excel-arbetsboken för ditt OneDrive-konto.

Jag hoppas att du fick lära dig att skriva data till OneDrive-arket med Microsoft Graph API och PHP. Dela dina tankar och förslag i kommentarsektionen nedan.

relaterade artiklar

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer