【GAS】PHPからPOST送信したデータをスプレッドシートに保存する
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
本記事では、Google Apps ScriptでPHPからPOST送信したデータをスプレッドシートに保存する方法をご紹介しています。
GASでPHPからPOSTデータを受け取ってスプレッドシートに保存したいな。良い方法ないかな?
上記の疑問にお答えします。
では、解説していきます。PHPからGASにPOST送信したデータをスプレッドシートに保存する
フォームに入力した名前とフリガナをPHPで受け取り、PHPからGASにPOST送信してスプレッドシートに保存する処理を作成します。全体の処理の流れは単純で、フォームに入力した内容がスプレッドシートの一番下に保存されるというものです。
PHPからGASへのPOST送信にはcURL
(カール)を使用します。file_get_contents()
でも可能なようですが、私の環境ではうまく動作しなかったため、cURL
で処理しています。
Google Apps Script
function doPost(e) { var jsonString = e.postData.getDataAsString(); var data = JSON.parse(jsonString); var fullname = data.fullname; var furigana = data.furigana; // シート取得 var ss = SpreadsheetApp.openById('SPREADSHEET_ID'); var sheet = ss.getSheetByName("シート1"); // データ入力 sheet.appendRow([fullname, furigana]); return ContentService.createTextOutput(JSON.stringify(e)); }
HTML
<form action="post.php" method="post"> <label>名前<input type="text" name="fullname" value=""></label> <label>フリガナ<input type="text" name="furigana" value=""></label> <button>送信する</button> </form>
PHP:post.php
if($_POST){ //POST送信先 $post_url = 'https://script.google.com/macros/s/GOOGLE_APPS_SCRIPT_ID/exec'; //POSTデータ $post_data = array( 'fullname' => $_POST['fullname'], 'furigana' => $_POST['furigana'], ); //cURL $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $post_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($post_data), ]); $result = curl_exec($ch); curl_close($ch); //実行結果(JSON)を配列に変換する $result = json_decode($result, true); //POSTデータ(JSON)を配列に変換する $contents = json_decode($result['postData']['contents'], true); var_dump($contents); } //ダンプ結果 array(2) { ["fullname"]=> string(9) "てすと" ["furigana"]=> string(9) "テスト" }
上記を記述して実行すると、SPREADSHEET_ID
のスプレッドシートに入力したデータが保存されます。ここでは入力項目が2つしか用意してませんが、電話番号やメールアドレス、その他のユーザーデータを追加すれば立派なリストが完成します。完成したリストを使って、GASでメールを配信することも可能なため、先の展開にもつなげることができますね。
cURLでPHPからGASにPOST送信する際の注意点
cURL
でPHPからGASにPOST送信するためには下記オプションを有効にする必要があります。
- CURLOPT_RETURNTRANSFER
- CURLOPT_FOLLOWLOCATION
上記オプションを外すとPOST送信ができないため、POST送信時にエラーが発生した場合は試してみてください。
最後に
Google Apps Scriptも公開から10年以上が経過し、時間の経過に伴い内容がアップデートされています。数年前の記事を参考にプログラムを組んでいくと最終的に動作しなかった、というのは頻繁にありますので、昔の記事を参考にする場合は処理の流れを参考にする程度にしておき、ソースコードと最新のドキュメントの内容を照らし合わせながら学習を進めると良いかもしれませんね。
以上、Google Apps ScriptでPHPからPOST送信したデータをスプレッドシートに保存する方法のご紹介でした!