勉強したことのメモ

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で祝日一覧(年月日と祝日名)データをJSON出力するAPIを作成

PHPのシステム案件で祝日を取得し、処理を行う箇所があった。Googleカレンダ ...

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

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

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

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

GASとLINEを連携させて通知メッセージを送る方法のメモ

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

GASとAdSense Management APIを使って前日分の売り上げをメール通知する方法

Googleアドセンスの売り上げをチェックする際、いつもはアドセンスの管理画面に ...