Načítáme a zapisujeme data do Tabulek Google pomocí PHP. Krok za krokem

Dostal jsem úkol napojit Drupal na data uložená v Tabulkách Google. Nejdříve mi trochu vrtalo hlavou, jestli to nebude složité kvůli přihlašování ke Google účtu. Nicméně celý úkol má docela jednoduché řešení a propojení tabulek na skript v PHP je poměrně snadné.

Skript, který načte v PHP data z Tabulek Google není o moc složitější než kterékoli zpracování dat z CSV nebo jiného lokálního souboru. Potřebujete jen tu správnou knihovnu v Composeru. Jedna otravná záležitost vás ale nemine. Je jí vytvoření servisního účtu v Google Cloud Consoli.

Image
Ukázka načítání dat z Tabulek Google v PHP
Ukázka načítání dat z Tabulek Google v PHP

Jak získat přístupové údaje pro Google Sheets API

Pokud jste v ní ještě nikdy nebyli, tak vězte, že Google Cloud Console je rozhraní, pomocí kterého si vytváříte přístupové údaje pro aplikace a skripty, které nějakým způsobem automatizují práci s aplikacemi Google. Typicky sem zavítáte pro vygenerování klíčů k využívání mapového portálu na svém webu. Ale výjimkou není ani propojení na dokumenty a tabulky.

Nově vytvořenému servisnímu účtu je potřeba přidělit oprávnění do konkrétní Google Tabulky. Otevřete si ji, klikněte na Sdílení a přidejte sdílení pro mailovou adresu servisního účtu. Najdete ji v Google Cloud Consoli i ve staženém JSON souboru.

Image
Google Cloud Console a Google Sheets API
Google Cloud Console a Google Sheets API

Jak načítat data z tabulky Google pomocí PHP

To nejsložitější máte za sebou a teď už zbývá dát dohromady jenom PHP skript, který bude data z Tabulky Google zpracovávat.

<?php

require "vendor/autoload.php";

// Připojení k Google API
$client = new \Google_Client();
$client->setApplicationName("Google Sheets API PHP");
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);

// Načtení pověření z JSON souboru
$client->setAuthConfig("vas-klic.json");

$service = new \Google_Service_Sheets($client);

// ID tabulky (z URL Google Sheets)
$spreadsheetId = "id-vasi-tabulky";

// Rozsah dat (např. A1:G, tedy všechny řádky a sloupce A až G)
$range = "List 1!A1:G";

// Načtení dat z tabulky
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();

if (empty($values)) {
    echo "Žádná data nenalezena.\n";
} else {
    foreach ($values as $rowIndex => $row) {
        if (isset($row[6]) && $row[6] == "FALSE") {
            echo implode(", ", $row) . "\n";

            $updatedRange = "List 1!G" . ($rowIndex + 1);
            // +1 kvůli tomu, že indexace začíná na 0
            $body = new \Google_Service_Sheets_ValueRange([
                'values' => [["TRUE"]]
            ]);

            // Aktualizuj tabulku
            $params = ['valueInputOption' => 'RAW'];
            $service->spreadsheets_values->update($spreadsheetId, $updatedRange, $body, $params);
        }
    }
}

Tip: vyhodnocení TRUE a FALSE mě dosti potrápilo. Dostal jsem za úkol zpracovat tabulku, kde je ve sloupečku prázdné nebo zaškrtnuté zatrhovátko. Zobrazení hodnoty mi ukazovalo TRUE nebo FALSE, ale podmínka na něj nereagovala. Až klasická záchrana programátora var_dump($row); mi ukázala, že tento boolean je v tabulce ve skutečnosti uložen jako řetězec. Mimochodem, ukládání zpět jako TRUE nezachová v dokumentu zatrhovátko, ale s tím se dá žít.

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru