✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Kuinka integroida Google Sheets -sovellusliittymä PHP: hen

22

Aiemmin olen työskennellyt projektissa, jossa halusimme kirjoittaa tietoja dynaamisesti Google-laskentataulukkoon. Tämän saavuttamiseksi olimme olleet vuorovaikutuksessa Sheets-sovellusliittymän kanssa. Minusta se oli mielenkiintoinen aihe blogikirjoitukseen. Joten tässä artikkelissa tutkitaan, miten Google Sheets -sovellusliittymä integroidaan PHP: n avulla. Suoritamme luonti-, kirjoitus-, liite- ja lukutoimintoja laskentataulukoille API: n kautta.

Google Spreadsheet on ilmainen, web-pohjainen ohjelmistotoimistopaketti, jota ylläpitää Google. Laskentataulukkoa voidaan käyttää omaan tarkoitukseensa Google Drive -palvelussa.

Sivustojen osalta voit käyttää Google-taulukoita eri tarkoituksiin. Voidaan tallentaa käyttäjän yhteystiedot (puhelin ja sähköposti), maksutiedot, tapahtumarekisteröinnit, aktiviteetit ja paljon muuta Google-taulukkoon. Verkkosivustolta saatat haluta automaattisen järjestelmän, joka suorittaa kaikki luku-, kirjoitus- ja laskentataulukot, kun tietty toiminto käynnistyy. Se voidaan tehdä Sheets-sovellusliittymän kautta.

Rekisteröi sovellus ja luo kirjautumistiedot

Aion käyttää OAuthia vuorovaikutuksessa API: n kanssa. OAuth on turvallisempi ja suositeltu tapa tehdä API-toimintoja. Noudata alla olevia ohjeita, joita tarvitaan OAuth-integraatioon.

  • Siirry Google Developer Consoleen https://console.developers.google.com
  • Luo uusi projekti. Vaihtoehtoisesti voit myös valita olemassa olevan projektin.
  • Anna projektillesi nimi. Google Console luo sille yksilöllisen projektitunnuksen.
  • Projektisi näkyy vasemman sivupalkin yläosassa.
  • Napsauta Kirjasto. Näet luettelon Google-sovellusliittymistä.
  • Ota Google Sheets -sovellusliittymä käyttöön.
  • Napsauta Tunnistetiedot. Valitse Luo kirjautumistiedot -kohdasta Oauth-asiakastunnus. Valitse valintanappi Web-sovellukselle.
  • Anna nimi. Syötä verkkotunnuksesi URL-osoite kohtaan Valtuutetut JavaScript-alkuperät. Lisää valtuutettujen uudelleenohjausten URI-tiedostoihin uudelleenohjauksen URL-osoitteen linkki. Minun tapauksessani läpäisin URL-osoitteen http: //localhost/google-sheets-api/callback.php
  • Napsauta Luo-painiketta. Saat asiakastunnuksen ja asiakassalaisuuden ponnahdusikkunassa. Kopioi nämä tiedot. Tarvitsemme sitä hetken kuluttua.

Kuinka integroida Google Sheets -sovellusliittymä PHP: hen

Peruskokoonpano

Kuten sanottu, käytämme OAuthia API-toimintojen suorittamiseen. Se vaatii sinua luomaan käyttöoikeustunnuksen, joka toimii tunnuksena tilillesi. Tämän käyttöoikeustunnuksen avulla Google-sovellusliittymät tarkistavat, onko saapuva pyyntö kelvollinen ja valtuutettu.

Käyttöoikeustunnuksella on lyhyt käyttöikä. Ne vanhenevat pian. Ja kun se on vanhentunut, emme voi suorittaa API-kutsuja, koska Google käsittelee pyyntöä vanhentuneella tunnuksella luvattomana pyynnönä. Tämän ongelman ratkaisemiseksi käytämme ‘refresh_token’ -toimintoa käyttöoikeustunnuksen luomiseen taustalla. Näin OAuth toimii.

Aloitetaan OAuth-virtauksen rakentaminen. Luo composer.jsontiedosto ja lisää siihen alla olevat rivit.

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

Suorita sitten seuraava komento näiden kirjastojen asennusta varten.

composer install

Kun luomme käyttöoikeustunnuksen, se on tallennettava tietokantaan. Tallentamalla voit hakea tunnuksen milloin tahansa ja suorittaa API-puhelut. Luo taulukko tietokantaan suorittamalla alla oleva kysely.

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

Luo nyt DB-luokka, joka on vuorovaikutuksessa tietokannan kanssa ja hakee, tallentaa ja päivittää tunnustiedot taulukossa.

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

