【スプレッドシートAPI】データを取得・入力するPHPの例|Google API クライアントの利用方法

今回は、Googleスプレッドシートを扱えるAPI(Google Sheets API)をPHPで利用して、スプレッドシートのデータを取得・入力する簡単な例となります。

例では、Google API クライアントを利用してAPIリクエストを行うPHPスクリプトを、コマンドラインから実行して、スプレッドシートのデータを取得・入力します。

Google Sheets APIを利用する準備

APIを有効にする

Google Sheets APIを利用するには、GCP(Google Cloud Platform)で有効にする必要があります。

APIを有効にする方法は、以下のリンク先を参考にしてみてください。

サービスアカウントを作成して認証情報をダンロード

GCPで有効にしたAPIを呼び出すには認証情報が必要となります。認証情報の種類にはいくつかありますが、今回の例では、サービスアカウントを作成して認証情報(JSONファイル)をダウンロードしている前提としています。

サービスアカウントを作成して認証情報をダンロードする方法は、以下のリンク先を参考にしてみてください。

サービス アカウントの作成と管理  |  IAM のドキュメント  |  Google Cloud

スプレッドシートをサービスアカウントと共有

APIで扱うスプレッドシートを、作成したサービスアカウントと共有します。

スプレッドシートを共有する方法については、以下のリンク先を参考にしてみてください。

スプレッドシートIDを確認

サービスアカウントと共有したスプレッドシートをAPIで扱うには、スプレッドシートIDが必要となります。

スプレッドシートIDを確認する方法については、以下のリンク先を参考にしてみてください。

Google API クライアントをComposerでインストール

まずは、プロジェクトのフォルダを作成します。

そして、ComposerでGoogle APIクライアントをインストールするため、プロジェクトのルートディレクトリにcdコマンドで移動し、以下のコマンドを実行します。

composer require google/apiclient:^2.12.1

PHPライブラリの依存関係を管理するComposerをMacで利用する方法については、以下のリンク先を参考にしてみてください。

Google API クライアントの読み込み・インスタンスの作成

今回の例では、プロジェクトのルートディレクトリにPHPファイルを作成し、以下のソースコードを記述します。

コード内のxxxxxxxx.jsonの箇所には、ダウンロードした認証情報(JSONファイル)へのパスを指定します。

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

// 環境変数GOOGLE_APPLICATION_CREDENTIALSを設定(認証情報へのパスを指定)
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . __DIR__ . '/xxxxxxxx.json'); 

// Google APIの設定を行うGoogle_Clientのインスタンスを作成
$client = new Google_Client(); 
$client->useApplicationDefaultCredentials(); // 利用する認証情報を指定
$client->addScope(Google_Service_Sheets::SPREADSHEETS); // 利用するスコープを指定

// スプレッドシートを扱うGoogle_Service_Sheetsのインスタンスを作成
$service = new Google_Service_Sheets($client);

上記コードでは、Google API クライアントライブラリを読み込み、Google APIの設定を行うGoogle_Clientクラス、APIリクエストで利用するGoogle_Service_Sheetsクラスのインスタンスを作成しています。

Google Sheets API の利用例

以下、それぞれのGoogle Sheets API のリクエスト例となり、上記コード後に記述してファイルを実行します。

コード内のxxxxxxxxの箇所には、確認したスプレッドシートIDを指定します。範囲はA1型で指定していますが、R1C1型でも指定可能。(R1C1型では「R」はRow(行)、「C」はColumn(カラム)を意味し、それらR・Cの数値順でセル番地を表します。)

また、コマンドラインから作成したファイルを実行するには、ファイルのあるディレクトリに移動して、次のコマンドを実行します。

php ファイル名

1つの範囲を取得する例

1つの範囲から値を取得する例となり、getValues()で取得している値は、行と列の2次元配列となります。

// スプレッドシートIDを指定
$ssId = 'xxxxxxxx'; 
// 取得する範囲を指定
$range = 'sheet01!A1:D4'; 

$result = $service->spreadsheets_values->get($ssId, $range);
$values = $result->getValues(); 
var_dump($values);

get()の第3引数には、出力形式の変更など、任意でクエリパラメータも指定できます。クエリパラメータやレスポンスデータなどの詳細は、文末の参考サイトを確認してみてください。

複数の範囲を取得する例

複数の範囲から値を取得する例となり、getValues()で取得している値は、行と列の2次元配列となります。

// スプレッドシートIDを指定
$ssId = 'xxxxxxxx'; 
// 取得する範囲を配列で指定
$ranges = [ 
    'sheet01!A1:D4',
    'sheet02!A1:D4',
];
// クエリパラメータを指定
$params = [
    'ranges' => $ranges,
];

$result = $service->spreadsheets_values->batchGet($ssId, $params);
$getRanges = $result->getValueRanges();  
foreach($getRanges as $getRange){
    $values = $getRange->getValues(); 
    var_dump($values);
}

batchGet()の第2引数の配列には、出力形式の変更など、任意で他のクエリパラメータも指定できます。クエリパラメータやレスポンスデータなどの詳細は、文末の参考サイトを確認してみてください。

1つの範囲に入力する例

1つの範囲に値を入力する例となります。

// スプレッドシートIDを指定
$ssId = 'xxxxxxxx'; 
//入力する範囲を指定
$range = 'sheet01!A1:B2';
// 入力する値の配列(行ごと)を要素にもつ配列を作成
$values = [
    [ "マイケル・ジョーダン", 23 ],
    [ "マジック・ジョンソン", 32 ],
];
// リクエストbodyに指定するインスタンスを作成
$body = new Google_Service_Sheets_ValueRange([
    'values' => $values
]);
// クエリパラメータを指定
$params = [
    // 入力する値の解釈の設定。文字列は数字や日付などに変換
    'valueInputOption' => 'USER_ENTERED'
];

$result = $service->spreadsheets_values->update($ssId, $range, $body, $params);

任意で他のクエリパラメータも指定できます。クエリパラメータやレスポンスデータなどの詳細は、文末の参考サイトを確認してみてください。

複数の範囲に入力する例

複数の範囲に値を入力する例となります。

// スプレッドシートIDを指定
$ssId = 'xxxxxxxx';
// 入力する範囲・値(行ごと)の連想配列を要素とした配列を作成
$rangesValues = [
    'sheet01!A1:B2' => [
        [ "マイケル・ジョーダン", 23 ],
        [ "マジック・ジョンソン", 32 ],
    ],
    'sheet02!A1:B2' => [
        [ "ステフィン・カリー", 30 ],
        [ "ジェームズ・ハーデン", 13 ],
    ],
];
 
// 範囲・値を設定するインスタンスを配列にセット
$data = [];
foreach($rangesValues as $key => $value ){
    $data[] = new Google_Service_Sheets_ValueRange([
        'range' => $key,
        'values' => $value
    ]);
}
// リクエストbodyに指定するインスタンスを作成
$body = new Google_Service_Sheets_BatchUpdateValuesRequest([
    'data' => $data,
    // 入力する値の解釈の設定。文字列は数字や日付などに変換
    'valueInputOption' => 'USER_ENTERED',
]);

$result = $service->spreadsheets_values->batchUpdate($ssId, $body);

リクエストbodyには他のオプションも指定できます。リクエストbodyやレスポンスデータなどの詳細は、文末の参考サイトを確認してみてください。

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

また、多忙によりコメントには返信できない場合があります。

Twitterで返信する場合はこちらから。