✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

22

Нещодавно я опублікував статтю Як інтегрувати API Google Sheets з PHP, де я пояснив, як писати дані в Google Sheet за допомогою PHP та Google API. Один із читачів подібним чином запитав, як записати дані на аркуш OneDrive. У цьому посібнику ми вивчимо, як використовувати API Microsoft Graph та PHP для запису даних у аркуші OneDrive.

Microsoft Graph API слідує потоку OAuth для авторизації. Це означає, що нам потрібно згенерувати маркер доступу, використовуючи процес OAuth. Для цього потрібно спочатку зареєструвати програму та отримати свої облікові дані.

Зареєструйте програму та створіть облікові дані

Під час інтеграції процесу OAuth потрібно мати ідентифікатор клієнта та секрет клієнта. Ви отримаєте його після реєстрації заявок. Можна виконати кроки, згадані на цій сторінці, і зареєструвати їх застосування в Microsoft.

Увійдіть на портал Azure, а потім виконайте пошук Реєстрація програми. Заповніть форму. Вам потрібно передати URL-адресу в поле URI перенаправлення. У це поле я передаю URL-адресу локального сервера. Я буду створювати callback.phpна наступних кроках. Я заповнив деталі, як показано на скріншоті нижче.

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Після надсилання форми ви отримаєте ідентифікатор клієнта на вкладці Огляд.

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Далі перейдіть на вкладку «Сертифікати та секрети» та натисніть «Новий секрет клієнта».

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Відкриється спливаюче вікно, де потрібно додати опис та вибрати параметр Expires.

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Після цього ви отримаєте секрет свого клієнта, як показано нижче.

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Встановіть необхідні пакети

Ми повинні інтегрувати дві речі – OAuth та REST API. Для OAuth я збираюся використовувати бібліотеку Hybridauth. А для взаємодії з API Microsoft Graph давайте скористаємось бібліотекою Guzzle.

Ми можемо легко встановити ці 2 пакети за допомогою Composer. Створіть composer.jsonфайл у кореневому каталозі проекту та додайте до нього рядки нижче.

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

Запустіть команду нижче, яка встановить ці пакети.

composer install

Як вже було сказано, Microsoft Graph API використовує OAuth для виконання операцій API. Для цього потрібно згенерувати маркер доступу, який діє як ідентифікатор вашого облікового запису. За допомогою цього маркера доступу API Microsoft Graph перевіряють, чи є вхідний запит дійсним та авторизованим.

Токен доступу має коротке життя. Вони скоро закінчуються. І після закінчення терміну дії ми не можемо робити виклики API, оскільки Microsoft розглядає запит із простроченим маркером як несанкціонований запит. Щоб вирішити цю проблему, ми використовуємо ‘refresh_token’ для регенерації маркера доступу у фоновому режимі. Ось як працює OAuth.

Конфігурація бази даних

Для досягнення нашої мети нам потрібно зберігати маркер у безпечному місці. Нам потрібен маркер під час виклику API. Крім того, він повинен відновлюватися після закінчення терміну його дії. Отже, для зберігання деталей маркера створіть таблицю бази даних наступним чином.

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

Ми будемо вставляти маркер в базу даних після завершення процесу авторизації. Також ми оновимо маркер у фоновому режимі. Для цього я збираюся створити клас бази даних, щоб ми могли легко виконувати операції вставки, вибору та оновлення.

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

Створити маркер доступу

Після того, як ви готові до необхідних пакунків та класу бази даних, наступна частина виконує автентифікацію та зберігає деталі маркера в базі даних.

Бібліотека Hybridauth забезпечує власний процес для авторизації. Отже, давайте йти за ними. Створіть config.phpфайл і додайте в нього код нижче.

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

Обов’язково замініть усі заповнювачі на їх фактичні значення. Я пройшов необхідні рамки для нашої кінцевої мети, тому залишайте її такою, якою вона є. Тепер, у callback.phpякому є моєю URL-адресою зворотного виклику, я напишу код, який запускає процес автентифікації, переспрямовує на нього після успішної авторизації та зберігає інформацію про маркери в таблиці бази даних.

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

Запустіть callback.phpбраузер, завершіть процес автентифікації. Після завершення автентифікації ви повинні побачити деталі маркера, що зберігаються всередині таблиці ‘токенів’.

Додайте таблицю в аркуш OneDrive

Щоб додати дані за допомогою API Microsoft Graph, потрібно вставити таблицю в аркуш OneDrive. Перейдіть на сторінку OneDrive. Клацніть на «книгу Excel» у спадному меню «Новий».

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Опинившись на сторінці аркуша, натисніть на піктограму "Таблиця", а потім на "ОК" у відкритому спливаючому вікні.

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Після цього ви побачите таблицю, вставлену у ваш аркуш OneDrive, наступним чином.

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Налаштуйте стовпці відповідно до ваших вимог. У моєму випадку я тримав 3 колонки.

Тепер можна запитати, навіщо потрібно вставляти таблицю в аркуш? Досліджуючи цю тему, я виявив, що це єдиний спосіб записати дані до книги Excel. Ви можете прочитати більше про це в їх документації.

Зверніть увагу, коли ми вперше вставляємо таблицю в аркуш, її значенням є "Таблиця1". Це значення нам потрібне під час виклику API. Якщо з якихось причин ви видалите таблицю та вставите її знову, тоді це значення стає "Таблиця2" тощо.

Скопіюйте свій ідентифікатор аркуша, який необхідний під час виклику API. Ви можете отримати його за URL-адресою браузера, як показано на скріншоті нижче.

Записуйте дані на аркуш OneDrive за допомогою API Microsoft Graph та PHP

Записуйте дані в аркуш OneDrive за допомогою API Microsoft Graph та PHP

Наразі ми закінчили встановлення необхідних пакунків, вставку токенів у базу даних, створення книги Excel із таблицею в ній. Тепер нам добре продовжувати і писати код, який додає дані до аркуша OneDrive за допомогою API Microsoft Graph та PHP.

Я створюю файл, append-to-onedrive-sheet.phpі мій код буде таким, як написано нижче.

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

У наведеному вище коді я створив масив, що містить елемент масиву з 3 значеннями. Ви можете передати якомога більше елементів масиву. Ви повинні передати свій ідентифікатор аркуша $item_idзмінній.

Цей код отримує маркер доступу з бази даних і надсилає запит POST необхідній кінцевій точці API. Якщо термін дії маркера закінчується, він автоматично відновлює його у фоновому режимі та продовжує процес.

Спробуйте, і ви побачите, що ваші дані додаються до книги Excel вашого облікового запису OneDrive.

Сподіваюся, ви дізналися, як писати дані на аркуші OneDrive за допомогою API Microsoft Graph та PHP. Будь ласка, поділіться своїми думками та пропозиціями в розділі коментарів нижче.

Пов’язані статті

Джерело запису: artisansweb.net

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі