GoogleスプレッドシートのデータをPHPで取得
技術者の皆さんがGoogleスプレッドシートを本格的に運用していく場合、
プログラム内でスプレッドシートのデータを取得して利用したい、
あるいはその逆で、プログラムで生成したデータをスプレッドシートに入力したい、
といった局面が出てくるかと思います。
今回はそのようなシーンで役に立つGoogle Sheets APIの使い方を紹介します。
Google Sheets APIとは?
その名の通り、Googleスプレッドシートを操作する事のできるAPIです。
指定したスプレッドシートに対して、読み書きなどの処理を外部から行う事ができます。
本記事では入門として指定したスプレッドシートの内容を読み取るところまで説明します。
0.Google Cloud Platform内で作業用プロジェクトの作成
Google Cloud Platformで今回の作業用のプロジェクトを作成します。
今回はプロジェクト名を「Test Project 8762」とします。
その後、Sheets APIを管理画面から有効にします。
1.認証情報を作成
引き続き、Google Cloud Platformで認証情報を作成します。
認証情報には「OAuthクライアントID」と「サービスアカウント」の2種類がありますが、
今回は「サービスアカウント」にて作成します。
各種設定画面が順次表示されますが、省略できる項目が大半の為、説明を割愛します。
「認証情報」タブに作成したサービスアカウントの情報が表示されれば完了です。
2.サービスアカウントキーを作成
続いて、管理画面の「認証情報」からサービスアカウントキーを作成します。
今回は「JSON」形式にて作成しました。
作成後にキーが自動的にダウンロードされますので、大切に保管してください。
ここまでで、Google Cloud Platformで行う作業は終了です。
3.対象シートのID確認と共有
Sheets APIにて対象のスプレッドシートに操作を行うには、以下の2点の作業が必要です。
- 対象のスプレッドシートのIDを確認・指定する
- 対象のスプレッドシートシートをサービスアカウントと共有する
まずは対象のスプレッドシートに移動し、URLでIDを確認します。
https://docs.google.com/spreadsheets/d/●●●●●/edit#gid=▲▲▲▲▲
スプレッドシートのIDは上のURLの場合は/d/以降、●●●●●にあたる箇所です。
(後の工程で利用しますので、控えておきます。)
次に対象のスプレッドシートを1.の項で作成したサービスアカウントに共有します。
通常の共有と同様に右上の共有ボタンから行います。
4.サービスキーやIDを用いて、プログラムを作成
今回は天気を記録したシンプルなスプレッドシートを用意しました。
いよいよプログラムを作成して、このスプレッドシートから内容を取得します。
尚、Sheets APIの実行には、事前にComposer(パッケージ依存管理ツール)を使用して、
作業ディレクトリにGoogle Client Libraryをインストールしておく必要があります。
Composer導入後、以下のコードをコマンドラインにてあらかじめ、実行してください。
※Composerに関してはこちらの記事もご参照ください。
1 | composer require google/apiclient:^2.0 |
今回のテスト用プログラムのソースコードは以下となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php require_once __DIR__ . '/vendor/autoload.php'; $key = __DIR__ . '/▲▲▲▲▲▲.json';//取得したサービスキーのパスを指定 $client = new Google_Client();//Googleクライアントインスタンスを作成 $client->setScopes([//スコープを以下の内容でセット \Google_Service_Sheets::SPREADSHEETS, \Google_Service_Sheets::DRIVE,]); $client->setAuthConfig($key);//サービスキーをセット $sheet = new Google_Service_Sheets($client);//シートを操作するインスタンス $sheet_id = '●●●●●●';//対象のスプレッドシートのIDを指定 $range = 'data!A1:B8';//取得範囲を指定(dataシートのA1〜B8) $response = $sheet->spreadsheets_values->get($sheet_id, $range); $values = $response->getValues();//帰ってきたresponseから値を取得 print_r($values); |
プログラムを実行してみます。
無事に対象のスプレッドシート内の情報を配列で取得することができました。
Author Profile
スターフィールド編集部
SHARE