Korvaa yllä olevan koodin paikkamerkit todellisilla tietokannan kirjautumistiedoillasi. Oletan, että tässä haluat käyttää yhtä Google-tiliä. Jos aiot käyttää useita tilejä, muokkaa kyselyjä tarpeidesi mukaan.

Luo käyttöoikeustunnus

Olemme luoneet taulukon ja asentaneet kirjastot. Seuraava asia, joka on tehtävä, on valtuuttaa Google-tili ja tallentaa käyttöoikeustunnus ‘Token’ -taulukkoon.

Luo config.phptiedosto ja kirjoita kokoonpano HybridAuth-kirjaston ohjeiden mukaisesti.

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

Varmista, että määrität vakioiden GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET arvot. Välitä myös takaisinsoitto-URL yllä olevassa koodissa. Kun käyttäjä on suorittanut valtuutuksen, hän ohjaa takaisinsoiton URL-osoitteeseen.

Käyttämällä callback.phptiedosto, noudamme käyttötunnisteena yksityiskohtia ja tallentaa sen tietokantaan seuraavasti.

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

Siirry tässä vaiheessa selaimeen ja suorita YOUR_DOMAIN_URL / callback.php, se ohjaa sinut Google-tilille. Suorita valtuutusprosessi loppuun. Kun olet suorittanut prosessin, tarkista ‘merkkitaulukko’. Sen olisi pitänyt tallentaa tunnustiedot.

Luo laskentataulukko Sheets API: n ja PHP: n avulla

Olet nyt tallentanut käyttöoikeustunnuksen taulukkoon. Se tarkoittaa, että voit jatkaa jatkotoimenpiteitä tilisi Google-arkeissa. Aloitetaan ensin laskentataulukon luomisesta Sheets-sovellusliittymän avulla.

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

Tämä koodi saa ensin tunnuksen tiedot DB: ltä. Tämän tunnuksen avulla se soittaa Google sheet service -palveluun ja luo laskentataulukon. Tulostin luodun laskentataulukon tunnuksen.

Jos käyttöoikeustunnus on vanhentunut, koodi siirtyy salauslohkoon. Saalislohkossa se uudistaa käyttöoikeustunnuksen, päivittää sen tietokantaan ja jatkaa API-toimintaa.

Samaa koodia, jossa on vähän muutoksia, käytetään muissa laskentataulukoiden toiminnoissa.

Kirjoita tiedot taulukkolaskentaohjelmaan

Kirjoitustoimintojen suorittamiseksi sinun on välitettävä kirjoitettava solualue. Esimerkiksi haluat lisätä otsikot Nimi ja Sähköposti yläreunaan. Tällöin alueestasi tulee A1: B1. Se tarkoittaa, että kirjoitamme Nimi- ja Sähköposti-otsikot vastaavasti A1- ja B1-soluihin.

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

Tässä olen välittänyt laskentataulukon tunnuksen menetelmälle. Voit muokata tätä toimintoa ja välittää lisäparametreja. Edellisessä koodissa olemme palauttaneet laskentataulukon tunnuksen, jota voidaan käyttää yllä olevassa koodissa. Vaihtoehtoisesti voit saada laskentataulukon tunnuksen taulukon URL-osoitteesta. Katso alla oleva kuvakaappaus.

Kuinka integroida Google Sheets -sovellusliittymä PHP: hen

Merkkien ‘d’ ja ‘edit’ välissä oleva merkkijono on Google-laskentataulukon tunnus.

Liitä tiedot Google-taulukkoon

Jos haluat tallentaa tiettyjä tietoja Google-taulukoihin, sinun on liitettävä ne olemassa olevaan laskentataulukkoon. Saattaa olla tapauksia, joissa haluat liittää yhden tai useamman rivin kerralla. Käyttäjä voi siirtää yhden tai useamman matriisielementin ja liittää tietoja taulukkoon alla olevan kuvan mukaisesti.

<?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 käyttänyt aluetta A1: B1 ja läpäissyt 2 erillistä taulukkoelementtiä. Sheets API liittää nämä tiedot taulukon tietojen jälkeen. Huomaa, että välitämme alueen A1: B1, mutta se ei korvaa näihin soluihin jo kirjoitettuja arvoja. Sen sijaan se kirjoittaa tietoja seuraaviin käytettävissä oleviin soluihin.

Lue tiedot Google-taulukosta

Olemme kirjoittaneet koodin laskentataulukon luomista, kirjoittamista taulukkoon ja tietojen liittämistä taulukkoon. Lopuksi katsotaanpa, kuinka lukea tietoja Google-taulukosta.

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

Toivon, että ymmärrät kuinka integroida Google Sheets -sovellusliittymä PHP: n avulla. Haluaisin kuulla ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.

Aiheeseen liittyvät artikkelit

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja