user icon

Google Sheet APIを使う – SpreadSheet操作編

前々回(プロジェクト作成編)でOAuthクライアントのJSONファイル取得
前回(Token取得編)でaccess_token取得
→今回で漸くGoogle Sheet APIを使えるようになりました。
(単にaccess_tokenを使うまでに、これまでの手順が必要になります)
早速実験してみます。

Token主のメールアドレスを取得してみる

Token取得の過程で、Google認証をした時に渡って来る値に、メールアドレスは含まれません。
まずはTokenの主を調べてみます。
$Headers = [
    'Authorization: Bearer '.$TokenJson['access_token'],
    'Content-Type: application/json',
    'Content-Length: 0', // 付けないとエラーになる
];
$curl = new Curl(); // Headerを送信可能なcurlクラスを作っておく
$curl->addHeader($Headers); // 配列をHeaderに付与可能なメソッド
$res = $curl->get(USER_URL); // POSTでなくGET
$User = json_decode($res, true);
echo $User["email"];
// Tokenとemailを紐づけ保存する処理
...
ここではPOSTする必要は無いですが、Headerを設定する必要が有ります。

Google SpreadSheetを操作する

いよいよSpreadSheetを作成したり編集したりします。
まずは作成。
※編集は別で、同じファイル名で複数実行すると、同じファイル名で複数作成されてしまいます。
$Headers = [
    'Authorization: Bearer '.$TokenJson['access_token'],
    'Content-Type: application/json',
];
$curl = new Curl(); // Headerを送信可能なcurlクラスを作っておく
$curl->addHeader($Headers); // 配列をHeaderに付与可能なメソッド
// 
$props = [
    'properties'=>[
        'title'=>'テスト作成ファイル', // ファイル名
    ],
];
$res = $curl->postJson(SHEET_URL, $props); // JsonをPOST可能なメソッド
$Sheet = json_decode($res, true);
// Sheetを保存する
...
配列をJSON形式でPOSTする準備は、curlだと以下のような形になります。
$ch = curl_init();
// 他のcurl_setopt等処理
...
// JSON用処理
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($props));

作成したSpreadSheetに値を追加していく

編集先を指定するには、ファイル名ではなく作成時に返って来たspreadsheetIdを使用します。
以下のRANGE:append方式では、RANGE列で空欄が見つかった行から追加して行くので、いちいち何行目まで値が有るか、調べる必要が無いので楽です。
$Headers = [
    'Authorization: Bearer '.$TokenJson['access_token'],
    'Content-Type: application/json',
];
$curl = new Curl(); // Headerを送信可能なcurlクラスを作っておく
$curl->addHeader($Headers); // 配列をHeaderに付与可能なメソッド

// Sheet
$sid = $Sheet['spreadsheetId'];
$sheetId = $Sheet['sheets'][0]['properties']['sheetId']; // 今回使わない
$sheetName = $Sheet['sheets'][0]['properties']['title']; // 今回使わない
$range = 'A1:B1'; // 値を追加するセル開始位置

// 編集するspreadsheetIdとrangeを指定
$url = 'https://sheets.googleapis.com/v4/spreadsheets/YOUR_SPREADSHEET_ID/values/RANGE:append?valueInputOption=RAW';
$from = ['YOUR_SPREADSHEET_ID', 'RANGE'];
$to = [$sid, $range];
$url = str_replace($from, $to, $url);

// 追加する値を指定(A列に日時、B列に数字1を追加)
$Values = [
    [date("Y-m-d H:i;s"), 1],
    // [hoge, huga], ...    // 複数行を追加する場合
];
$Data = ["values" => $Values];
$curl->postJson($url, $Data); // JsonをPOST可能なメソッド
成功すると以下のように追加されて行きます。
Facebooktwitterlinkedintumblrmail
名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)