勉強したことのメモ

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とLINEを連携させて通知メッセージを送る方法のメモ

Google Apps ScriptとLINEを連携させ、LINEに何らかの通知 ...

GASで特定サイトにログインした後にスクレイピングを行う方法

Google Apps Scriptの勉強として特定サイトにログインし、その後に ...

GASのプログラム実行時間計測方法と各種制限についてのメモ

PHP等でプログラムを組んでいると、あまり実行時間について気にすることはなかった ...

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

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

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

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