こんにちは、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送信したデータをスプレッドシートに保存する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。