...
✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas integreerida Google’i arvutustabelite API PHP-ga

18

Varem olen töötanud projektiga, kus tahtsime andmeid dünaamiliselt Google’i arvutustabelisse kirjutada. Selle saavutamiseks olime suhelnud Sheets API-ga. Mulle tundus see huvitav teema blogipostituse jaoks. Niisiis uurime selles artiklis, kuidas integreerida Google’i arvutustabelite API PHP abil. Teeme arvutustabelite loomise, kirjutamise, lisamise ja lugemise toimingud API kaudu.

Google Spreadsheet on tasuta veebipõhine tarkvarakontorite komplekt, mida haldab Google. Google Drive’i teenuses saab arvutustabelit kasutada oma eesmärkidel.

Veebisaitide osas saate Google’i lehti kasutada erinevatel eesmärkidel. Google’i lehele saab salvestada kasutaja kontaktteabe (telefon ja e-post), makse üksikasjad, sündmuste registreerimised, tegevused ja palju muud. Veebisaidil võite soovida automatiseeritud süsteemi, mis teeb konkreetse toimingu käivitamisel arvutustabelites kõik lugemis- ja kirjutamistoimingud. Seda saab teha Sheets API kaudu.

Registreerige rakendus ja looge volitused

Kasutan API-ga suhtlemiseks OAuthi. OAuth on turvalisem ja soovitatav viis API toimingute tegemiseks. Järgige allpool olevaid samme, mis on vajalikud OAuthi integreerimiseks.

  • Minge Google’i arendajakonsoolile https://console.developers.google.com
  • Looge uus projekt. Teise võimalusena saate valida ka olemasoleva projekti.
  • Pange oma projektile nimi. Google Console loob sellele ainulaadse projekti ID.
  • Teie projekt kuvatakse vasaku külgriba ülaosas.
  • Klõpsake teeki. Näete Google’i API-de loendit.
  • Luba Google’i arvutustabelite API.
  • Klõpsake Mandaadid. Valige Loo mandaadid jaotisest Oauth Client id. Valige veebirakenduse jaoks raadionupp.
  • Pange nimi. Sisestage jaotises Volitatud JavaScripti päritolu oma domeeni URL. Volitatud ümbersuunamise URI-desse lisage ümbersuunamise URL-i link. Minu puhul läbisin URL-i http: //localhost/google-sheets-api/callback.php
  • Klõpsake nuppu Loo. Hüpikaknast saate kliendi ID ja kliendisaladuse. Kopeerige need üksikasjad. Me vajame seda mõne aja pärast.

Kuidas integreerida Google'i arvutustabelite API PHP-ga

Põhikonfiguratsioon

Nagu öeldud, kasutame API-toimingute tegemiseks OAuthi. See nõuab, et genereeriksite juurdepääsuloa, mis toimib teie konto identifikaatorina. Selle juurdepääsuloa abil kontrollivad Google API-d, kas sissetulev taotlus on kehtiv ja volitatud.

Juurdepääsu märgil on lühike eluiga. Need aeguvad varsti. Ja kui aegumine on lõppenud, ei saa me API-kõnesid teha, kuna Google käsitleb aegunud märgiga päringut volitamata taotlusena. Selle probleemi lahendamiseks kasutame taustal juurdepääsu loa taastamiseks parameetrit ‘refresh_token’. Nii töötab OAuth.

Alustame OAuthi voo ülesehitamist. Looge composer.jsonfail ja lisage selles allpool olevad read.

{
    "require": {
        "google/apiclient": "2.0",
        "hybridauth/hybridauth": "~3.0"
    }
}

Järgmisena käivitage nende teekide installimiseks järgmine käsk.

composer install

Kui me loome juurdepääsuloa, tuleb see salvestada andmebaasi. Selle salvestamisega saate igal ajal tuua luba ja teha API-kõnesid. Andmebaasi tabeli loomiseks käivitage järgmine päring.

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

Nüüd looge DB-klass, mis suhtleb andmebaasiga ja otsib, salvestab, värskendab tabelis sümboolset teavet.

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

Asendage ülaltoodud koodi kohahoidjad oma tegelike andmebaasi mandaatidega. Eeldan, et soovite kasutada ühte Google’i kontot. Kui kavatsete kasutada mitut kontot, muutke päringuid vastavalt oma vajadustele.

