GoogleスプレッドシートとPHPを連携させデータを取得・追記する方法
2024/01/15
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の設定に時間がかかった。
尚、スプレッドシートの連携についてはとりあえず追記がメインになりそうなので、とりあえずは対応できそう。
参考サイト
関連記事
-
-
GASとLINEを連携させて通知メッセージを送る方法のメモ
Google Apps ScriptとLINEを連携させ、LINEに何らかの通知 ...
-
-
GASで祝日一覧(年月日と祝日名)データをJSON出力するAPIを作成
PHPのシステム案件で祝日を取得し、処理を行う箇所があった。Googleカレンダ ...
-
-
GASで「小説家になろう」サイトの更新通知をLINEに送る方法
Google Apps Scriptの勉強として「小説家になろう」サイトの特定小 ...
-
-
GASを使ってみて感じたメリットとデメリット
Google Apps Scriptを色々勉強した中で感じたメリットとデメリット ...
-
-
GASとDrive APIを組み合わせて画像やPDFファイルをOCR処理する方法
Googleドライブに保存した画像やPDFファイルをOCR処理し、ファイル内のテ ...