【PHP GAS】フォームの送信データをPHPでスプレッドシートに保存

2021年3月11日

フォームで送信された情報を、メールだけでなく直接データとして保存をする方法です。
いままでは、GASで定期的にメールを取得して、スプレッドシートに転記するスクリプトを動かしていましたが、トリガー設定が外れたりするものも怖いのでこの方法を使用することにしました。

方法

1.Google Cloud Platform でProjectを作成

Google Cloud Platform上から プロジェクトを作成します。

2.Google Sheet APIの有効化

Google Sheets APIをクリックしてページ内の有効にするボタンを押します。

3.認証情報の設定

有効にするとAPIサービスページに遷移しますので、認証情報をクリックします。

プロジェクトへの認証情報を作成を押します。
必要な認証情報の種類 => google Sheets API
APIを呼び出す場所 => ウェブサーバー(node.js, tomcatなど)
アクセスするデータの種類 => アプリケーションデータ
AppEngineまたはComputeEngineでこのAPIを使用する予定はありますか => いいえ、使用していません。

サービスアカウントを作成する。アカウント名(任意)、キータイプはJSONにして次へ押すと、JSONファイルが保存されます。また、IAMと管理から作成したサービスアカウントのメールアドレスをコピーしておきます。

4.スプレッドシートの共有

作成したスプレッドシートで、3でコピーしたメールアドレスを共有設定します。

5.PHPの作成

PHPで書き込むプログラムを作成します。PHP用のクライアントプログラムをcomposer で導入します。 googleapis/google-api-php-client
また3. で作成したJSONファイルを key.json(名前は任意) として composer.json と同階層に配置しておきます。

composer require google/apiclient:"^2.7"
<?php

require __DIR__. '/vendor/autoload.php';
// 作成したスプレッドシートのIDを入力
$sheetName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
,//シート名
$sheetName = 'シート1';

//ダウンロードしたファイル
$keyFile = __DIR__. "/key.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 = [[
     "こんにちは", 
     "今日はいい天気です"
]];
//データ操作領域を設定
$body = new Google_Service_Sheets_ValueRange([
    'values' => $values,
]);
//追記
$response = $sheet->spreadsheets_values->append(
    $sheetName, 
    $sheetName, 
    $body, 
    ["valueInputOption" => 'USER_ENTERED']
);

//書き込んだ処理結果を確認
var_export($response->getUpdates());

まとめ

意外と簡単に設定ができました。今回はデータを書き込むだけでしたが、読み込んだり特定の場所の編集などもできますのでお試しください。



GAS,PHP

Posted by Next-k