June 23, 2018

Google APIシリーズ

PHPからGoogle APIを使うにはこのライブラリを使えばいいんだけど
https://github.com/google/google-api-php-client
他の言語と同時に自動生成してるせいかそのままだとものすごく使いにくい。
https://github.com/google/google-api-php-client-services
Golang用とかそれぞれ1ファイルにまとめてるので巨大。
https://github.com/google/google-api-go-client

使いにくいなら自分で使いやすいラッパーを作ればいいということでLaravel用にはいくつか作ってる。

Google Sheets

https://github.com/kawax/laravel-google-sheets
最初なのでそんなに使いやすくなってない。どうもAPIv4では実現したかった機能を作るのが難しいので諦めた。
すでに存在するスプレッドシートを読み込むのが主な用途。

Google Photos

https://github.com/kawax/laravel-google-photos

AdSense

プロジェクトのみ
https://github.com/kawax/laravel-google-adsense-project

未公開

GmailやSearchConsoleも使ってるけど公開してない。そのまま使っててパッケージに分離できるような状態ではないので作り直さないと無理。

SearchConsole

プロジェクトだけ公開用に作り直した。
https://github.com/kawax/laravel-google-searchconsole-project

ついでにGoogle APIの基本的な使い方

まずDeveloper Consoleでプロジェクトを作ってAPIを有効化する。
https://console.developers.google.com/
そもそもここが一番分かりにくい。

認証情報

APIキー、OAuth、サービスアカウントと3種あるけど基本的にはOAuthを選べばいい。
サービスアカウントとかいかにも自分のアカウントのデータを自動で読むのに使えそうだけど実は違う。
プロジェクトを作ったアカウントとサービスアカウントのアカウントは別のアカウント扱い。
Sheetsなら共有してサービスアカウントからでも使えるけどAdSenseはサービスアカウント非対応なので使えない。
分かりにくいのでOAuthでいい。

Google_Client

google-api-php-clientのまま使うなら。
credentials.json使ってるけどclient_id,client_secretを指定でもいい。
https://github.com/google/google-api-php-client#authentication-with-oauth
Laravelなら
https://github.com/pulkitjalan/google-apiclient

認証情報をセットしたGoogle_Clientを作る所まで理解できていれば新しいAPIが登場してもすぐ使える。

token

自分のアカウントのデータだけ読むとしてもOAuthで認証してaccess_tokenとrefresh_tokenを取得して保存して毎回access_tokenをrefreshすればいい。
普通にやるとrefresh_tokenが空。
Google_Clientを作る時にこう設定しないとrefresh_tokenが取得できない。
ここが一番はまりやすい。

'access_type'      => 'offline',
'approval_prompt'  => 'force',
'prompt'           => 'consent',

取得後のデータの扱い

APIから取得するデータはGoogle_なんとかで専用のクラスになってることが多いけど扱いにくい。
ほとんどはGoogle_Modelを継承してるのでさっさとtoSimpleObject()して普通のオブジェクトにしたほうが扱いやすい。
https://github.com/google/google-api-php-client/blob/master/src/Google/Model.php

© kawax