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

おすすめの書籍

Adobe Creative Cloudを通常価格で購入していませんか?

Adobe Creative Cloud(Adobe CC)はAdobe社が提供するクリエイター向けのサービスです。WEB制作の幅を広げる「Photoshop・Illustrator・XD」Youtuberや動画クリエイターの編集作業に欠かせない「Premiere Pro・After Effects」など全20以上のアプリが提供されており、幅広いプランが用意されています。

コンプリートプランはAdobe CCの全20以上のアプリが使用できるプランです。多くのアプリが使用できるため定価で購入すると年間7万円以上するプランですが、デジタルハリウッドのAdobeマスター講座では「基礎動画教材+Adobe CC コンプリートプラン(12ヵ月)」がセットになって39,980円(税込)で利用できます。定価より安価にAdobe Creative Cloudのライセンスを購入でき、以降のライセンス更新も可能。動画教材で基礎スキルを習得できるので、入門する方にも便利な講座です。詳しくは下記のリンクからチェックしてみてくださいね。