Loo juurdepääsuluba

Oleme lõpetanud tabeli loomise ja raamatukogude installimise. Järgmine asi, mida tuleb teha, on volitada Google’i konto ja salvestada juurdepääsuluba tabelisse "märk".

Looge config.phpfail ja kirjutage konfiguratsioon vastavalt HybridAuthi teegi juhistele.

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

Määrake kindlasti konstantide GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET väärtused. Samuti edastage ülaltoodud koodis tagasihelistamise URL. Kui kasutaja on volituse lõpule viinud, suunatakse ta tagasi tagasihelistamise URL-ile.

Kasutades callback.phpfaili, me tõmmata juurepääsuluba üksikasju ja hoidke seda andmebaasi järgmiselt.

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

Selles etapis minge brauserisse ja käivitage sait YOUR_DOMAIN_URL / callback.php, see suunab teid Google’i kontole. Viige autoriseerimisprotsess lõpule. Pärast protsessi lõpetamist kontrollige tabelit ‘märgis’. See oleks pidanud salvestama märgiteabe.

Looge arvutustabel Sheets API ja PHP abil

Olete nüüd oma tabelisse salvestanud juurdepääsuloa. See tähendab, et saate jätkata oma konto Google’i lehtedel edasiste toimingutega. Alustame kõigepealt arvutustabeli loomisega, kasutades Sheets API-d.

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

See kood saab esmalt loa üksikasjad DB-st. Selle loa kasutamisel helistab see Google’i lehe teenuseks ja loob arvutustabeli. Trükkisin loodud arvutustabeli ID.

Kui juurdepääsuluba on aegunud, läheb kood püüdmisplokki. Püügiplokis taastab see juurdepääsuloa, värskendab seda andmebaasis ja jätkab API-toimingut.

Sama koodi koos väheste muudatustega kasutatakse arvutustabelite muude toimingute jaoks.

Andmete kirjutamine arvutustabelisse

Kirjutusoperatsioonide sooritamiseks peate läbima kirjutatavate lahtrite vahemiku. Näiteks soovite ülaosas lisada pealkirjad Nimi ja E-post. Sel juhul saab teie vahemikuks A1: B1. See tähendab, et kirjutame pealkirjad Nimi ja E-post vastavalt lahtritesse A1 ja 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.
        }
    }
}

Siin olen meetodile edastanud arvutustabeli ID. Saate seda funktsiooni muuta ja edastada täiendavaid parameetreid. Eelmises koodis oleme tagastanud arvutustabeli ID, mida saab kasutada ülaltoodud koodis. Teise võimalusena võite arvutustabeli ID hankida oma lehe URL-ist. Vaadake allolevat ekraanipilti.

Kuidas integreerida Google'i arvutustabelite API PHP-ga

‘D’ ja ‘edit’ vahel ilmuv string on Google’i arvutustabeli ID.

Andmete lisamine Google Sheetile

Kui soovite konkreetset teavet Google’i lehele salvestada, peate selle lisama olemasolevale arvutustabelile. Võib juhtuda, et soovite ühe või mitu rida korraga lisada. Kasutaja saab edastada ühe või mitu massiivi elementi ja lisada lehele andmed, nagu allpool näidatud.

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

Olen kasutanud vahemikku ‘A1: B1’ ja läbinud 2 eraldi massiivi elementi. Sheets API lisab need üksikasjad pärast tabeli andmeid. Pange tähele, kuigi läbime vahemikus A1: B1, ei asenda see nendesse lahtritesse juba kirjutatud väärtusi. Selle asemel kirjutab see andmed järgmistesse saadaolevatesse lahtritesse.

Google’i lehe andmete lugemine

Oleme kirjutanud koodi arvutustabeli loomiseks, arvutustabelisse kirjutamiseks ja andmete lisamiseks arvutustabelisse. Lõpuks vaatame, kuidas Google’i lehelt andmeid lugeda.

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

Loodetavasti saate aru, kuidas integreerida Google’i arvutustabelite API PHP abil. Tahaksin kuulda teie mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.

seotud artiklid

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem