PHPを使ってPOSTデータをGoogleスプレッドシートに保存する方法メモ。
環境情報
- PHPバージョン: PHP 7.4.33
- サーバー: エックスサーバー(x10)
必要なファイル
- config.php – Google API認証情報を含むファイル
- vendor/autoload.php – Google Sheets APIのクライアントライブラリを読み込むためのファイル
- spreadsheet.php – POSTデータをGoogleスプレッドシートに保存するスクリプト
config.phpの設定
まず、config.php
ファイルを作成し、Google APIの認証情報を設定します。このファイルはGoogle APIへの接続情報を安全に管理するために必要です。
<?php
define('SERVICE_ACCOUNT_KEY', 'path/to/service-account-key.json');
define('SPREADSHEET_ID', 'your_spreadsheet_id');
?>
composerの設定
次に、Google Sheets APIクライアントライブラリをインストールするためにcomposerを使用します。プロジェクトのルートディレクトリで以下のコマンドを実行してください。
composer require google/apiclient:^2.0
spreadsheet.phpの作成
次に、spreadsheet.php
ファイルを作成し、以下のスクリプトを追加します。このスクリプトはPOSTリクエストを受け取り、Googleスプレッドシートに保存します。
<?php
header('Content-type: application/json; charset=utf-8');
// config.phpファイルを読み込む
require 'config.php';
// タイムゾーン設定
date_default_timezone_set('Asia/Tokyo');
// 送信されたデータを取得
$data1 = filter_input(INPUT_POST, 'data1');
$data2 = filter_input(INPUT_POST, 'data2');
$created = date('Y-m-d H:i:s');
// Google Sheets API クライアントライブラリの読み込み
require 'vendor/autoload.php';
// 認証情報のパス
$client = new \Google_Client();
$client->setApplicationName('Google Sheets API PHP Quickstart');
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);
$client->setAuthConfig(SERVICE_ACCOUNT_KEY); // サービスアカウントキーのJSONファイル
$client->setAccessType('offline');
// Google Sheets API サービスオブジェクトの作成
$service = new \Google_Service_Sheets($client);
// スプレッドシートIDとシート名を指定
$spreadsheetId = SPREADSHEET_ID;
$sheetName = 'results';
$range = $sheetName . '!A1';
// ヘッダー行を準備
$headerValues = [
['ID', 'data1', 'data2', 'created']
];
$headerBody = new \Google_Service_Sheets_ValueRange([
'values' => $headerValues
]);
$params = [
'valueInputOption' => 'RAW'
];
// データをスプレッドシートに追加する関数
function appendData($service, $spreadsheetId, $sheetName, $dataValues) {
// データ行を追加
$dataBody = new \Google_Service_Sheets_ValueRange([
'values' => $dataValues
]);
$dataRange = $sheetName . '!A:A'; // データ範囲を指定
$params = [
'valueInputOption' => 'RAW',
'insertDataOption' => 'INSERT_ROWS'
];
return $service->spreadsheets_values->append($spreadsheetId, $dataRange, $dataBody, $params);
}
try {
// 最初にヘッダー行が設定されていない場合、設定する
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();
if (empty($values)) {
$service->spreadsheets_values->update($spreadsheetId, $range, $headerBody, $params);
}
// シートの現在のID列の最大値を取得
$range = $sheetName . '!A:A'; // ID列のみを取得
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();
$maxId = 0;
foreach ($values as $row) {
if (is_numeric($row[0])) {
$maxId = max($maxId, (int)$row[0]);
}
}
// 新しいIDを生成
$newId = $maxId + 1;
// データ行を準備
$dataValues = [
[$newId, $data1, $data2, $created]
];
// データ行を追加
$result = appendData($service, $spreadsheetId, $sheetName, $dataValues);
$param = $created.'に'.$data1.'と'.$data2.'を追加 (ID: '.$newId.')';
echo json_encode(["status" => "success", "message" => $param]);
} catch (Exception $e) {
echo json_encode(["status" => "error", "message" => "Failed to save data to Google Sheets: " . $e->getMessage()]);
}
?>
スクリプトの説明
- ヘッダー設定:
header('Content-type: application/json; charset=utf-8');
は、出力をJSON形式に設定します。 - config.phpの読み込み:
require 'config.php';
でGoogle API接続情報を読み込みます。 - タイムゾーン設定:
date_default_timezone_set('Asia/Tokyo');
でタイムゾーンを設定します。 - POSTデータの取得:
filter_input(INPUT_POST, 'data1');
で送信されたデータを取得します。 - Google APIクライアントの設定:
Google_Client
クラスを使用してGoogle APIクライアントを設定します。 - Google Sheetsサービスオブジェクトの作成:
Google_Service_Sheets
クラスを使用してサービスオブジェクトを作成します。 - ヘッダー行の追加: 最初にヘッダー行が設定されていない場合、ヘッダー行を設定します。
- ID列の最大値取得と新しいID生成: ID列の最大値を取得し、新しいIDを生成します。
- データ行の追加:
appendData
関数を使用してデータ行をGoogleスプレッドシートに追加します。 - エラーハンドリング: 例外が発生した場合、エラーメッセージをJSON形式で出力します。
使用方法
- 上記のスクリプトをそれぞれのファイルに保存します。
- ウェブフォームから
data1
とdata2
のデータをPOSTリクエストで送信します。 spreadsheet.php
をサーバー上で実行すると、データがGoogleスプレッドシートに保存されます。
コメント