{"id":29027,"date":"2021-06-05T14:19:00","date_gmt":"2021-06-05T11:19:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29027"},"modified":"2021-10-18T03:37:02","modified_gmt":"2021-10-18T00:37:02","slug":"zapisuj-dane-do-arkusza-onedrive-za-pomoca-microsoft-graph-api-i-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/zapisuj-dane-do-arkusza-onedrive-za-pomoca-microsoft-graph-api-i-php\/","title":{"rendered":"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP"},"content":{"rendered":"<p>Niedawno opublikowa\u0142em artyku\u0142 <a href=\"https:\/\/themewp.inform.click\/pl\/jak-zintegrowac-api-arkuszy-google-z-php\/\" title=\"Jak zintegrowa\u0107 API Arkuszy Google z PHP, w\" >Jak zintegrowa\u0107 API Arkuszy Google z PHP, w<\/a> kt\u00f3rym wyja\u015bni\u0142em, jak zapisywa\u0107 dane do Arkusza Google za pomoc\u0105 PHP i API Google. Jeden z czytelnik\u00f3w zapyta\u0142 w podobny spos\u00f3b, jak zapisywa\u0107 dane do arkusza OneDrive. W tym samouczku nauczymy si\u0119, jak u\u017cywa\u0107 Microsoft Graph API i PHP do zapisywania danych w arkuszu OneDrive.<\/p>\n<p>Microsoft Graph API post\u0119puje zgodnie z przep\u0142ywem OAuth dla autoryzacji. Oznacza to, \u017ce musimy wygenerowa\u0107 token dost\u0119pu za pomoc\u0105 procesu OAuth. W tym celu musisz najpierw zarejestrowa\u0107 aplikacj\u0119 i pobra\u0107 swoje dane uwierzytelniaj\u0105ce.<\/p>\n<h3>Zarejestruj aplikacj\u0119 i utw\u00f3rz po\u015bwiadczenia<\/h3>\n<p>Integruj\u0105c proces OAuth, musisz mie\u0107 identyfikator klienta i klucz tajny klienta. Otrzymasz go po zarejestrowaniu aplikacji. Mo\u017cna post\u0119powa\u0107 zgodnie z krokami wymienionymi na <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/active-directory\/develop\/quickstart-register-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tej stronie<\/a> i zarejestrowa\u0107 swoj\u0105 aplikacj\u0119 w firmie Microsoft.<\/p>\n<p>Zaloguj si\u0119 do <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">portalu Azure,<\/a> a nast\u0119pnie wyszukaj Rejestracja aplikacji. Wype\u0142nij formularz. Musisz przekaza\u0107 adres URL do pola Redirect URI. Do tego pola przekazuj\u0119 adres URL lokalnego serwera. Stworz\u0119 <code>callback.php<\/code>w nast\u0119pnych krokach. Uzupe\u0142ni\u0142em szczeg\u00f3\u0142y, jak pokazano na zrzucie ekranu poni\u017cej.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b181786.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b181786.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<p>Po przes\u0142aniu formularza otrzymasz identyfikator klienta z zak\u0142adki Przegl\u0105d.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b219158.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b219158.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<p>Nast\u0119pnie przejd\u017a do zak\u0142adki \u201eCertyfikaty i tajemnice&quot; i kliknij \u201eNowy sekret klienta&#8221;.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<p>Otworzy si\u0119 wyskakuj\u0105ce okienko, w kt\u00f3rym nale\u017cy doda\u0107 opis i wybra\u0107 opcj\u0119 Wygasa.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<p>Nast\u0119pnie otrzymasz sw\u00f3j sekret klienta, jak pokazano poni\u017cej.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<h4>Zainstaluj wymagane pakiety<\/h4>\n<p>Musimy zintegrowa\u0107 dwie rzeczy \u2013 OAuth i REST API. W przypadku OAuth <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">u\u017cyj\u0119<\/a> biblioteki <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hybridauth<\/a>. A do interakcji z Microsoft Graph API <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">u\u017cyjmy<\/a> biblioteki <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a>.<\/p>\n<p>Te 2 pakiety mo\u017cemy \u0142atwo zainstalowa\u0107 za pomoc\u0105 Composera. Utw\u00f3rz <code>composer.json<\/code>plik w katalogu g\u0142\u00f3wnym projektu i dodaj do niego poni\u017csze wiersze.<\/p>\n<pre><code>{\n\u00a0\u00a0\u00a0\u00a0\"require\": {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"hybridauth\/hybridauth\": \"~3.0\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"guzzlehttp\/guzzle\": \"^7.0\"\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Uruchom poni\u017csze polecenie, kt\u00f3re zainstaluje te pakiety.<\/p>\n<pre><code>composer install<\/code><\/pre>\n<p>Jak wspomniano, Microsoft Graph API u\u017cywa OAuth do wykonywania operacji API. Wymaga wygenerowania tokena dost\u0119pu, kt\u00f3ry pe\u0142ni rol\u0119 identyfikatora Twojego konta. Za pomoc\u0105 tego tokenu dost\u0119pu interfejsy API Microsoft Graph sprawdzaj\u0105, czy \u017c\u0105danie przychodz\u0105ce jest prawid\u0142owe i autoryzowane.<\/p>\n<p>Token dost\u0119pu ma kr\u00f3tk\u0105 \u017cywotno\u015b\u0107. Wkr\u00f3tce wygasaj\u0105. A po wyga\u015bni\u0119ciu nie mo\u017cemy wykonywa\u0107 wywo\u0142a\u0144 interfejsu API, poniewa\u017c firma Microsoft traktuje \u017c\u0105danie z wygas\u0142ym tokenem jako nieautoryzowane \u017c\u0105danie. Aby rozwi\u0105za\u0107 ten problem, u\u017cywamy \u201erefresh_token&#8221;, aby ponownie wygenerowa\u0107 token dost\u0119pu w tle. Tak dzia\u0142a OAuth.<\/p>\n<h3>Konfiguracja bazy danych<\/h3>\n<p>Aby osi\u0105gn\u0105\u0107 nasz cel, musimy przechowywa\u0107 token w bezpiecznym miejscu. Potrzebujemy tokena podczas wywo\u0142ywania API. Powinien r\u00f3wnie\u017c si\u0119 regenerowa\u0107 po jego wyga\u015bni\u0119ciu. Aby przechowywa\u0107 szczeg\u00f3\u0142y tokena, utw\u00f3rz tabel\u0119 bazy danych w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>CREATE TABLE `token` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`access_token` text NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<\/code><\/pre>\n<p>Po zako\u0144czeniu procesu autoryzacji wstawimy token do bazy danych. Ponadto zaktualizujemy token w tle. W tym celu stworz\u0119 klas\u0119 bazy danych, aby\u015bmy mogli \u0142atwo wykonywa\u0107 operacje wstawiania, wybierania i aktualizowania.<\/p>\n<p><strong>klasa-db.php<\/strong><\/p>\n<pre><code>&lt;?php\nclass DB {\n\u00a0\u00a0\u00a0\u00a0private $dbHost\u00a0\u00a0\u00a0\u00a0 = \"DB_HOST\";\n\u00a0\u00a0\u00a0\u00a0private $dbUsername = \"DB_USERNAME\";\n\u00a0\u00a0\u00a0\u00a0private $dbPassword = \"DB_PASSWORD\";\n\u00a0\u00a0\u00a0\u00a0private $dbName\u00a0\u00a0\u00a0\u00a0 = \"DB_NAME\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!isset($this-&gt;db)){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Connect to the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$conn = new mysqli($this-&gt;dbHost, $this-&gt;dbUsername, $this-&gt;dbPassword, $this-&gt;dbName);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($conn-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die(\"Failed to connect with MySQL: \". $conn-&gt;connect_error);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}else{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db = $conn;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function is_table_empty() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;db-&gt;query(\"SELECT id FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($result-&gt;num_rows) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_access_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sql = $this-&gt;db-&gt;query(\"SELECT access_token FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $sql-&gt;fetch_assoc();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return json_decode($result['access_token']);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_refersh_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $result-&gt;refresh_token;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function update_access_token($token) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($this-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"INSERT INTO token(access_token) VALUES('$token')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h3>Wygeneruj token dost\u0119pu<\/h3>\n<p>Gdy b\u0119dziesz gotowy z wymaganymi pakietami i klas\u0105 bazy danych, nast\u0119pn\u0105 cz\u0119\u015bci\u0105 jest uwierzytelnianie i przechowywanie szczeg\u00f3\u0142\u00f3w tokena w bazie danych.<\/p>\n<p>Biblioteka Hybridauth udost\u0119pnia w\u0142asny proces do wykonywania autoryzacji. Wi\u0119c pod\u0105\u017cajmy za nimi. Utw\u00f3rz <code>config.php<\/code>plik i dodaj do niego poni\u017cszy kod.<\/p>\n<p><strong>config.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\nrequire_once 'class-db.php';\n\u00a0\ndefine('ONEDRIVE_CLIENT_ID', 'CLIENT_ID_HERE');\ndefine('ONEDRIVE_CLIENT_SECRET', 'CLIENT_SECRET_HERE');\ndefine('ONEDRIVE_SCOPE', 'files.read files.read.all files.readwrite files.readwrite.all offline_access');\ndefine('ONEDRIVE_CALLBACK_URL', 'CALLBACK_URL_HERE'); \/\/ in my case it is http:\/\/localhost\/sajid\/onedrive\/callback.php\n\u00a0\n$config = [\n\u00a0\u00a0\u00a0\u00a0'callback' =&gt; ONEDRIVE_CALLBACK_URL,\n\u00a0\u00a0\u00a0\u00a0'keys'\u00a0\u00a0\u00a0\u00a0 =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'id' =&gt; ONEDRIVE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; ONEDRIVE_CLIENT_SECRET\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0'scope'\u00a0\u00a0\u00a0 =&gt; ONEDRIVE_SCOPE,\n\u00a0\u00a0\u00a0\u00a0'authorize_url_parameters' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'approval_prompt' =&gt; 'force',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access_type' =&gt; 'offline'\n\u00a0\u00a0\u00a0\u00a0]\n];\n\u00a0\n$adapter = new HybridauthProviderMicrosoftGraph( $config );<\/code><\/pre>\n<p>Pami\u0119taj, aby zast\u0105pi\u0107 wszystkie symbole zast\u0119pcze ich rzeczywistymi warto\u015bciami. Przeszed\u0142em wymagane zakresy dla naszego celu ko\u0144cowego, wi\u0119c zachowaj go tak, jak jest. Teraz, w <code>callback.php<\/code>adresie URL wywo\u0142ania zwrotnego, napisz\u0119 kod, kt\u00f3ry uruchamia proces uwierzytelniania, przekierowuje do niego po pomy\u015blnej autoryzacji i przechowuje informacje o tokenach w tabeli bazy danych.<\/p>\n<p><strong>callback.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$adapter-&gt;authenticate();\n\u00a0\u00a0\u00a0\u00a0$token = $adapter-&gt;getAccessToken();\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\u00a0\u00a0\u00a0if($db-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($token));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Access token inserted successfully.\";\n\u00a0\u00a0\u00a0\u00a0}\n}\ncatch( Exception $e ){\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage() ;\n}<\/code><\/pre>\n<p>Uruchom w <code>callback.php<\/code>przegl\u0105darce, zako\u0144cz proces uwierzytelniania. Po zako\u0144czeniu uwierzytelniania powiniene\u015b zobaczy\u0107 szczeg\u00f3\u0142y tokena przechowywane w tabeli \u201etokeny&#8221;.<\/p>\n<h3>Dodaj tabel\u0119 w arkuszu OneDrive<\/h3>\n<p>Aby doda\u0107 dane za po\u015brednictwem interfejsu Microsoft Graph API, musisz wstawi\u0107 tabel\u0119 do arkusza OneDrive. Przejd\u017a do strony OneDrive. Kliknij \u201eskoroszyt programu Excel&#8221; w menu rozwijanym \u201eNowy&#8221;.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<p>Gdy znajdziesz si\u0119 na stronie arkusza, kliknij ikon\u0119 \u201eTabela&#8221;, a nast\u0119pnie \u201eOK&#8221; z otwartego wyskakuj\u0105cego okienka.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<p>Nast\u0119pnie zobaczysz tabel\u0119 wstawion\u0105 do arkusza OneDrive w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<p>Dostosuj kolumny zgodnie ze swoimi wymaganiami. W moim przypadku zachowa\u0142em 3 kolumny.<\/p>\n<p>Teraz mo\u017cna zapyta\u0107, po co wstawia\u0107 tabel\u0119 do arkusza? Kiedy bada\u0142em ten temat, odkry\u0142em, \u017ce jest to jedyny spos\u00f3b zapisywania danych w skoroszycie programu Excel. Mo\u017cesz przeczyta\u0107 wi\u0119cej na ten temat w ich <a href=\"https:\/\/docs.microsoft.com\/en-us\/graph\/excel-write-to-workbook\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacji<\/a>.<\/p>\n<p>Zachowaj notatk\u0119, gdy po raz pierwszy wstawiamy tabel\u0119 do arkusza, jej warto\u015b\u0107 to \u201eTabela1&#8243;. Ta warto\u015b\u0107 jest nam potrzebna w momencie wywo\u0142ywania API. Je\u015bli z jakiego\u015b powodu usuniesz tabel\u0119 i wstawisz j\u0105 ponownie, jej warto\u015b\u0107 stanie si\u0119 \u201eTable2&#8243; i tak dalej.<\/p>\n<p>Skopiuj identyfikator arkusza, kt\u00f3ry jest wymagany w wywo\u0142aniu interfejsu API. Mo\u017cesz go uzyska\u0107 z adresu URL przegl\u0105darki, jak pokazano na poni\u017cszym zrzucie ekranu.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20341-6081e1b2bab8e.png\" alt=\"Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP\" ><\/a><\/p>\n<h3>Zapisuj dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP<\/h3>\n<p>Na razie sko\u0144czyli\u015bmy z instalacj\u0105 wymaganych pakiet\u00f3w, wstawianiem token\u00f3w do bazy danych, tworzeniem skoroszytu Excel z tabel\u0105 w nim. Teraz mo\u017cemy i\u015b\u0107 dalej i napisa\u0107 kod, kt\u00f3ry do\u0142\u0105cza dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP.<\/p>\n<p>Tworz\u0119 plik, <code>append-to-onedrive-sheet.php<\/code>a m\u00f3j kod b\u0119dzie taki, jak napisano poni\u017cej.<\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\n\/\/ here you can pass as many data as a separate array element\n$arr_data = [\n\u00a0\u00a0\u00a0\u00a0['John Doe', 'john@test.com', '8888888888']\n];\n\u00a0\nappend_to_sheet($arr_data);\n\u00a0\nfunction append_to_sheet($arr_data = array()) {\n\u00a0\u00a0\u00a0\u00a0$item_id = 'YOUR_SHEET_ID';\n\u00a0\u00a0\u00a0\u00a0$table = 'Table1'; \/\/in your case it can be Table2, Table3, ...\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_token = (array) $db-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0$accessToken = $arr_token['access_token'];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/graph.microsoft.com',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request(\"POST\", \"\/v1.0\/me\/drive\/items\/$item_id\/workbook\/tables\/$table\/rows\/add\", [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'json' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'values' =&gt; $arr_data\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'headers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Authorization' =&gt; 'Bearer '. $accessToken\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'verify' =&gt; false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if( 401 == $e-&gt;getCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$refresh_token = $db-&gt;get_refersh_token();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/login.microsoftonline.com']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/common\/oauth2\/v2.0\/token', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"refresh_token\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"refresh_token\" =&gt; $refresh_token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_id\" =&gt; ONEDRIVE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_secret\" =&gt; ONEDRIVE_CLIENT_SECRET,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"scope\" =&gt; ONEDRIVE_SCOPE,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"redirect_uri\" =&gt; ONEDRIVE_CALLBACK_URL,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token($response-&gt;getBody());\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0append_to_sheet($arr_data);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage(); \/\/print the error just in case your video is not uploaded.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>W powy\u017cszym kodzie utworzy\u0142em tablic\u0119, kt\u00f3ra ma element array z 3 warto\u015bciami. Mo\u017cesz przekaza\u0107 dowoln\u0105 liczb\u0119 element\u00f3w tablicy. Musisz przekaza\u0107 sw\u00f3j identyfikator arkusza do <code>$item_id<\/code>zmiennej.<\/p>\n<p>Ten kod pobiera token dost\u0119pu z bazy danych i wysy\u0142a \u017c\u0105danie POST do wymaganego punktu ko\u0144cowego interfejsu API. Je\u015bli token wyga\u015bnie, automatycznie regeneruje go w tle i kontynuuje proces.<\/p>\n<p>Wypr\u00f3buj, a powiniene\u015b zobaczy\u0107, \u017ce Twoje dane s\u0105 do\u0142\u0105czone do skoroszytu programu Excel na Twoim koncie OneDrive.<\/p>\n<p>Mam nadziej\u0119, \u017ce wiesz, jak zapisywa\u0107 dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/zamiana-mowy-na-tekst-przy-uzyciu-transkrypcji-amazon-w-php\/\" title=\"Zamiana mowy na tekst przy u\u017cyciu transkrypcji Amazon w PHP\">Zamiana mowy na tekst przy u\u017cyciu transkrypcji Amazon w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/wyslij-e-mail-za-pomoca-mailjet-alternatywa-dla-serwera-smtp-gmail-w-php\/\" title=\"Wy\u015blij e-mail za pomoc\u0105 Mailjet w PHP\">Wy\u015blij e-mail za pomoc\u0105 Mailjet w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/integracja-paypal-payment-gateway-w-php-za-pomoca-paypal-rest-api\/\" title=\"Integracja PayPal Payment Gateway w PHP za pomoc\u0105 PayPal REST API\">Integracja PayPal Payment Gateway w PHP za pomoc\u0105 PayPal REST API<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym artykule dowiemy si\u0119, jak zapisywa\u0107 dane do arkusza OneDrive za pomoc\u0105 Microsoft Graph API i PHP. Microsoft Graph API pod\u0105\u017ca za przep\u0142ywem OAuth dla<\/p>\n","protected":false},"author":1,"featured_media":20342,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[209,277],"tags":[847],"class_list":["post-29027","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-8","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=29027"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29027\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/20342"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=29027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}