✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

47

Niedawno opublikowałem artykuł Jak zintegrować API Arkuszy Google z PHP, w którym wyjaśniłem, jak zapisywać dane do Arkusza Google za pomocą PHP i API Google. Jeden z czytelników zapytał w podobny sposób, jak zapisywać dane do arkusza OneDrive. W tym samouczku nauczymy się, jak używać Microsoft Graph API i PHP do zapisywania danych w arkuszu OneDrive.

Microsoft Graph API postępuje zgodnie z przepływem OAuth dla autoryzacji. Oznacza to, że musimy wygenerować token dostępu za pomocą procesu OAuth. W tym celu musisz najpierw zarejestrować aplikację i pobrać swoje dane uwierzytelniające.

Zarejestruj aplikację i utwórz poświadczenia

Integrując proces OAuth, musisz mieć identyfikator klienta i klucz tajny klienta. Otrzymasz go po zarejestrowaniu aplikacji. Można postępować zgodnie z krokami wymienionymi na tej stronie i zarejestrować swoją aplikację w firmie Microsoft.

Zaloguj się do portalu Azure, a następnie wyszukaj Rejestracja aplikacji. Wypełnij formularz. Musisz przekazać adres URL do pola Redirect URI. Do tego pola przekazuję adres URL lokalnego serwera. Stworzę callback.phpw następnych krokach. Uzupełniłem szczegóły, jak pokazano na zrzucie ekranu poniżej.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Po przesłaniu formularza otrzymasz identyfikator klienta z zakładki Przegląd.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Następnie przejdź do zakładki „Certyfikaty i tajemnice" i kliknij „Nowy sekret klienta”.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Otworzy się wyskakujące okienko, w którym należy dodać opis i wybrać opcję Wygasa.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Następnie otrzymasz swój sekret klienta, jak pokazano poniżej.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Zainstaluj wymagane pakiety

Musimy zintegrować dwie rzeczy – OAuth i REST API. W przypadku OAuth użyję biblioteki Hybridauth. A do interakcji z Microsoft Graph API użyjmy biblioteki Guzzle.

Te 2 pakiety możemy łatwo zainstalować za pomocą Composera. Utwórz composer.jsonplik w katalogu głównym projektu i dodaj do niego poniższe wiersze.

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

Uruchom poniższe polecenie, które zainstaluje te pakiety.

composer install

Jak wspomniano, Microsoft Graph API używa OAuth do wykonywania operacji API. Wymaga wygenerowania tokena dostępu, który pełni rolę identyfikatora Twojego konta. Za pomocą tego tokenu dostępu interfejsy API Microsoft Graph sprawdzają, czy żądanie przychodzące jest prawidłowe i autoryzowane.

Token dostępu ma krótką żywotność. Wkrótce wygasają. A po wygaśnięciu nie możemy wykonywać wywołań interfejsu API, ponieważ firma Microsoft traktuje żądanie z wygasłym tokenem jako nieautoryzowane żądanie. Aby rozwiązać ten problem, używamy „refresh_token”, aby ponownie wygenerować token dostępu w tle. Tak działa OAuth.

Konfiguracja bazy danych

Aby osiągnąć nasz cel, musimy przechowywać token w bezpiecznym miejscu. Potrzebujemy tokena podczas wywoływania API. Powinien również się regenerować po jego wygaśnięciu. Aby przechowywać szczegóły tokena, utwórz tabelę bazy danych w następujący sposób.

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

Po zakończeniu procesu autoryzacji wstawimy token do bazy danych. Ponadto zaktualizujemy token w tle. W tym celu stworzę klasę bazy danych, abyśmy mogli łatwo wykonywać operacje wstawiania, wybierania i aktualizowania.

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

Wygeneruj token dostępu

Gdy będziesz gotowy z wymaganymi pakietami i klasą bazy danych, następną częścią jest uwierzytelnianie i przechowywanie szczegółów tokena w bazie danych.

Biblioteka Hybridauth udostępnia własny proces do wykonywania autoryzacji. Więc podążajmy za nimi. Utwórz config.phpplik i dodaj do niego poniższy kod.

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

Pamiętaj, aby zastąpić wszystkie symbole zastępcze ich rzeczywistymi wartościami. Przeszedłem wymagane zakresy dla naszego celu końcowego, więc zachowaj go tak, jak jest. Teraz, w callback.phpadresie URL wywołania zwrotnego, napiszę kod, który uruchamia proces uwierzytelniania, przekierowuje do niego po pomyślnej autoryzacji i przechowuje informacje o tokenach w tabeli bazy danych.

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

Uruchom w callback.phpprzeglądarce, zakończ proces uwierzytelniania. Po zakończeniu uwierzytelniania powinieneś zobaczyć szczegóły tokena przechowywane w tabeli „tokeny”.

Dodaj tabelę w arkuszu OneDrive

Aby dodać dane za pośrednictwem interfejsu Microsoft Graph API, musisz wstawić tabelę do arkusza OneDrive. Przejdź do strony OneDrive. Kliknij „skoroszyt programu Excel” w menu rozwijanym „Nowy”.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Gdy znajdziesz się na stronie arkusza, kliknij ikonę „Tabela”, a następnie „OK” z otwartego wyskakującego okienka.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Następnie zobaczysz tabelę wstawioną do arkusza OneDrive w następujący sposób.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Dostosuj kolumny zgodnie ze swoimi wymaganiami. W moim przypadku zachowałem 3 kolumny.

Teraz można zapytać, po co wstawiać tabelę do arkusza? Kiedy badałem ten temat, odkryłem, że jest to jedyny sposób zapisywania danych w skoroszycie programu Excel. Możesz przeczytać więcej na ten temat w ich dokumentacji.

Zachowaj notatkę, gdy po raz pierwszy wstawiamy tabelę do arkusza, jej wartość to „Tabela1″. Ta wartość jest nam potrzebna w momencie wywoływania API. Jeśli z jakiegoś powodu usuniesz tabelę i wstawisz ją ponownie, jej wartość stanie się „Table2″ i tak dalej.

Skopiuj identyfikator arkusza, który jest wymagany w wywołaniu interfejsu API. Możesz go uzyskać z adresu URL przeglądarki, jak pokazano na poniższym zrzucie ekranu.

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Zapisuj dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP

Na razie skończyliśmy z instalacją wymaganych pakietów, wstawianiem tokenów do bazy danych, tworzeniem skoroszytu Excel z tabelą w nim. Teraz możemy iść dalej i napisać kod, który dołącza dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP.

Tworzę plik, append-to-onedrive-sheet.phpa mój kod będzie taki, jak napisano poniżej.

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

W powyższym kodzie utworzyłem tablicę, która ma element array z 3 wartościami. Możesz przekazać dowolną liczbę elementów tablicy. Musisz przekazać swój identyfikator arkusza do $item_idzmiennej.

Ten kod pobiera token dostępu z bazy danych i wysyła żądanie POST do wymaganego punktu końcowego interfejsu API. Jeśli token wygaśnie, automatycznie regeneruje go w tle i kontynuuje proces.

Wypróbuj, a powinieneś zobaczyć, że Twoje dane są dołączone do skoroszytu programu Excel na Twoim koncie OneDrive.

Mam nadzieję, że wiesz, jak zapisywać dane do arkusza OneDrive za pomocą Microsoft Graph API i PHP. Podziel się swoimi przemyśleniami i sugestiami w sekcji komentarzy poniżej.

Powiązane artykuły

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów