勉強したことのメモ.

Webエンジニア / プログラマが勉強したことのメモ。

GoogleスプレッドシートとPHPを連携させデータを取得・追記する方法

   2024/01/15  PHP Google Apps Script Google

GoogleスプレッドシートとPHPプログラムを連携させたいという案件をたまに見かける。お問い合わせページ等のフォームからデータ登録・送信した際にMySQLとは別にスプレッドシート側にも追記していきたい、といった内容が多い。以下に実装方法をメモ。

 

スプレッドシートを作成する

以下よりスプレッドシートを新規作成する。

https://www.google.com/intl/ja_jp/sheets/about/

作成すると以下のようなのURLが発行され「xxxxxxx」の部分がスプレッドシートIDとなるのでメモしておく。

https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxx/edit#gid=0

 

Google Cloud Platformで諸々設定する

以下Google Cloud Platformでプロジェクトを作成する。

https://console.cloud.google.com

次にGoogle Sheets APIを有効化し、認証情報を作成する。

認証情報を作成するとJSONファイルが生成されるのでダウンロードする。またJSONファイル内に「client_email」という項目があり、以下のようなメールアドレスが記入されているので、そのメールアドレスにスプレッドシート側で共有しておく。

 

PHPプログラムの作成

PHPプログラムを設置するディレクトリに以下コマンドでクライアントプログラムを導入する。

curl -sS https://getcomposer.org/installer | php
php composer.phar require google/apiclient:"^2.0"

データを追記する場合

<?php
require __DIR__. '/vendor/autoload.php';

//ダウンロードしたファイル
$keyFile = __DIR__. "/credentials.json";

// アカウント認証情報インスタンスを作成
$client = new Google_Client();
$client->setAuthConfig($keyFile);

//任意名
$client->setApplicationName("Sheet API TEST");

//サービスの権限スコープ
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);

//シート情報を操作するインスタンスを生成
$sheet = new Google_Service_Sheets($client);

//対象のスプレッドシートのIDを指定
$sheet_id = 'xxxxxxxx';

//シート名
$sheet_name = 'シート1';

//保存するデータ
$values = [
    ['山田2', '花子2'],
    ['山田2', '太朗2']
];

//データ操作領域を設定
$body = new Google_Service_Sheets_ValueRange([
    'values' => $values,
]);

//追記
$response = $sheet->spreadsheets_values->append(
    $sheet_id,
    $sheet_name,
    $body,
    ["valueInputOption" => 'USER_ENTERED']
);

var_export($response->getUpdates());

データを取得する場合

<?php
require __DIR__. '/vendor/autoload.php';

//ダウンロードしたファイル
$keyFile = __DIR__. "/credentials.json";

// アカウント認証情報インスタンスを作成
$client = new Google_Client();
$client->setAuthConfig($keyFile);

//任意名
$client->setApplicationName("Sheet API TEST");

//サービスの権限スコープ
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);

//シート情報を操作するインスタンスを生成
$sheet = new Google_Service_Sheets($client);

//対象のスプレッドシートのIDを指定
$sheet_id = 'xxxxxxxx';

//シート名
$sheet_name = 'シート1';

//取得範囲を指定(dataシートのA1〜B8)
$range = $sheet_name . '!A1:B8';
$response = $sheet->spreadsheets_values->get($sheet_id, $range);
$values = $response->getValues();//帰ってきたresponseから値を取得
 
print_r($values);

 

所感

いつも思うがGoogle Cloud Platformの操作が面倒。どこに何があるのか分かりづらい気がする。プログラムよりGCPの設定に時間がかかった。

尚、スプレッドシートの連携についてはとりあえず追記がメインになりそうなので、とりあえずは対応できそう。

 

参考サイト

http://bashalog.c-brains.jp/19/04/12-101500.php

 - PHP Google Apps Script Google

  関連記事

GASでGoogleカレンダーと連携してイベントの取得・追加・削除
GASでGoogleカレンダーと連携してイベントの取得・追加・削除

Google Apps Scriptの勉強としてGoogleカレンダーと連携させ ...

GASで「カクヨム」の更新状況をスクレイピングで取得する
GASで「カクヨム」の更新状況をスクレイピングで取得する

Google Apps Scriptの勉強として「カクヨム」の指定した小説が更新 ...

GASで特定サイトをスクレイピングし、画像をGoogleドライブに保存
GASで特定サイトをスクレイピングし、画像をGoogleドライブに保存

Google Apps Scriptで特定のサイトにスクレイピングし、画像が掲載 ...

GASとGmailを連携させて受信メール検索及びメール送信
GASとGmailを連携させて受信メール検索及びメール送信

Google Apps ScriptとGmailを連携させてみたい。「未読かつ特 ...

GASとGoogleカレンダを連携し暦通りではない店休日を取得する方法
GASとGoogleカレンダを連携し暦通りではない店休日を取得する方法

小売店等のサイトで営業日カレンダーみたいなものを表示させる際に今まではPHPで管 ...