{"id":28244,"date":"2021-06-05T14:02:00","date_gmt":"2021-06-05T11:02:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28244"},"modified":"2021-10-18T04:04:22","modified_gmt":"2021-10-18T01:04:22","slug":"grave-dados-na-planilha-do-onedrive-usando-microsoft-graph-api-e-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/grave-dados-na-planilha-do-onedrive-usando-microsoft-graph-api-e-php\/","title":{"rendered":"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP"},"content":{"rendered":"<p>Recentemente, publiquei um artigo <a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-integrar-a-api-do-planilhas-google-com-php\/\" title=\"Como integrar API de planilhas do Google com PHP,\" >Como integrar API de planilhas do Google com PHP,<\/a> onde expliquei como escrever dados na planilha do Google usando PHP e APIs do Google. Um dos leitores perguntou de maneira semelhante como gravar dados na planilha do OneDrive. Neste tutorial, estudaremos como usar a API do Microsoft Graph e PHP para gravar os dados na planilha do OneDrive.<\/p>\n<p>A API do Microsoft Graph segue o fluxo OAuth para a autoriza\u00e7\u00e3o. Isso significa que precisamos gerar um token de acesso usando o processo OAuth. Para isso, primeiro voc\u00ea precisa registrar o aplicativo e pegar suas credenciais.<\/p>\n<h3>Registrar um aplicativo e criar credenciais<\/h3>\n<p>Ao integrar um processo OAuth, voc\u00ea precisa ter um ID de cliente e um segredo do cliente. Voc\u00ea o receber\u00e1 ap\u00f3s registrar os aplicativos. Pode-se seguir as etapas mencionadas <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/active-directory\/develop\/quickstart-register-app\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nesta p\u00e1gina<\/a> e registrar seu aplicativo com a Microsoft.<\/p>\n<p>Fa\u00e7a login no <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Portal<\/a> do <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Azure<\/a> e pesquise por Registro de Aplicativo. Preencha o formul\u00e1rio. Voc\u00ea precisa passar um URL para o campo URI de redirecionamento. Para este campo, estou passando um URL de servidor local. Vou criar um <code>callback.php<\/code>nas pr\u00f3ximas etapas. Preenchi os detalhes conforme mostrado na imagem abaixo.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<p>Ao enviar um formul\u00e1rio, voc\u00ea obter\u00e1 o ID do cliente na guia Vis\u00e3o geral.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<p>Em seguida, v\u00e1 para a guia &#8216;Certificados e segredos&#8217; e clique em &#8216;Novo segredo do cliente&#8217;.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<p>Ele abrir\u00e1 um pop-up onde voc\u00ea precisa adicionar uma descri\u00e7\u00e3o e escolher a op\u00e7\u00e3o Expira.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<p>Depois disso, voc\u00ea obter\u00e1 o segredo do seu cliente conforme mostrado abaixo.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<h4>Instale os pacotes necess\u00e1rios<\/h4>\n<p>Temos que integrar duas coisas &#8211; OAuth e REST API. Para o OAuth, vou usar a biblioteca <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hybridauth<\/a>. E para interagir com a API do Microsoft Graph, vamos usar a biblioteca <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a>.<\/p>\n<p>Podemos facilmente instalar esses 2 pacotes usando um Composer. Crie um <code>composer.json<\/code>arquivo no diret\u00f3rio raiz do seu projeto e adicione as linhas abaixo a ele.<\/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>Execute o comando abaixo que instalar\u00e1 esses pacotes.<\/p>\n<pre><code>composer install<\/code><\/pre>\n<p>Como dito, a API do Microsoft Graph usa OAuth para realizar as opera\u00e7\u00f5es da API. Exige que voc\u00ea gere um token de acesso que atua como um identificador de sua conta. Usando esse token de acesso, as APIs do Microsoft Graph validam se a solicita\u00e7\u00e3o de entrada \u00e9 v\u00e1lida e autorizada.<\/p>\n<p>O token de acesso tem vida curta. Eles expiram em breve. E uma vez expirado, n\u00e3o podemos fazer chamadas de API, pois a Microsoft trata a solicita\u00e7\u00e3o com o token expirado como uma solicita\u00e7\u00e3o n\u00e3o autorizada. Para resolver esse problema, usamos o &#8216;refresh_token&#8217; para gerar novamente o token de acesso em segundo plano. \u00c9 assim que o OAuth funciona.<\/p>\n<h3>Configura\u00e7\u00e3o de banco de dados<\/h3>\n<p>Para atingir nosso objetivo, precisamos armazenar o token em um local seguro. Precisamos do token ao chamar as APIs. Al\u00e9m disso, ele deve se regenerar ap\u00f3s expirar. Portanto, para armazenar os detalhes do token, crie uma tabela de banco de dados da seguinte maneira.<\/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>Vamos inserir o token no banco de dados ap\u00f3s concluir o processo de autoriza\u00e7\u00e3o. Al\u00e9m disso, atualizaremos o token em segundo plano. Para isso, vou criar uma classe de banco de dados para que possamos fazer facilmente as opera\u00e7\u00f5es de inser\u00e7\u00e3o, sele\u00e7\u00e3o e atualiza\u00e7\u00e3o.<\/p>\n<p><strong>class-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>Gerar token de acesso<\/h3>\n<p>Quando estiver pronto com os pacotes necess\u00e1rios e a classe de banco de dados, a pr\u00f3xima parte \u00e9 fazer a autentica\u00e7\u00e3o e armazenar os detalhes do token no banco de dados.<\/p>\n<p>A biblioteca Hybridauth fornece seu pr\u00f3prio processo para realizar a autoriza\u00e7\u00e3o. Ent\u00e3o, vamos segui-los. Crie um <code>config.php<\/code>arquivo e adicione o c\u00f3digo abaixo nele.<\/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>Certifique-se de substituir todos os marcadores de posi\u00e7\u00e3o por seus valores reais. Passei nos escopos necess\u00e1rios para nosso objetivo final, portanto, mantenha-o como est\u00e1. Agora, em <code>callback.php<\/code>que \u00e9 minha URL de retorno de chamada, escreverei um c\u00f3digo que inicia o processo de autentica\u00e7\u00e3o, redireciona para ele ap\u00f3s a autoriza\u00e7\u00e3o bem-sucedida e armazena as informa\u00e7\u00f5es dos tokens na tabela do banco de dados.<\/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>Execute <code>callback.php<\/code>no navegador e conclua o processo de autentica\u00e7\u00e3o. Ap\u00f3s a conclus\u00e3o da autentica\u00e7\u00e3o, voc\u00ea deve ver os detalhes do token armazenados na tabela de &#8216;tokens&#8217;.<\/p>\n<h3>Adicionar tabela na planilha do OneDrive<\/h3>\n<p>Para adicionar os dados por meio da API do Microsoft Graph, voc\u00ea precisa inserir uma tabela na planilha do OneDrive. V\u00e1 para a p\u00e1gina do OneDrive. Clique na &#8216;pasta de trabalho do Excel&#8217; no menu suspenso &#8216;Novo&#8217;.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<p>Quando estiver na p\u00e1gina da planilha, clique no \u00edcone &#8216;Tabela&#8217; e depois em &#8216;OK&#8217; no pop-up aberto.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<p>Depois disso, voc\u00ea ver\u00e1 a Tabela inserida na planilha do OneDrive da seguinte forma.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<p>Ajuste as colunas de acordo com suas necessidades. No meu caso, mantive 3 colunas.<\/p>\n<p>Agora, pode-se perguntar por que a necessidade de inserir uma tabela na planilha? Quando estava pesquisando este t\u00f3pico, descobri que esta \u00e9 a \u00fanica maneira de gravar dados na pasta de trabalho do Excel. Voc\u00ea pode ler mais sobre isso em sua <a href=\"https:\/\/docs.microsoft.com\/en-us\/graph\/excel-write-to-workbook\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o<\/a>.<\/p>\n<p>Observe que quando inserirmos a tabela pela primeira vez na planilha, seu valor ser\u00e1 &#8216;Tabela1&#8217;. Precisamos desse valor no momento de chamar APIs. Se, por algum motivo, voc\u00ea remover a tabela e inseri-la novamente, seu valor se tornar\u00e1 &#8216;Tabela2&#8217; e assim por diante.<\/p>\n<p>Copie o ID da sua planilha, que \u00e9 necess\u00e1rio em uma chamada de API. Voc\u00ea pode obt\u00ea-lo no URL do navegador, conforme mostrado na imagem abaixo.<\/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=\"Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP\" ><\/a><\/p>\n<h3>Grave dados na planilha do OneDrive com Microsoft Graph API e PHP<\/h3>\n<p>At\u00e9 o momento, conclu\u00edmos a instala\u00e7\u00e3o dos pacotes necess\u00e1rios, a inser\u00e7\u00e3o de tokens no banco de dados, a cria\u00e7\u00e3o de uma pasta de trabalho do Excel com uma tabela. Agora, estamos prontos para prosseguir e escrever um c\u00f3digo que anexa dados \u00e0 planilha do OneDrive usando a API do Microsoft Graph e PHP.<\/p>\n<p>Estou criando um arquivo <code>append-to-onedrive-sheet.php<\/code>e meu c\u00f3digo ser\u00e1 como escrito abaixo.<\/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>No c\u00f3digo acima, criei uma matriz que possui o elemento da matriz com 3 valores. Voc\u00ea pode passar tantos elementos de array. Voc\u00ea tem que passar o id da sua planilha para a <code>$item_id<\/code>vari\u00e1vel.<\/p>\n<p>Este c\u00f3digo busca um token de acesso do banco de dados e envia uma solicita\u00e7\u00e3o POST para o endpoint de API necess\u00e1rio. Se o token expirar, ele o regenerar\u00e1 automaticamente em segundo plano e continuar\u00e1 o processo.<\/p>\n<p>Experimente e voc\u00ea ver\u00e1 que seus dados est\u00e3o anexados \u00e0 pasta de trabalho do Excel de sua conta do OneDrive.<\/p>\n<p>Espero que voc\u00ea saiba como gravar dados na planilha do OneDrive usando a API do Microsoft Graph e PHP. Por favor, compartilhe seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/speech-to-text-usando-amazon-transcribe-em-php\/\" title=\"Speech-To-Text usando Amazon Transcribe em PHP\">Speech-To-Text usando Amazon Transcribe em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/enviar-e-mail-usando-mailjet-alternativa-ao-servidor-smtp-do-gmail-em-php\/\" title=\"Enviar e-mail usando Mailjet em PHP\">Enviar e-mail usando Mailjet em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/integracao-do-gateway-de-pagamento-do-paypal-em-php-usando-a-api-rest-do-paypal\/\" title=\"Integra\u00e7\u00e3o do gateway de pagamento do PayPal em PHP usando a API REST do PayPal\">Integra\u00e7\u00e3o do gateway de pagamento do PayPal em PHP usando a API REST do PayPal<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste artigo, estudamos como gravar dados na planilha do OneDrive usando a API do Microsoft Graph e PHP. API do Microsoft Graph segue o fluxo OAuth para<\/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":[210,278],"tags":[848],"class_list":["post-28244","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-9","category-php-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28244"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28244\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20342"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}