Sheets API を使ってPHPでGoogle スプレッドシートにデータを保存する
どうもfujiharaです。天候の上げ下げが激しい今日このごろですね。本日はSheet API(v4)を使用してGoogleスプレッドシートにデータを保存する 方法をご紹介いたします。
背景
WEBページで入力された問い合わせ等をメールだけでなくデータとして保存したいが サーバー上には保存せずにスプレッドシートに保存したいという要望がありました。
Google Sheets API
Google Sheets APIはスプレッドシートの 要素を読み取って変更できるサービスです。
手順
細かい説明はさておき、今回は以下の方法で実現します。
- スプレッドシートを作成(省略)
- Google Cloud Platform で Projectを作成
- Google Sheet APIの有効化
- 認証情報の作成
- シートを作成した認証情報と共有
- シートに書き込むプログラムの作成
項目は結構あるのですが、1つ1つはそれほど長くありません。
1.スプレッドシートを作成
手順は省きます。Google Drive上にスプレッドシートを作成します。(非公開)
シートにはそれぞれ個別のIDがあるので、メモしておいて下さい。
以下の xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 部分です(以下は適当値です
https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2.Google Cloud Platform で Projectを作成
Google Cloud Platform上から プロジェクトを作成します。
上の画像から簡単に作成できます。(その他省略します)
3. Google Sheet APIの有効化
Google Sheets APIをクリックしてページ内の有効にするボタンを押します。
4. 認証情報の作成
有効にするとAPIとサービス(Google Sheets API)ページに遷移しますので、認証情報をクリックします。
プロジェクトへの認証情報の追加を入力します。
必要な認証情報の種類 => google Sheets API
APIを呼び出す場所 => ウェブサーバー(node.js, tomcatなど)
アクセスするデータの種類 => アプリケーションデータ
AppEngineまたはComputeEngineでこのAPIを使用する予定はありますか => いいえ、使用していません。
最後の項目は使用するプログラムの置き場所によるのですが、今回はローカルから試すのでいいえにしています。
作成すると認証情報を含んだJSONファイルがダウンロードされるので保存します。 またIAMと管理から作成したサービスアカウントのメールアドレスをコピーしておきます。
5. シートを作成した認証情報と共有
1で作成したスプレッドシートを先程作成したアカウントユーザーと共有します。(メールアドレスを入力して共有するだけ(通知はオフ))
6. シートに書き込むプログラムの作成
今回はPHPで書き込むプログラムを作成します。GitHub上にPHP用のクライアントプログラムがあるのでcomposer で導入します。
googleapis/google-api-php-client
また4. で作成したJSONファイルを credentials.json として composer.json と同階層に配置しておきます。
$ composer require google/apiclient:"^2.0"
<?php
require __DIR__. '/vendor/autoload.php';
//ダウンロードしたファイル
$keyFile = __DIR__. "/credentials.json";
// アカウント認証情報インスタンスを作成
$client = new Google_Client();
$client->setAuthConfig($keyFile);
//任意名
$client->setApplicationName("Sheet API TEST");
//サービスの権限スコープ
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);
//シート情報を操作するインスタンスを生成
$sheet = new Google_Service_Sheets($client);
//保存するデータ
$values = [
["Sheet API Append TEST", "登録できていますか?"]
];
//データ操作領域を設定
$body = new Google_Service_Sheets_ValueRange([
'values' => $values,
]);
//追記
$response = $sheet->spreadsheets_values->append(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // 作成したスプレッドシートのIDを入力
'シート1', //シート名
$body, //データ
["valueInputOption" => 'USER_ENTERED']
);
//書き込んだ処理結果を確認
var_export($response->getUpdates());
後は作成したファイルを実行すると、シートに書き込めます。シートの履歴を見ると作成した認証情報によるものだと確認できます。
まとめ
元々あるSheet APIの導入サンプルは OAuth での設定ですので、サーバーから実行したい場合は上記のやり方で実施する必要があります。
今回はスプレッドシートへの追記だけなので、あっさりしたプログラです。特定の場所を書き換える、データを読むなど様々なことができますので試してみてはいかがでしょうか?
プログラム各種サンプル