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.php
Järgmistes sammudes koostan a. Olen täitnud üksikasjad, nagu on näidatud alloleval ekraanipildil.
Vormi esitamisel saate vahekaardilt Ülevaade kliendi ID.
Järgmisena minge vahekaardile "Sertifikaadid ja saladused" ja klõpsake nuppu "Uus kliendi saladus".
See avab hüpiku, kuhu peate lisama kirjelduse ja valima valiku Aegub.
Pärast seda saate oma kliendi saladuse, nagu allpool näidatud.
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.json
oma 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.php
fail 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.php
mis 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.php
brauseris 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”.
Kui olete lehelehel, klõpsake avatud hüpikakna ikooni "Tabel" ja seejärel nuppu "OK".
Pärast seda näete oma OneDrive’i lehele sisestatud tabelit järgmiselt.
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 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.php
ja 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_id
Muutujale 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.