...
✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

98

Recentemente, publiquei um artigo Como integrar API de planilhas do Google com PHP, 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.

A API do Microsoft Graph segue o fluxo OAuth para a autorização. Isso significa que precisamos gerar um token de acesso usando o processo OAuth. Para isso, primeiro você precisa registrar o aplicativo e pegar suas credenciais.

Registrar um aplicativo e criar credenciais

Ao integrar um processo OAuth, você precisa ter um ID de cliente e um segredo do cliente. Você o receberá após registrar os aplicativos. Pode-se seguir as etapas mencionadas nesta página e registrar seu aplicativo com a Microsoft.

Faça login no Portal do Azure e pesquise por Registro de Aplicativo. Preencha o formulário. Você precisa passar um URL para o campo URI de redirecionamento. Para este campo, estou passando um URL de servidor local. Vou criar um callback.phpnas próximas etapas. Preenchi os detalhes conforme mostrado na imagem abaixo.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Ao enviar um formulário, você obterá o ID do cliente na guia Visão geral.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Em seguida, vá para a guia ‘Certificados e segredos’ e clique em ‘Novo segredo do cliente’.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Ele abrirá um pop-up onde você precisa adicionar uma descrição e escolher a opção Expira.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Depois disso, você obterá o segredo do seu cliente conforme mostrado abaixo.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Instale os pacotes necessários

Temos que integrar duas coisas – OAuth e REST API. Para o OAuth, vou usar a biblioteca Hybridauth. E para interagir com a API do Microsoft Graph, vamos usar a biblioteca Guzzle.

Podemos facilmente instalar esses 2 pacotes usando um Composer. Crie um composer.jsonarquivo no diretório raiz do seu projeto e adicione as linhas abaixo a ele.

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

Execute o comando abaixo que instalará esses pacotes.

composer install

Como dito, a API do Microsoft Graph usa OAuth para realizar as operações da API. Exige que você 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ção de entrada é válida e autorizada.

O token de acesso tem vida curta. Eles expiram em breve. E uma vez expirado, não podemos fazer chamadas de API, pois a Microsoft trata a solicitação com o token expirado como uma solicitação não autorizada. Para resolver esse problema, usamos o ‘refresh_token’ para gerar novamente o token de acesso em segundo plano. É assim que o OAuth funciona.

Configuração de banco de dados

Para atingir nosso objetivo, precisamos armazenar o token em um local seguro. Precisamos do token ao chamar as APIs. Além disso, ele deve se regenerar após expirar. Portanto, para armazenar os detalhes do token, crie uma tabela de banco de dados da seguinte maneira.

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

Vamos inserir o token no banco de dados após concluir o processo de autorização. Além disso, atualizaremos o token em segundo plano. Para isso, vou criar uma classe de banco de dados para que possamos fazer facilmente as operações de inserção, seleção e atualização.

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

Gerar token de acesso

Quando estiver pronto com os pacotes necessários e a classe de banco de dados, a próxima parte é fazer a autenticação e armazenar os detalhes do token no banco de dados.

A biblioteca Hybridauth fornece seu próprio processo para realizar a autorização. Então, vamos segui-los. Crie um config.phparquivo e adicione o código abaixo nele.

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

Certifique-se de substituir todos os marcadores de posição por seus valores reais. Passei nos escopos necessários para nosso objetivo final, portanto, mantenha-o como está. Agora, em callback.phpque é minha URL de retorno de chamada, escreverei um código que inicia o processo de autenticação, redireciona para ele após a autorização bem-sucedida e armazena as informações dos tokens na tabela do banco de dados.

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

Execute callback.phpno navegador e conclua o processo de autenticação. Após a conclusão da autenticação, você deve ver os detalhes do token armazenados na tabela de ‘tokens’.

Adicionar tabela na planilha do OneDrive

Para adicionar os dados por meio da API do Microsoft Graph, você precisa inserir uma tabela na planilha do OneDrive. Vá para a página do OneDrive. Clique na ‘pasta de trabalho do Excel’ no menu suspenso ‘Novo’.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Quando estiver na página da planilha, clique no ícone ‘Tabela’ e depois em ‘OK’ no pop-up aberto.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Depois disso, você verá a Tabela inserida na planilha do OneDrive da seguinte forma.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Ajuste as colunas de acordo com suas necessidades. No meu caso, mantive 3 colunas.

Agora, pode-se perguntar por que a necessidade de inserir uma tabela na planilha? Quando estava pesquisando este tópico, descobri que esta é a única maneira de gravar dados na pasta de trabalho do Excel. Você pode ler mais sobre isso em sua documentação.

Observe que quando inserirmos a tabela pela primeira vez na planilha, seu valor será ‘Tabela1’. Precisamos desse valor no momento de chamar APIs. Se, por algum motivo, você remover a tabela e inseri-la novamente, seu valor se tornará ‘Tabela2’ e assim por diante.

Copie o ID da sua planilha, que é necessário em uma chamada de API. Você pode obtê-lo no URL do navegador, conforme mostrado na imagem abaixo.

Grave dados na planilha do OneDrive usando Microsoft Graph API e PHP

Grave dados na planilha do OneDrive com Microsoft Graph API e PHP

Até o momento, concluímos a instalação dos pacotes necessários, a inserção de tokens no banco de dados, a criação de uma pasta de trabalho do Excel com uma tabela. Agora, estamos prontos para prosseguir e escrever um código que anexa dados à planilha do OneDrive usando a API do Microsoft Graph e PHP.

Estou criando um arquivo append-to-onedrive-sheet.phpe meu código será como escrito abaixo.

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

No código acima, criei uma matriz que possui o elemento da matriz com 3 valores. Você pode passar tantos elementos de array. Você tem que passar o id da sua planilha para a $item_idvariável.

Este código busca um token de acesso do banco de dados e envia uma solicitação POST para o endpoint de API necessário. Se o token expirar, ele o regenerará automaticamente em segundo plano e continuará o processo.

Experimente e você verá que seus dados estão anexados à pasta de trabalho do Excel de sua conta do OneDrive.

Espero que você saiba como gravar dados na planilha do OneDrive usando a API do Microsoft Graph e PHP. Por favor, compartilhe seus pensamentos e sugestões na seção de comentários abaixo.

Artigos relacionados

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação