Google Spreadsheetに集計値を入れたら、Google Analytics との連携も取りやすいし数値の共有もしやすそう。最近PHPでコードを書くことが多いのでスクリーンショット付きで細かく書いてみました。
Google Developers Console での設定
プロジェクト作成
「プロジェクトを作成」から
適当なプロジェクト名を設定して「作成」。
メニューの「API」から
Drive APIを検索して「ON」にする。
クライアントIDの作成、キーの取得
「認証情報」から「新しいクライアントIDを作成」
「サービスアカウント」を選択し作成を行います。
「新しいP12キーを作成」からキーファイル「プロジェクト名-xxx.p12」を作成して保存してください。また、表示される「クライアントID」「メールアドレス」はこの先必要になるのでメモしておいてください。
Google Spreadsheetの設定
Googleドライブからスプレッドシートを新規に作成し「データ投入テスト」という名前に設定します。また、先のデータ投入のため「A1」に「date」「B1」に「value」を入力します。
共有設定で、「クライアントIDの作成、キーの取得」の最後で表示されたメールアドレス「××××@developer.gserviceaccount.com」に対して編集権限を与えます。
パッケージのインストール、ファイルの配置
今回は
こちらを利用します。
spreadsheet_testというフォルダを作りその中に
"require": {
"asimlqt/php-google-spreadsheet-client": "2.3.*",
"google/apiclient": "1.1.2"
}
このような composer.json 作成し
composer install
インストールしてください。
また composer.json を設置したフォルダに先ほどダウンロードした「プロジェクト名-xxx.p12」を配置してください。
現在のファイル一覧
+ spreadsheet_test
+ composer.json
+ composer.lock
+ プロジェクト名-xxx.p12
+ vendor/
プログラム作成
※コードの中身は http://stackoverflow.com/questions/21470405/google-api-how-to-connect-to-receive-values-from-spreadsheet ここに記載があるものほぼそのままです。
<?php
require_once('vendor/autoload.php');
$G_CLIENT_ID = 'サービスアカウントのクライアントID';
$G_CLIENT_EMAIL = 'サービスアカウントのメールアドレス';
$G_CLIENT_KEY_PATH = 'プロジェクト名-xxx.p12';
$G_CLIENT_KEY_PW = 'notasecret';
$obj_client_auth = new Google_Client ();
$obj_client_auth->setApplicationName ('TestApplication');
$obj_client_auth->setClientId ($G_CLIENT_ID);
$obj_client_auth->setAssertionCredentials (new Google_Auth_AssertionCredentials(
$G_CLIENT_EMAIL,
array('https://spreadsheets.google.com/feeds','https://docs.google.com/feeds'),
file_get_contents ($G_CLIENT_KEY_PATH),
$G_CLIENT_KEY_PW
));
$obj_client_auth->getAuth()->refreshTokenWithAssertion();
$obj_token = json_decode($obj_client_auth->getAccessToken());
$accessToken = $obj_token->access_token;
$serviceRequest = new Google\Spreadsheet\DefaultServiceRequest($accessToken);
Google\Spreadsheet\ServiceRequestFactory::setInstance($serviceRequest);
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService();
$spreadsheetFeed = $spreadsheetService->getSpreadsheets();
$spreadsheet = $spreadsheetFeed->getByTitle('データ投入テスト');
$worksheetFeed = $spreadsheet->getWorksheets();
$worksheet = $worksheetFeed->getByTitle('シート1');
$listFeed = $worksheet->getListFeed();
$row = array('date'=>'2015/03/01', 'value'=>1);
$listFeed->insert($row);
$row = array('date'=>'2015/03/01', 'value'=>2);
$listFeed->insert($row);
これを実行するとスプレッドシートにデータが投入されます。
ここを参考にすれば、日付をキーにして数値を更新する、などといった事も可能です。
詰まったこと
- フィールド名が日本語だった場合にうまく更新ができなかった。アルファベットのみにすれば動作したので、詳細には調査していません。
フィールド名に関しての追記
The column names are the header values of the worksheet lowercased and with all non-alpha-numeric characters removed. For example, if the cell A1 contains the value "Time 2 Eat!" the column name would be "time2eat".
とドキュメントに記述されています。
ざっくりと翻訳すると、
英数字とハイフン以外の文字列は取り除かれて、すべて小文字として扱います。
たとえばTime 2 Eat!
はtime2eat
として解釈されます
とのことです。