Google App Engine for PHP에서 Google 스프레드시트에 읽기/쓰기

15763 단어 GoogleAppEnginePHP
Google App Engine for PHP에서 Google Drive API 사용 』의 계속입니다. Google App Engine for PHP(GAE/PHP)에서 Google 드라이브에 저장된 스프레드시트로 읽고 쓰는 방법입니다. 이렇게 하면 스프레드시트를 데이터베이스처럼 사용할 수 있습니다. 또한 Google 스프레드시트는 Google Drive 용량에 계산되지 않음 따라서 원하는 만큼 사용할 수 있습니다.

1. Google 스프레드시트 만들기



Google 드라이브 로 이동하여 스프레드시트를 만듭니다.



브라우저에서 스프레드시트를 엽니다. 첫 번째 줄에 id, name, age를 입력하고 두 번째 줄부터는 적절한 데이터를 입력합니다.



스프레드시트를 연 상태에서 브라우저의 URL 입력란은https://docs.google.com/spreadsheets/d/{スプレッドシートID}/edit#gid=0되어 있으므로 스프레드시트 ID를 메모해 둡니다. 이 ID를 사용하여 프로그램에서 액세스합니다.

2. 프로그램



"Google App Engine for PHP에서 Google Drive API 사용"의 Google APIs Client Library for PHP를 다운로드 할 때까지 완료하십시오. (프로젝트 생성, API 설정, OAuth 설정)

sample.php
<?php
require_once('./google-api-php-client/src/Google/autoload.php');

session_start();
$client = new Google_Client();
$client->setClientId('クライアントID');
$client->setClientSecret('クライアントシークレット');
$client->setRedirectUri('リダイレクトURI');

// 許可されてリダイレクトされると URL に code が付加されている
// code があったら受け取って、認証する
if (isset($_GET['code'])) {
    // 認証
    $client->authenticate($_GET['code']);
    $_SESSION['token'] = $client->getAccessToken();
    // リダイレクト GETパラメータを見えなくするため(しなくてもOK)
    header('Location: http://'.$_SERVER['HTTP_HOST']."/");
    exit;
}

// セッションからアクセストークンを取得
if (isset($_SESSION['token'])) {
    // トークンセット
    $client->setAccessToken($_SESSION['token']);
}

// トークンがセットされていたら
if ($client->getAccessToken()) {
    try {
        echo "Google Drive Api 連携完了!<br>";
        $obj = json_decode($client->getAccessToken());
        $token = $obj->{'access_token'};
        write($token);
        read($token);
    } catch (Google_Exception $e) {
        echo $e->getMessage();
    }
} else {
    // 認証スコープ(範囲)の設定
    $client->setScopes(Google_Service_Drive::DRIVE);
    // 一覧を取得する場合はhttps://spreadsheets.google.com/feedsが必要
    $client->addScope('https://spreadsheets.google.com/feeds');

    $authUrl = $client->createAuthUrl();
    echo '<a href="'.$authUrl.'">アプリケーションのアクセスを許可してください。</a>';
}


function write($token) {
    $key = '{スプレッドシートID}';
    $url = "https://spreadsheets.google.com/feeds/list/{$key}/od6/private/full";

    // 書き込みデータ
    $fields = '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">
        <gsx:id>0004</gsx:id>
        <gsx:name>umi</gsx:name>
        <gsx:age>16</gsx:age>
        </entry>';

    $context = stream_context_create(
        array(
            'http' => array(
                'method'=> 'POST',
                'header'=> "Content-Type: application/atom+xml\r\n"."Authorization: Bearer ".$token,
                'content' => $fields
            )
        )
    );

    $response = file_get_contents($url, false, $context);
    // ステータスコードがHTTP/1.1 201なら書き込みOK
    echo 'http status is ' . $http_response_header[0];
}


function read($token) {
    $key = '{スプレッドシートID}';
    $url = "https://spreadsheets.google.com/feeds/list/{$key}/od6/private/full";
    // age>16条件
    //$url = "https://spreadsheets.google.com/feeds/list/{$key}/od6/private/full?sq=age>16";
    // 一覧取得
    //$url = 'https://spreadsheets.google.com/feeds/spreadsheets/private/full';

    $context = stream_context_create(
        array(
            'http' => array(
                'method'=> 'GET',
                'header'=> "Authorization: Bearer ".$token
            )
        )
    );

    $response = file_get_contents($url, false, $context);
    echo 'http status is ' . $http_response_header[0];
    $obj = simplexml_load_string($response);

    /* 取得データ表示
    echo "<pre>";
    print_r($obj);
    echo "</pre>";
    */

    foreach($obj->entry as $data) {
        $gsxNode = $data->children('gsx', true);
        echo 'USER ID:'.$gsxNode->id.' Name:'.$gsxNode->name.' Age:'.$gsxNode->age.'<br>';
    }
}

3. 실행 결과







4. 주의점과 보충



4.1 GAE/PHP에서는 cURL을 사용할 수 없다



로컬 서버에서는 설정을 변경하여 cURL을 사용할 수 있지만 GAE 서버에서는 cURL을 사용할 수 없습니다. 샘플 프로그램은 file_get_contents()를 사용하여 http 요청을 전송합니다.

로컬 서버에서 cURL을 사용하는 방법
1. app.yaml을 열고 runtime: php55로 변경
2. 프로젝트 폴더의 루트에 php.ini를 넣고 ini 파일에 extension = "curl.so"를 작성하십시오.

4.2 스프레드 시트에 여러 줄 쓰기



GAE에서는 자동으로 favicon에 액세스할 수 있습니다. app.yaml에서 설정하지 않으면 favicon에 액세스 할 때마다 url에 .*가 설정된 script (php 파일)가 실행됩니다. 이를 피하려면 app.yaml에 favicon을 작성하거나 script 파일 (sample.php)의 url을 기본 .*에서 /로 변경하십시오. (루트 액세스 만 수행)

4.3 쿼리



스프레드시트를 읽을 때 URL에 쿼리를 추가하여 조건과 일치하는 행을 검색할 수 있습니다.
Google Sheets API 버전 3.0 - Sending a structured query for rows
예: age>16 행 가져오기$url = "https://spreadsheets.google.com/feeds/list/{$key}/od6/private/full?sq=age>16

참고



PHP로 Google Spreadsheet에 데이터를 넣어보세요 - Qiita
Google Sheets API version 3.0 - Google Apps — Google Developers
URL Fetch PHP API Overview - PHP — Google Cloud Platform
The php.ini File - PHP — Google Cloud Platform

좋은 웹페이지 즐겨찾기