勉強したことのメモ

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を使って任天堂ホームページ更新情報のRSSを取得する方法

GASを使ってRSSを取得してみたい。今回はニンテンドーホームページ更新情報とい ...

GASでNintendo Storeをチェックし指定したソフトが〇円以下の際に通知する方法

Google Apps Scriptを利用してNintendo Storeをスク ...

GASとChatworkを連携してメッセージを送信する方法

Google Apps Scriptの勉強として「Chatwork」と連携させて ...

GASで祝日一覧(年月日と祝日名)データをJSON出力するAPIを作成

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

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

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