経緯
サイトで使用しているPHPフォームからの送信内容をgoogleスプレッドシートに反映したいという依頼があった。
初めての作業だったので色々調べまくって時間がかかったため備忘録。
私のような初心者向けの内容です。
かかった時間
3〜4時間ぐらい
慣れれば1時間ぐらいでできそう
参考にしたページなど
非常にざっくりとした手順
- Googleスプレッドシートをつくる
- Google APIでGoogle Sheet APIを有効化(認証情報とかも作る)(参考サイト見てね)
- Googleスプレッドシートの「編集者」に[2]で作ったメールアドレス追加
- Google APIs Client Library for PHPをサイトにインストール(私はFTPでアップしました)
- [1]でDLした鍵jsonを[2]でインストールしたディレクトリにアップ(このとき「credentials.json」と改名
- PHPフォームの送信後アクションの{}内に下記追記
if (!empty($clean['btn_submit'])) { この中に下記を追記 }
//googleスプレッドシート連携
require_once __DIR__ . '/★ディレクトリ相対パス/vendor/autoload.php';
define('APPLICATION_NAME', 'test');
define('CLIENT_SECRET_PATH', './★ディレクトリ相対パス/credentials.json');
// スコープの設定
define('SCOPES', implode(
' ',
array(
Google_Service_Sheets::SPREADSHEETS
)
));
// アカウント認証情報インスタンスを作成
$client = new Google_Client();
$client->setScopes(SCOPES);
$client->setAuthConfig(CLIENT_SECRET_PATH);
/// シートのインスタンスを生成
$service = new Google_Service_Sheets($client);
try {
$spreadsheetId = '★スプレッドシートID入れてね(英数字混じってるめっちゃ長いやつ)';
$range = '★シート名入れてね';
$values = array(
array(
//連携したスプレッドシートの最終行に「A列(一番左)」から順に追記されるよ
date('Y-m-d'),//★日付
$clean['XXXX'],//★フォームの入力値の取得(複数ある場合は増やしてね)
),
);
$appendBody = new Google_Service_Sheets_ValueRange([
'values' => $values
]);
$params = [
'valueInputOption' => 'USER_ENTERED'
];
$result = $service->spreadsheets_values->append($spreadsheetId, $range, $appendBody, $params);
echo $result->getUpdates()->getUpdatedCells();
} catch (Google_Exception $e) {
$errors = json_decode($e->getMessage(), true);
$err = "code : " . $errors["error"]["code"] . "\r\n";
$err .= "message : " . $errors["error"]["message"];
echo "Google_Exception" . $err;
}
私がつまずいたポイントと解決策
参考サイト通りにやってうまいことできないときは下記を確認すると幸せになれるかも知れません。
FTP経由で「Google APIs Client Library for PHP」をアップしたい
GithubのファイルだとどれをUPすればいいのか私はよくわからなかったので、下記からDLしてサーバーにUPしました。※サーバーのPHPバージョンを確認してください。
https://github.com/googleapis/google-api-php-client/releases
google 400 redirect_uri_mismatch... みたいなエラー文が出る
スプレッドシートは「.xlsx」形式になっていませんか?
.xlsxの場合連携がうまくいきません。
googleスプレッドシート形式に変換してください。
スプレッドシートが更新されない
仮にGoogleスプレッドシートのURLが下記だとしたら
https://docs.google.com/spreadsheets/d/XXXXXXXXXXXX-XXXXXXXX-XX/edit#gid=00000000
$spreadsheetId に入力するのはXXXXXXXXXXXX-XXXXXXXX-XXの方です。