Přechod z Google API v2 na v3

(publikováno 31.01.2017) PHP, Google

Jednoduchý postup, jak přejít od verze 2 Google API na novější verzi 3. Článek plynule naváže na dva starší články a ukáže rozdíly mezi použitými kódy.

Přechod z Google API v2 na v3

Na blogu již jsou 2 články, využívající Google API. První stahuje události z Google Kalendáře a druhý nahrává a spravuje soubory na Google Drive. Oba články byly původně napsány pro verzi 2, která sice ještě funguje, ale je doporučeno již stáhnout verzi 3. Oba články jsou již také upravené, pro fungování s API v3. Zde je ukázka, jaké změny byly provedeny.

Vytvoření nových klíčů ve formátu JSON

Jednou z největších změn je nutnost vygenerovat si pro služby nový klíč, starý formát P12 se v APIv3 již nepoužívá a je nutné si vygenerovat klíč nový ve formátu JSON. Pro existující Service account lze vygenerovat více klíčů, pokud je tedy formát P12 ještě použit na starších projektech, není nutné jej mazat.

Vytvoření, ať už nového klíče, nebo celého nového Service account lze ve Vývojářské konzoli, na tom se nic nemění.

Nový klíč nebo servisní účet

Úprava kódů a stažení jen vybraných služeb

Kromě výměnu klíčů, jsou i trochu upravené třídy. Jména se neměnily, jejich vnitřní chování ale ano. Projekt Google API je rozdělen do několik projektů a instalaci doporučuji přes Composer, protože obsahuje množství závislostí. Stačí využít tento Quickstart u GDrive. Instalace je pro všechny služby stejná, protože existuje pouze 1 knihona, obsahující všechny služby. Pomocí změny v  composer.json souboru ale lze nepotřebné služby před uploadem vymazat.

{
...
"scripts": { "post-update-cmd": [ "Google\\Task\\Composer::cleanup" ] },
"extra": { "google/apiclient-services": [ "Drive", "YouTube", "Calendar" ] }
}

Vytvoření instance Google Client

Ať už se využívá Drive, Calendar nebo úplně jiná služba, prvně je nutné vytvořit instanci Google Client. Ten zprostředkovává celou komunikaci, podepisování, ověření apod. První ukázka je pro starou verzi 2, pod tím následuje vytvoření klienta ve verzi 3. Mnohem jednodušší, ne?

// Google_Service_Drive lze nahradit
// jako třeba Google_Service_Calendar

/////////////////////////////////
// Vytvoření klienta pro APIv2 //
/////////////////////////////////
$client = new Google_Client();    
$client->setApplicationName("BackupDrive");

$key = file_get_contents("path/to/key.p12");
$cred = new Google_Auth_AssertionCredentials( $emailAddress,
    array(
        Google_Service_Drive::DRIVE,
        Google_Service_Drive::DRIVE_METADATA
        ), $key );    
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {    
    $client->getAuth()->refreshTokenWithAssertion($cred);   
}
$service = new Google_Service_Drive($client);

/////////////////////////////////
// Vytvoření klienta pro APIv3 //
/////////////////////////////////
$client = new Google_Client();    
$client->setApplicationName("BackupDrive");
$client->setAuthConfig("path/to/key.json");
$client->useApplicationDefaultCredentials();
$client->addScope([
    Google_Service_Drive::DRIVE,
    Google_Service_Drive::DRIVE_METADATA
]);
$service = new Google_Service_Drive($client);

Úprava kódu pro jednotlivé služby je popsána v daných článcích.

SSL certificate problem

Nová verze API využívá pro komunikaci GuzzleHTTP knihovnu. Ta s největší pravděpodobností využije cURL, který většinou bez speciální konfigurace hostingu vyhodí chybu certifikátu. Lepší je samozřejmě zkusit certifikát nahrát a využít, pokud se to ale nedaří, je možnost tuto kontrolu vypnout.

// Zavolat po vytvoření Google_Client
$httpClient = $client->getHttpClient();
$config = $httpClient->getConfig();
$config['verify'] = false;
$client->setHttpClient(new GuzzleHttp\Client($config));

Ohledně zkušeností s Google API, nebo konkrétně přechodem na verzi 3, se můžete podělit v komentářích

K tomuto článku již není možné přidávat další komentáře