티스토리 뷰
퀵스타터 예제를 실행해보고, 본격적으로 구글 시트 API 레퍼런스를 읽어보자.
레퍼런스를 읽으면서 GitHub 에 있는 소스도 따라가느라 복잡하게 느껴질 수 있지만 그래도 해봅시다!
언어설정에서 한국어 로 설정할 수도 있지만, 메뉴만 한글로 되어있고 내용은 영어 그대로이다.
https://developers.google.com/sheets/api/reference/rest/
공식 홈페이지에 올라온 레퍼런스는 REST API 이다.
PHP로 개발하려고 했는데 REST 뿐인가!
GitHub 에 올려진 구글API PHP 클라이언트 소스 읽는 법을 정리해본다.
구글 API PHP 클라이언트로 구글 시트 뿐만 아니라 구글에서 제공하는 거의 대부분의 서비스를 이용할 수 있다.
살펴봐야할 메인 폴더는 src/Google/Service
A로 시작하는 서비스만 해도 이~~렇게나 많다.
폴더들을 지나쳐 아래로 쭉쭉 내려가 보면 Sheets.php 라는 구글 시트 관련된 클래스파일이 있다.
$service = new Google_Service_Sheets($client);
구글 시트 PHP 클라이언트 호출할 때 Google_Service_Sheets 클래스를 이용하는데, 바로 그 파일이 Sheets.php
클래스 파일을 보면 어떻게 활용할 수 있는지 알 수 있다.
/**
* Constructs the internal representation of the Sheets service.
*
* @param Google_Client $client
*/
public function __construct(Google_Client $client)
{
parent::__construct($client);
클래스 객체 생성할 때 가장 기본이 되는 생성자 부분
Google_Client 를 인자로 넣어주도록 되어있다.
$client 는 퀵스타터 예제에 있는 클라이언트 객체 생성부분을 참고하면 되겠다.
구글 시트 API 문서를 보면 4개의 REST 리소스 항목이 나오는데, 클래스에서 퍼블릭 변수와 각각 대응을 한다.
새로운 구글 스프레드시트 생성하는 예제코드를 본다.
$client = getClient();
$service = new Google_Service_Sheets($client);
// TODO: Assign values to desired properties of `requestBody`:
$requestBody = new Google_Service_Sheets_Spreadsheet();
$response = $service->spreadsheets->create($requestBody);
스프레드시트 생성은 $service->spreadsheets->create($requestBody); 이 부분에서 작업이 된다.
Google_Service_Sheets 객체($service)에서 화살표(->)로 spreadsheets 를 호출하니까
spreadsheets 가 멤버변수인 걸 알 수 있다. 위에 캡처이미지에서도 멤버변수인 것 확인~
$this->spreadsheets = new Google_Service_Sheets_Resource_Spreadsheets(
$this,
$this->serviceName,
'spreadsheets',
array(
'methods' => array(
'batchUpdate' => array(
'path' => 'v4/spreadsheets/{spreadsheetId}:batchUpdate',
'httpMethod' => 'POST',
'parameters' => array(
'spreadsheetId' => array(
'location' => 'path',
'type' => 'string',
'required' => true,
),
),
),'create' => array(
'path' => 'v4/spreadsheets',
'httpMethod' => 'POST',
'parameters' => array(),
)
spreadsheets 변수에 할당된 객체를 보니 Google_Service_Sheets_Resource_Spreadsheets 클래스이다.
해당 클래스를 찾아가기 위해서는 Sheets 폴더로 들어간다.
온갖 구글 스프레드시트 관련된 클래스가 모여있다. 파일이름만 봐도 어떤 클래스인지 알 수 있다.
여기서 주의할 점은 클래스명과 파일명은 같지 않다는 것이다.
즉, 발견한 클래스명 으로 F3 눌러서 검색해봤자 아무것도 안 나온다.
클래스명에서 파일명을 유추해야 한다.
Google_Service_Sheets_Resource_Spreadsheets 에서 Resource 폴더에 들어있을 것 같다.
여기까지 왔으니 이 중에서 Spreadsheets.php 가 아닐까?
class Google_Service_Sheets_Resource_Spreadsheets extends Google_Service_Resource
찾았다! Google_Service_Sheets_Resource_Spreadsheets 클래스
public function create(Google_Service_Sheets_Spreadsheet $postBody, $optParams = array())
{
$params = array('postBody' => $postBody);
$params = array_merge($params, $optParams);
return $this->call('create', array($params), "Google_Service_Sheets_Spreadsheet");
}
멤버함수인 create 를 보면 인자로 Google_Service_Sheets_Spreadsheet 객체를 필요로 한다.
잠깐 Google_Service_Sheets_Spreadsheet 클래스의 내용을 살펴보면,
자바 스프링의 DTO(Data Transfor Object) 객체같은 역할을 하는지 멤버변수에 대해 getter 와 setter 함수로 접근하게 되어있다.
그러기 때문에 이 객체를 $requestBody 로 생성하여 create 에 인자로 넘겨주는 것이다.
이대로 간단하게 끝나면 좋겠지만, 레퍼런스 문서의 예제에 빠진 부분이 있다.
Assign values to desired properties of `requestBody` //`requestBody`의 원하는 속성에 값을 할당하십시오.
당황하지 말고 구글에서 제공한 테스트 폼을 먼저 이용해 본다. Try this API 영역 이용하기!
Request body 영역에 아무 파라미터 값을 안 줘도 파일 생성은 잘 된다.
여기서 확인해보는 것은 properties 항목이다.
가장 기본이 되는 스프레드시트 파일명을 지정해야 하는데 Google_Service_Sheets_Spreadsheet 의 setter 함수 중에서 힌트를 찾을 수 있었다.
/**
* @param Google_Service_Sheets_SpreadsheetProperties
*/
public function setProperties(Google_Service_Sheets_SpreadsheetProperties $properties)
{
$this->properties = $properties;
}
Google_Service_Sheets_SpreadsheetProperties 클래스 이용하기
class Google_Service_Sheets_SpreadsheetProperties extends Google_Model
{
public $autoRecalc;
protected $defaultFormatType = 'Google_Service_Sheets_CellFormat';
protected $defaultFormatDataType = '';
protected $iterativeCalculationSettingsType = 'Google_Service_Sheets_IterativeCalculationSettings';
protected $iterativeCalculationSettingsDataType = '';
public $locale;
public $timeZone;
public $title;
properties 의 항목들이 클래스의 멤버변수들로 들어있고,
셀 포맷 설정은 한 번 더 타고 들어가서 어떤 항목들이 있는지 확인할 수 있다.
구글 시트 API 가이드문서에는 Using the Sheets API 가 있어서 간단한 사용법이 나와있다.
실제로 PHP 소스로 입력해본다.
<?php
require __DIR__ . '/../vendor/autoload.php';
if (php_sapi_name() != 'cli') {
throw new Exception('This application must be run on the command line.');
}
/**
* Returns an authorized API client.
* @return Google_Client the authorized client object
*/
function getClient()
{
$client = new Google_Client();
$client->setApplicationName('Google Sheets API PHP Quickstart');
$client->setScopes(Google_Service_Sheets::SPREADSHEETS_READONLY);
$client->setAuthConfig('../credentials.json');
$client->setAccessType('offline');
$client->setPrompt('select_account consent');
// Load previously authorized token from a file, if it exists.
// The file token.json stores the user's access and refresh tokens, and is
// created automatically when the authorization flow completes for the first
// time.
$tokenPath = 'token.json';
if (file_exists($tokenPath)) {
$accessToken = json_decode(file_get_contents($tokenPath), true);
$client->setAccessToken($accessToken);
}
// If there is no previous token or it's expired.
if ($client->isAccessTokenExpired()) {
// Refresh the token if possible, else fetch a new one.
if ($client->getRefreshToken()) {
$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
} else {
// Request authorization from the user.
$authUrl = $client->createAuthUrl();
printf("Open the following link in your browser:\n%s\n", $authUrl);
print 'Enter verification code: ';
$authCode = trim(fgets(STDIN));
// Exchange authorization code for an access token.
$accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
$client->setAccessToken($accessToken);
// Check to see if there was an error.
if (array_key_exists('error', $accessToken)) {
throw new Exception(join(', ', $accessToken));
}
}
// Save the token to a file.
if (!file_exists(dirname($tokenPath))) {
mkdir(dirname($tokenPath), 0700, true);
}
file_put_contents($tokenPath, json_encode($client->getAccessToken()));
}
return $client;
}
// Get the API client and construct the service object.
$client = getClient();
$service = new Google_Service_Sheets($client);
// TODO: Assign values to desired properties of `requestBody`:
$requestBody = new Google_Service_Sheets_Spreadsheet([
'properties' => [
'title' => $title
]
]);
$response = $service->spreadsheets->create($requestBody, [
'fields' => 'spreadsheetId'
]);
printf("Spreadsheet ID: %s\n", $spreadsheet->spreadsheetId);
// TODO: Change code below to process the `response` object:
echo '<pre>', var_export($response, true), '</pre>', "\n";
?>
이전 글에서 quickstart.php 파일이 위치한 곳에 createSheet.php 파일을 생성한다.
cmd 창에서 실행하기
스프레드시트 아이디와 파일생성 결과가 출력되어야 하는데...
레퍼런스 페이지에서 테스트 했을 때와는 다르게 권한에러가 난다.
권한부여요청에 대해서 추가작업이 필요하다.
'구글 API' 카테고리의 다른 글
구글 시트 API 권한부여_ OAuth 2.0 토큰/API 키 (0) | 2019.07.17 |
---|---|
Google Sheet/구글 시트 API 퀵스타터 예제_ PHP 버전 (0) | 2019.07.16 |