...
✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Andmete kirjutamine OneDrive’i lehele, kasutades Microsoft Graph API-d ja PHP-d

36

Hiljuti avaldasin artikli Kuidas integreerida Google’i arvutustabelite API PHP-ga, kus selgitasin, kuidas PHP ja Google API-de abil Google Sheet’i andmeid kirjutada. Üks lugejatest küsis sarnaselt, kuidas andmeid OneDrive’i lehele kirjutada. Selles õpetuses uurime, kuidas kasutada Microsoft Graph API-d ja PHP-d andmete kirjutamiseks OneDrive’i lehele.

Microsoft Graph API järgib volituse OAuthi voogu. See tähendab, et peame looma juurdepääsuloa OAuthi protsessi abil. Selleks peate kõigepealt rakenduse registreerima ja oma volitused haarama.

Registreerige rakendus ja looge volitused

OAuthi protsessi integreerimisel peab teil olema kliendi ID ja kliendi saladus. Selle saate pärast rakenduste registreerimist. Võib järgida sellel lehel mainitud samme ja registreerida nende rakendused Microsoftis.

Logige sisse Azure’i portaali ja seejärel otsige rakenduse registreerimine. Täitke vorm. Peate URL-i edastama väljale Suunamise URI. Sellele väljale edastan kohaliku serveri URL-i. callback.phpJärgmistes sammudes koostan a. Olen täitnud üksikasjad, nagu on näidatud alloleval ekraanipildil.

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

Vormi esitamisel saate vahekaardilt Ülevaade kliendi ID.

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

Järgmisena minge vahekaardile "Sertifikaadid ja saladused" ja klõpsake nuppu "Uus kliendi saladus".

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

See avab hüpiku, kuhu peate lisama kirjelduse ja valima valiku Aegub.

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

Pärast seda saate oma kliendi saladuse, nagu allpool näidatud.

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

Installige vajalikud paketid

Peame integreerima kaks asja – OAuthi ja REST API. OAuthi jaoks kavatsen kasutada Hybridauthi teeki. Ja suhtlemiseks Microsoft Graph API-ga kasutame Guzzle’i teeki.

Composeri abil saame need kaks paketti hõlpsasti installida. Looge composer.jsonoma projekti juurkataloogis fail ja lisage sellele alla read.

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

Käivitage allpool käsk, mis need paketid installib.

composer install

Nagu öeldud, kasutab Microsoft Graph API API toimingute tegemiseks OAuthi. See nõuab, et genereeriksite juurdepääsuloa, mis toimib teie konto identifikaatorina. Selle juurdepääsuloa abil kontrollivad Microsoft Graphi API-d, kas sissetulev taotlus on kehtiv ja volitatud.

Juurdepääsu märgil on lühike eluiga. Need aeguvad varsti. Ja kui aegumine on lõppenud, ei saa me API-kõnesid teha, kuna Microsoft käsitleb aegunud märgiga päringut volitamata taotlusena. Selle probleemi lahendamiseks kasutame taustal juurdepääsu loa taastamiseks parameetrit ‘refresh_token’. Nii töötab OAuth.

Andmebaasi seadistamine

Eesmärgi saavutamiseks peame märgi säilitama kindlas kohas. API-de kutsumisel vajame luba. Samuti peaks see pärast selle aegumist taastuma. Nii et luba üksikasjade salvestamiseks looge andmebaasitabel järgmiselt.

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

Lisame loa andmebaasi pärast autoriseerimisprotsessi lõpetamist. Samuti värskendame taustal märki. Selleks kavatsen luua andmebaasiklassi, et saaksime hõlpsalt teha sisestamise, valimise ja värskendamise toiminguid.

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

Loo juurdepääsuluba

Kui olete valmis vajalike pakettide ja andmebaasiklassiga, on järgmine osa autentimine ja märgistusandmete salvestamine andmebaasi.

Hybridauthi teek pakub autoriseerimiseks oma protsessi. Niisiis, järgime neid. Looge config.phpfail ja lisage sellesse allolev kood.

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

Asendage kõik kohahoidjad nende tegelike väärtustega. Olen läbinud meie lõppeesmärgi jaoks nõutavad ulatused, nii et hoidke seda nii, nagu see on. Nüüd, callback.phpmis on minu tagasihelistamise URL, kirjutan koodi, mis käivitab autentimisprotsessi, suunab selle pärast edukat autoriseerimist ja salvestab märkide teabe andmebaasi tabelisse.

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äivitage callback.phpbrauseris brauser, viige autentimisprotsess lõpule. Pärast autentimise lõpuleviimist peaksite nägema märkide üksikasjad, mis on salvestatud tabelisse „märgid".

Lisage tabel OneDrive’i lehele

Andmete lisamiseks Microsoft Graph API kaudu peate sisestama OneDrive’i lehele tabeli. Minge OneDrive’i lehele. Klõpsake rippmenüü „Uus” all „Exceli töövihik”.

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

Kui olete lehelehel, klõpsake avatud hüpikakna ikooni "Tabel" ja seejärel nuppu "OK".

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

Pärast seda näete oma OneDrive’i lehele sisestatud tabelit järgmiselt.

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

Kohandage veerge vastavalt oma vajadustele. Minu puhul hoidsin 3 veergu.

Nüüd võib küsida, miks on vaja tabelisse lehte sisestada? Seda teemat uurides leidsin, et see on ainus viis andmete kirjutamiseks Exceli töövihikusse. Selle kohta saate lugeda nende dokumentatsioonist.

Pange tähele, kui sisestame tabeli esmakordselt lehte, on selle väärtus ‘Table1’. Vajame seda väärtust API-de kutsumisel. Kui mingil põhjusel eemaldate tabeli ja sisestate selle uuesti, saab selle väärtuseks tabel2 jne.

Kopeerige oma API lehe ID jaoks vajalik ID. Selle saate brauseri URL-ist, nagu on näidatud alloleval ekraanipildil.

Andmete kirjutamine OneDrive'i lehele, kasutades Microsoft Graph API-d ja PHP-d

Andmete kirjutamine OneDrive’i lehele Microsoft Graph API ja PHP abil

Siiani oleme valmis vajalike pakettide installimisega, märkide sisestamisega andmebaasi, Exceli töövihiku loomisega, milles on tabel. Nüüd on meil hea jätkata ja kirjutada kood, mis lisab andmed OneDrive’i lehele Microsoft Graph API ja PHP abil.

Ma loon faili append-to-onedrive-sheet.phpja minu kood on selline, nagu allpool kirjas.

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

Ülalolevas koodis lõin massiivi, millel on 3 väärtusega massiivi element. Võite edastada nii palju massiivi elemente. $item_idMuutujale peate edastama oma lehe ID .

See kood tõmbab andmebaasist juurdepääsuloa ja saadab POST-päringu vajalikule API-lõpp-punktile. Kui luba aegub, taastab see selle automaatselt taustal ja jätkab protsessi.

Proovige seda ja peaksite nägema, et teie andmed on lisatud teie OneDrive’i konto Exceli töövihikule.

Loodetavasti saite teada, kuidas kirjutada andmeid OneDrive’i lehele Microsoft Graph API ja PHP abil. Palun jagage oma mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.

seotud artiklid

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem