PHPでSheetsAPIを使用してGoogleスプレッドシートにデータを追記していくサンプル。

### プロジェクトを作る。

#### 1. Google Cloud Platformにアクセスする。
 https://console.cloud.google.com/apis/library?hl=ja

#### 2. プロジェクトを作成する。

<img width="1045" alt="スクリーンショット 2018-05-06 12.25.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/419e95f7-08ef-4843-e3df-26a94b440cb3.png">

<img width="590" alt="スクリーンショット 2018-05-06 12.28.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/705ad83d-f517-2dd1-211c-5d255a3d14e6.png">

#### 3. 作成したプロジェクトでSheetsAPIを有効にする。

- 「sheet」で検索
<img width="1030" alt="スクリーンショット 2018-05-06 12.38.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/369a9c38-29b5-066a-c0af-276da48af98b.png">

- 「有効にする」を押下する。

<img width="596" alt="スクリーンショット 2018-05-06 12.39.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/66e55a99-e22e-c989-48d1-53294ec1a391.png">

- 認証情報を取得する
<img width="1143" alt="スクリーンショット 2018-05-06 12.43.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/66766c66-baeb-b2d5-bb39-bb7ee8e7124f.png">

<img width="537" alt="スクリーンショット 2018-05-06 12.45.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/5bdaec1b-2abd-5257-4136-82f989ae5b74.png">

- Jsonファイルがダウンロードされる

<img width="633" alt="スクリーンショット 2018-05-06 12.51.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/d96bffd3-2275-eb2f-17f6-ea19773a90c3.png">


## スプレッドシート作成・共有設定

- 1行目に手動で項目ヘッダーを入力しておく。
- 共有ボタンを押下する。

<img width="901" alt="スクリーンショット 2018-05-06 13.00.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/2ce6c2b9-ea36-c8f3-c1e8-1b41e01ab387.png">


- ユーザー欄にダウンロードした　Jsonファイルに記述されている「client_email」の内容をコピペする。

<img width="956" alt="スクリーンショット 2018-05-06 13.06.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/f692b67f-dc03-8200-de7e-dae09f9ed4a8.png">

### PHPからスプレッドシート追記

#### 0. githubからcloneしてライブラリ導入

```
// GitHubから落としてくる
git clone https://github.com/niiyz/GoogleSheetsAPI-Sample
// ディレクトリに入る
cd GoogleSheetsAPI-Sample
// ライブラリインストール
composer install
```

composer.jsonで[シートAPIと.envのライブラリを指定している](https://github.com/niiyz/GoogleSheetsAPI-Sample/blob/master/composer.json#L11-L12)のでそれらがvendorディレクトリにインストールされる

#### 1. プロジェクト直下にダウンロードしたJsonファイルを設置
#### 2. プロジェクト直下に.envを新規作成

##### SERVICE_KEY_JSONにJsonファイル名を記述

##### SPREADSHEET_IDにスプレッドシートIDを記述

- スプレッドシートのURLが以下の場合「14qNBAGhsgAeL9zS8sQNdNAT7FModbqTztGilOWD-XXXX」がスプレッドシートID

```
https://docs.google.com/spreadsheets/d/14qNBAGhsgAeL9zS8sQNdNAT7FModbqTztGilOWD-XXXX/edit#gid=0
```
.env

```
SERVICE_KEY_JSON=GoogleSheetsAPI-Sample-Project-xxxxx99999.json
SPREADSHEET_ID=14qNBAGhsgAeL9zS8sQNdNAT7FModbqTztGilOWD-XXXX
```

#### 3. PHPからスプレッドシートへ書き込み

- PHP実行

```
% php GoogleSheetsAPISample.php
```

- GoogleSheetsAPISample.php

```php5

<?php

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

use Dotenv\Dotenv;

/**
 * Class GoogleSheetsAPISample
 */
class GoogleSheetsAPISample {

    /**
     * @var Google_Service_Sheets
     */
    protected $service;

    /**
     * @var array|false|string
     */
    protected $spreadsheetId;

    /**
     * GoogleSheetsAPISample constructor.
     */
    public function __construct()
    {
        $dotenv = new Dotenv(__dir__);
        $dotenv->load();
        $credentialsPath = getenv('SERVICE_KEY_JSON');
        putenv('GOOGLE_APPLICATION_CREDENTIALS=' . dirname(__FILE__) . '/' . $credentialsPath);

        $this->spreadsheetId = getenv('SPREADSHEET_ID');

        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Google_Service_Sheets::SPREADSHEETS);
        $client->setApplicationName('test');

        $this->service = new Google_Service_Sheets($client);
    }

    /**
     * @param string $date
     * @param string $name
     * @param string $comment
     */
    public function append(string $date, string $name, string $comment)
    {
        $value = new Google_Service_Sheets_ValueRange();
        $value->setValues([ 'values' => [ $date, $name, $comment ] ]);
        $response = $this->service->spreadsheets_values->append($this->spreadsheetId, 'シート1!A1', $value, [ 'valueInputOption' => 'USER_ENTERED' ] );

        var_dump($response);
    }
}

$sample = new GoogleSheetsAPISample;

$date    = date('Y/m/d');
$name    = '山川のりを';
$comment = 'ギターうまい';
$sample->append($date, $name, $comment);
```

- ヘッダーの下に追記される。

<img width="826" alt="スクリーンショット 2018-05-06 13.44.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/25ff2cee-836e-de99-72d3-ee927edb5443.png">