Come integrare l’API di Fogli Google con PHP
In passato, ho lavorato a un progetto in cui volevamo scrivere dati in modo dinamico su Google Spreadsheet. Per raggiungere questo obiettivo, abbiamo interagito con l’API di Fogli. L’ho trovato un argomento interessante per il post del blog. Quindi, in questo articolo, studiamo come integrare l’API di Fogli Google utilizzando PHP. Eseguiremo operazioni di creazione, scrittura, aggiunta e lettura su fogli di calcolo tramite l’API.
Google Spreadsheet è una suite per ufficio software gratuita basata sul Web gestita da Google. È possibile utilizzare il foglio di calcolo per i propri scopi all’interno del servizio Google Drive.
Quando si tratta di siti Web, puoi utilizzare i fogli di Google per vari scopi. È possibile memorizzare le informazioni di contatto dell’utente (telefono ed e-mail), i dettagli di pagamento, le registrazioni agli eventi, le attività e molto altro nel foglio di Google. Sul sito Web, potresti volere un sistema automatizzato che esegua tutte le operazioni di lettura e scrittura su fogli di calcolo quando si attiva un’azione specifica. Può essere fatto tramite l’ API Fogli.
Registra un’applicazione e crea credenziali
Userò OAuth per interagire con l’API. OAuth è un modo più sicuro e consigliato di eseguire operazioni API. Segui i passaggi seguenti necessari per l’integrazione di OAuth.
- Vai alla Console per gli sviluppatori di Google https://console.developers.google.com
- Crea un nuovo progetto. In alternativa, puoi anche selezionare un progetto esistente.
- Dai un nome al tuo progetto. Google Console genererà un ID progetto univoco per esso.
- Il tuo progetto apparirà in cima alla barra laterale sinistra.
- Fare clic su Libreria. Vedrai l’elenco delle API di Google.
- Abilita l’API di Fogli Google.
- Fare clic su Credenziali. Seleziona ID client Oauth in Crea credenziali. Scegli il pulsante di opzione per l’applicazione Web.
- Dai il nome. In Origini JavaScript autorizzate inserisci l’URL del tuo dominio. Negli URI di reindirizzamento autorizzati aggiungere il collegamento dell’URL di reindirizzamento. Nel mio caso ho passato l’URL http://localhost/google-sheets-api/callback.php
- Fare clic sul pulsante Crea. Otterrai l’ID cliente e il segreto del cliente nel pop-up. Copia questi dettagli. Ne avremo bisogno in un momento.
Configurazione di base
Come detto, utilizzeremo OAuth per eseguire le operazioni API. Richiede di generare un token di accesso che funge da identificatore per il tuo account. Utilizzando questo token di accesso, le API di Google convalidano se la richiesta in arrivo è valida e autorizzata.
Il token di accesso ha una vita breve. Scadono presto. E una volta scaduto, non possiamo effettuare chiamate API poiché Google considera la richiesta con il token scaduto come una richiesta non autorizzata. Per risolvere questo problema, utilizziamo "refresh_token" per rigenerare il token di accesso in background. Ecco come funziona OAuth.
Iniziamo a creare il flusso OAuth. Crea il composer.json
file e aggiungi le righe sottostanti.
{
"require": {
"google/apiclient": "2.0",
"hybridauth/hybridauth": "~3.0"
}
}
Quindi, esegui il comando seguente per l’installazione di queste librerie.
composer install
Quando generiamo il token di accesso, deve essere archiviato in un database. Memorizzandolo, puoi recuperare un token in qualsiasi momento ed eseguire le chiamate API. Esegui la query seguente per creare una tabella nel database.
CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`access_token` text NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Ora, crea una classe DB che interagirà con il database e recupererà, memorizzerà, aggiornerà le informazioni sui token nella tabella.
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)");
}
}
}
Sostituisci i segnaposto nel codice sopra con le tue credenziali di database effettive. Qui presumo che tu voglia utilizzare un singolo account Google. Se intendi utilizzare più account, modifica le query in base alle tue esigenze.
Genera token di accesso
Abbiamo finito con la creazione di una tabella e l’installazione delle librerie. La prossima cosa da fare è autorizzare l’account Google e memorizzare il token di accesso nella tabella "token".
Crea un config.php
file e scrivi una configurazione secondo le linee guida della libreria HybridAuth.
config.php
<?php
require_once 'vendor/autoload.php';
require_once 'class-db.php';
define('GOOGLE_CLIENT_ID', 'PASTE_CLIENT_ID_HERE');
define('GOOGLE_CLIENT_SECRET', 'PASTE_CLIENT_SECRET_HERE');
$config = [
'callback' => 'YOUR_DOMAIN_URL/callback.php',
'keys' => [
'id' => GOOGLE_CLIENT_ID,
'secret' => GOOGLE_CLIENT_SECRET
],
'scope' => 'https://www.googleapis.com/auth/spreadsheets',
'authorize_url_parameters' => [
'approval_prompt' => 'force', // to pass only when you need to acquire a new refresh token.
'access_type' => 'offline'
]
];
$adapter = new HybridauthProviderGoogle( $config );
Assicurati di definire i valori delle costanti GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET. Inoltre, passa l’URL di richiamata nel codice sopra. Quando l’utente completa l’autorizzazione, reindirizzerà all’URL di richiamata.
Utilizzando callback.php
file, recupereremo i dettagli del token di accesso e li memorizzeremo nel database come segue.
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() ;
}
A questo punto, vai al browser ed esegui YOUR_DOMAIN_URL/callback.php, ti reindirizzerà all’account Google. Completa il processo di autorizzazione. Dopo aver completato il processo, controlla la tabella ‘token’. Dovrebbe aver memorizzato le informazioni sul token.
Crea un foglio di calcolo utilizzando l’API di Fogli e PHP
Ora hai memorizzato il token di accesso nella tua tabella. Significa che puoi procedere con le ulteriori operazioni sui fogli Google del tuo account. Iniziamo prima con la creazione del foglio di calcolo utilizzando l’API Fogli.
create-sheet.php
<?php
require_once 'config.php';
create_spreadsheet();
function create_spreadsheet() {
$client = new Google_Client();
$db = new DB();
$arr_token = (array) $db->get_access_token();
$accessToken = array(
'access_token' => $arr_token['access_token'],
'expires_in' => $arr_token['expires_in'],
);
$client->setAccessToken($accessToken);
$service = new Google_Service_Sheets($client);
try {
$spreadsheet = new Google_Service_Sheets_Spreadsheet([
'properties' => [
'title' => 'API Sheet'
]
]);
$spreadsheet = $service->spreadsheets->create($spreadsheet, [
'fields' => 'spreadsheetId'
]);
printf("Spreadsheet ID: %sn", $spreadsheet->spreadsheetId);
} catch(Exception $e) {
if( 401 == $e->getCode()) {
$refresh_token = $db->get_refersh_token();
$client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
$response = $client->request('POST', '/o/oauth2/token', [
'form_params' => [
"grant_type" => "refresh_token",
"refresh_token" => $refresh_token,
"client_id" => GOOGLE_CLIENT_ID,
"client_secret" => GOOGLE_CLIENT_SECRET,
],
]);
$data = (array) json_decode($response->getBody());
$data['refresh_token'] = $refresh_token;
$db->update_access_token(json_encode($data));
create_spreadsheet();
} else {
echo $e->getMessage(); //print the error just in case your video is not uploaded.
}
}
}
Questo codice ottiene prima i dettagli del token dal DB. Usando questo token chiama il servizio di fogli di Google e crea un foglio di calcolo. Ho stampato l’ID di un foglio di calcolo creato.
Se un token di accesso è scaduto, il codice va al blocco catch. Nel blocco catch, rigenera il token di accesso, lo aggiorna nel database e continua l’operazione API.
Lo stesso codice con piccole modifiche verrà utilizzato per altre operazioni sui fogli di calcolo.
Scrivi dati su un foglio di calcolo
Per eseguire le operazioni di scrittura, è necessario passare un intervallo di celle da scrivere. Ad esempio, vuoi aggiungere le intestazioni Nome ed E-mail in alto. In tal caso, il tuo intervallo diventa "A1:B1". Significa che scriveremo le intestazioni Nome ed Email rispettivamente nelle celle A1 e B1.
<?php
require_once 'config.php';
write_to_sheet('SPREADSHEET_ID');
function write_to_sheet($spreadsheetId = '') {
$client = new Google_Client();
$db = new DB();
$arr_token = (array) $db->get_access_token();
$accessToken = array(
'access_token' => $arr_token['access_token'],
'expires_in' => $arr_token['expires_in'],
);
$client->setAccessToken($accessToken);
$service = new Google_Service_Sheets($client);
try {
$range = 'A1:B1';
$values = [
[
'Name',
'Email',
],
];
$body = new Google_Service_Sheets_ValueRange([
'values' => $values
]);
$params = [
'valueInputOption' => 'USER_ENTERED'
];
$result = $service->spreadsheets_values->update($spreadsheetId, $range, $body, $params);
printf("%d cells updated.", $result->getUpdatedCells());
} catch(Exception $e) {
if( 401 == $e->getCode()) {
$refresh_token = $db->get_refersh_token();
$client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
$response = $client->request('POST', '/o/oauth2/token', [
'form_params' => [
"grant_type" => "refresh_token",
"refresh_token" => $refresh_token,
"client_id" => GOOGLE_CLIENT_ID,
"client_secret" => GOOGLE_CLIENT_SECRET,
],
]);
$data = (array) json_decode($response->getBody());
$data['refresh_token'] = $refresh_token;
$db->update_access_token(json_encode($data));
write_to_sheet($spreadsheetId);
} else {
echo $e->getMessage(); //print the error just in case your video is not uploaded.
}
}
}
Qui, ho passato l’ID del foglio di calcolo al metodo. È possibile modificare questa funzione e passare parametri aggiuntivi. Nel codice precedente, abbiamo restituito l’ID del foglio di calcolo che può essere utilizzato nel codice precedente. In alternativa, puoi ottenere l’ID del foglio di lavoro dall’URL del tuo foglio. Guarda lo screenshot qui sotto.
La stringa che compare tra "d" e "edit" è l’ID di un foglio di lavoro di Google.
Aggiungi dati a un foglio Google
Se stai cercando di memorizzare informazioni specifiche nel foglio di Google, devi aggiungerle al foglio di calcolo esistente. Potrebbero esserci casi in cui desideri aggiungere una o più righe in una volta sola. L’utente può passare gli elementi dell’array singoli o multipli e aggiungere dati al foglio come mostrato di seguito.
<?php
require_once 'config.php';
append_to_sheet('SPREADSHEET_ID');
function append_to_sheet($spreadsheetId = '') {
$client = new Google_Client();
$db = new DB();
$arr_token = (array) $db->get_access_token();
$accessToken = array(
'access_token' => $arr_token['access_token'],
'expires_in' => $arr_token['expires_in'],
);
$client->setAccessToken($accessToken);
$service = new Google_Service_Sheets($client);
try {
$range = 'A1:B1';
$values = [
[
'John Doe',
'[email protected]',
],
[
'Jack Waugh',
'[email protected]',
],
// Additional rows ...
];
$body = new Google_Service_Sheets_ValueRange([
'values' => $values
]);
$params = [
'valueInputOption' => 'USER_ENTERED'
];
$result = $service->spreadsheets_values->append($spreadsheetId, $range, $body, $params);
printf("%d cells appended.", $result->getUpdates()->getUpdatedCells());
} catch(Exception $e) {
if( 401 == $e->getCode()) {
$refresh_token = $db->get_refersh_token();
$client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
$response = $client->request('POST', '/o/oauth2/token', [
'form_params' => [
"grant_type" => "refresh_token",
"refresh_token" => $refresh_token,
"client_id" => GOOGLE_CLIENT_ID,
"client_secret" => GOOGLE_CLIENT_SECRET,
],
]);
$data = (array) json_decode($response->getBody());
$data['refresh_token'] = $refresh_token;
$db->update_access_token(json_encode($data));
append_to_sheet($spreadsheetId);
} else {
echo $e->getMessage(); //print the error just in case your video is not uploaded.
}
}
}
Ho usato l’intervallo "A1: B1" e ho passato 2 elementi di array separati. L’API di Fogli aggiunge questi dettagli dopo i dati della tabella. Tieni presente che anche se stiamo passando "A1: B1" nell’intervallo, non sostituirà i valori già scritti in queste celle. Invece, scrive i dati nelle successive celle disponibili.
Leggi i dati da un foglio Google
Abbiamo scritto un codice per creare un foglio di calcolo, scrivere su un foglio di calcolo e aggiungere dati al foglio di calcolo. Infine, vediamo come leggere i dati da un foglio Google.
<?php
require_once 'config.php';
read_sheet('SPREADSHEET_ID');
function read_sheet($spreadsheetId = '') {
$client = new Google_Client();
$db = new DB();
$arr_token = (array) $db->get_access_token();
$accessToken = array(
'access_token' => $arr_token['access_token'],
'expires_in' => $arr_token['expires_in'],
);
$client->setAccessToken($accessToken);
$service = new Google_Service_Sheets($client);
try {
$range = 'A:B';
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();
if (empty($values)) {
print "No data found.n";
} else {
print "Name, Email:n";
foreach ($values as $row) {
// Print columns A and E, which correspond to indices 0 and 4.
printf("%s, %sn", $row[0], $row[1]);
}
}
} catch(Exception $e) {
if( 401 == $e->getCode()) {
$refresh_token = $db->get_refersh_token();
$client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
$response = $client->request('POST', '/o/oauth2/token', [
'form_params' => [
"grant_type" => "refresh_token",
"refresh_token" => $refresh_token,
"client_id" => GOOGLE_CLIENT_ID,
"client_secret" => GOOGLE_CLIENT_SECRET,
],
]);
$data = (array) json_decode($response->getBody());
$data['refresh_token'] = $refresh_token;
$db->update_access_token(json_encode($data));
read_sheet($spreadsheetId);
} else {
echo $e->getMessage(); //print the error just in case your video is not uploaded.
}
}
}
Spero che tu capisca come integrare l’API di Fogli Google utilizzando PHP. Mi piacerebbe sentire i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.
articoli Correlati
- Come utilizzare l’API di YouTube per caricare video sul canale YouTube
- Come aggiungere l’accesso OAuth a Google nel sito Web con PHP
- Come creare una riunione su Zoom utilizzando Zoom API e PHP