Google 데이터 PHP 클라이언트 라이브러리 시작하기

경고: 이 페이지는 Google의 이전 API인 Google Data API에 관한 것으로, Google Data API 디렉터리에 표시된 API 중 상당수가 최신 API로 대체된 API입니다. 특정 새 API에 대한 자세한 내용은 새 API 문서를 참조하세요. 최신 API를 사용하여 요청을 승인하는 방법은 Google 계정 인증 및 승인을 참고하세요.

요헨 하트만, Google 데이터 API팀
업데이트: 2008년 10월 (출처: 대니얼 홀레보트)

소개

Google 데이터 PHP 클라이언트 라이브러리는 Google 데이터 API와 상호작용할 수 있게 해주는 강력한 클래스 모음입니다. 다른 클라이언트 라이브러리와 달리 많이 사용되는 Zend Framework의 일부로 패키징되어 있지만 별도로 다운로드할 수도 있습니다. 다른 클라이언트 라이브러리와 마찬가지로 오픈소스이며 간단하면서도 효율적으로 설계되어 프로젝트를 빠르게 시작할 수 있습니다.

설치 전

PHP가 이미 개발 머신이나 웹 서버에 설치되었을 수 있으므로 첫 번째 단계는 그 사실을 확인하고 PHP 버전이 클라이언트 라이브러리에 사용하기에 충분한 최신 버전인지 확인하는 것입니다. 가장 쉽게 확인하는 방법은 서버의 웹 액세스가 가능한 디렉터리에 새 파일을 배치하는 것입니다. 파일에 다음 정보를 입력합니다.

<?php phpinfo(); ?>

그런 다음 적절한 권한을 설정하여 웹에서 파일에 액세스할 수 있는지 확인하고 브라우저 내에서 이 위치로 이동합니다. PHP가 설치되어 있고 서버에서 PHP 페이지를 렌더링할 수 있으면 아래 스크린샷과 같이 표시됩니다.

PHP 정보 페이지 스크린샷

PHP 정보 페이지를 보여주는 스크린샷 이 페이지에는 설치된 PHP 버전 (이 경우 5.2.6)과 사용 설정된 확장 프로그램('명령어 구성' 섹션) 및 PHP 내부 구성 파일의 위치('로드된 구성 파일' 섹션)가 표시됩니다. 페이지가 표시되지 않거나 PHP 버전이 5.1.4 이하인 경우 PHP 버전을 설치하거나 업그레이드해야 합니다. 그 외의 경우에는 다음 섹션을 건너뛰고 PHP 클라이언트 라이브러리 설치를 계속 진행합니다.

참고: 명령줄에 대한 액세스 권한이 있고 PHP를 사용하여 명령줄 스크립트를 실행할 계획이라면 이 도움말의 명령줄 PHP 섹션을 참고하세요.

PHP 설치하기

설치는 플랫폼에 따라 약간 다르므로 설치 중에 특정 플랫폼에 대한 안내를 따르는 것이 중요합니다. 본격적으로 시작하기 전에 Apache 웹 서버 및 MySQL 데이터베이스를 포함하는 사전 설치된 패키지가 PHP와 함께 인기가 높아졌습니다. Windows, Mac OS X, Linux의 경우 XAMPP 프로젝트가 있습니다. Mac OS X 사용자는 MAMP 프로젝트를 사용할 수도 있습니다. 두 패키지 모두 PHP에서 OpenSSL을 지원합니다 (인증된 피드와 상호작용하는 데 필요함).

아래 단계에 따라 PHP를 설치하는 경우 OpenSSL 지원도 설치하고 사용 설정해야 합니다. 자세한 내용은 PHP 사이트의 OpenSSL 섹션을 참고하세요. 다음 섹션에서는 자체적으로 PHP를 설치하는 방법을 중점적으로 설명합니다.

Windows의 경우

Windows에서 PHP를 설치하거나 업그레이드하는 가장 쉬운 방법은 PHP 다운로드 페이지에서 제공되는 PHP 설치 프로그램을 사용하는 것입니다.

  1. Windows 바이너리 섹션에서 최신 버전의 PHP에 해당하는 PHP 설치 프로그램 옵션을 선택하여 다운로드합니다.
  2. 설치 프로그램을 열고 설치 마법사의 안내를 따릅니다.
  3. 마법사가 표시되면 시스템에 설치된 웹 서버를 선택하여 서버가 PHP에서 작동하도록 구성합니다.
  4. 위의 섹션에 설명된 단계에 따라 설치를 확인합니다.

Mac OS X

PHP는 OS X에 포함되어 있지만 사용하기 전에 최신 버전의 PHP로 업그레이드해야 합니다. 업그레이드하려면 여러 무료 바이너리 패키지를 설치하거나 직접 컴파일할 수 있습니다. 자세한 내용은 Mac OS X에 설치하기에 관한 PHP 문서 페이지를 참고하세요.

OS X를 설치하거나 설정한 후 이 문서의 설치 전 섹션에 설명된 단계에 따라 설치를 확인합니다.

Linux의 경우

Linux 배포판에 따라 PHP 설치를 위한 내장 또는 간편한 설정 옵션이 있을 수 있습니다. 예를 들어 Ubuntu에서는 패키지 관리자를 사용하거나 터미널에 다음을 입력하면 됩니다.

sudo apt-get install php5

Linux 배포판에서 사용 가능한 패키지 설치가 없으면 소스 코드에서 설치해야 합니다. Apache 1.3용 PHP 컴파일Apache 2용 PHP 컴파일에 대한 자세한 안내를 참조하세요. PHP.net에는 다른 서버에 대한 안내도 있습니다.

Google 데이터 PHP 클라이언트 라이브러리 설치

이제 PHP의 작업 버전이 설치되었으므로 클라이언트 라이브러리를 설치할 차례입니다. 클라이언트 라이브러리는 오픈소스 Zend 프레임워크의 일부이지만 독립형 버전으로 다운로드할 수도 있습니다. Zend 프레임워크 버전 (버전 1.6 이상)이 이미 설치되어 있으면 Google 데이터 클라이언트 라이브러리가 포함되어 있으므로 설치를 건너뛸 수 있습니다. 하지만 최신 버전의 프레임워크를 사용하면 최신 기능과 버그 수정을 모두 이용할 수 있으므로 일반적으로 사용하는 것이 좋습니다.

전체 프레임워크를 다운로드하면 Google 데이터 클라이언트 라이브러리뿐만 아니라 나머지 프레임워크에도 액세스할 수 있습니다. 클라이언트 라이브러리는 전체 Zend 프레임워크의 일부인 다른 클래스를 사용하지만, 독립형 다운로드에 번들로 묶으므로 전체 프레임워크를 다운로드할 필요가 없습니다.

  1. Google 데이터 클라이언트 라이브러리 파일을 다운로드합니다. 이 페이지에서 'Google Data API'를 검색합니다.
  2. 다운로드한 파일의 압축을 풉니다. 4개의 하위 디렉터리를 만들어야 합니다.
    • demos — 샘플 애플리케이션
    • documentation — 클라이언트 라이브러리 파일 관련 문서
    • library - 실제 클라이언트 라이브러리 소스 파일입니다.
    • tests - 자동화된 테스트를 위한 단위 테스트 파일입니다.
  3. PHP 경로에 library 폴더의 위치를 추가합니다 (다음 섹션 참고).

클라이언트 라이브러리 파일에 액세스할 수 있는지 확인

마지막 단계는 프로젝트를 빌드하는 디렉터리의 PHP 클라이언트 라이브러리 파일을 참조하고 포함할 수 있는지 확인하는 것입니다. PHP의 구성 파일(php.ini)에 include_path 변수를 설정하면 됩니다. include_path 변수에는 자바의 import 문과 비슷하게 외부 클래스, 라이브러리, 파일을 현재 스크립트로 가져오는 require 또는 include 문을 실행할 때 PHP가 확인하는 여러 디렉터리 위치가 포함됩니다. 클라이언트 라이브러리 파일의 위치를 include_path에 이미 설정된 위치에 추가해야 합니다. 이 작업은 다음 두 가지 방법으로 수행할 수 있습니다 (두 방법 모두 아래에 자세히 설명되어 있음).

  • 명령줄에서 php.ini 구성 파일의 include_path 지시어를 영구적으로 설정합니다. 셸 액세스 및 쓰기 권한이 필요합니다.
  • '디렉터리별' 수준에서 include_path 경로 변수를 설정합니다. Apache 웹 서버와 .htaccess 파일을 만들 수 있는 기능이 필요합니다.
  • set_include_path() 함수를 사용하여 스크립트에 포함 경로를 동적으로 설정합니다. 각 .php 파일에서 동적으로 설정할 수 있습니다.

php.ini 파일에 대한 셸 액세스 및 쓰기 권한이 있거나 로컬 머신에서 코드를 작성하는 경우 부록 A의 안내를 따르세요. Apache 웹 서버를 사용하고 있으며 .htaccess 파일을 생성할 수 있다면 '디렉터리별' 수준에서 include_path 변수를 설정할 수 있습니다. 즉, 작업 중인 디렉터리의 모든 파일이 자동으로 클라이언트 라이브러리 디렉터리를 참조할 수 있습니다.

아래 스니펫과 같이 PHP 구성 옵션을 지정할 수 있습니다.

# This works for PHP5 in both Apache versions 1 and 2
<IfModule mod_php5.c>
  php_value include_path        ".:/usr/local/lib/php:/path/to/ZendGdata/library"
</IfModule>

참고: 구성 설정 변경에 대한 자세한 내용은 PHP 설명서를 참고하세요.

서버에 대한 셸 액세스 권한이 없으며 .htaccess 파일을 수정하거나 만들 수 없는 경우 항상 set_include_path 함수를 사용할 수 있습니다. include_path에 이미 일부 값이 설정되어 있을 수 있으므로 아래 경로를 따라 전체 경로를 덮어쓰는 대신 새 값을 추가하는 것이 좋습니다.

$clientLibraryPath = '/path/to/ZendGdata/library';
$oldPath = set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath);

참고: set_include_path 함수에 대한 자세한 내용은 PHP 매뉴얼 페이지를 참고하세요.

PHP 설치 검사기 실행

포함 경로가 올바르게 설정되었는지 확인하려면 PHP 설치 검사기 스크립트를 실행합니다. 파일의 콘텐츠를 복사하여 서버의 웹 액세스 가능한 디렉터리에 있는 새 파일에 붙여넣고 브라우저에서 해당 파일로 이동하면 됩니다. 아래와 비슷한 출력이 표시되면 모든 구성이 제대로 완료된 것이므로 PHP 클라이언트 라이브러리를 사용할 수 있습니다.

PHP 설치 검사기 출력 스크린샷

아래 스크린샷과 같이 오류가 표시되면 안내를 따릅니다. 확장 프로그램이 누락되었거나 경로가 여전히 올바르게 설정되지 않았을 수 있습니다. 변경사항을 적용하려면 서버를 다시 시작해야 할 수도 있습니다. 실제로 php.ini 파일을 수정하는 경우에만 적용됩니다. 아래 스크린샷은 include_path/path/to/nowhere로 설정된 것을 보여줍니다.

PHP 설치 검사기 출력 스크린샷

참고: PHP 설치 검사기는 다음 사항을 연속으로 확인합니다. (1) 설치된 필수 PHP 확장 프로그램, (2) include_path가 PHP 클라이언트 라이브러리 디렉터리를 가리키고, (3) SSL 연결이 가능하며, 마지막으로 YouTube Data API에 연결할 수 있습니다. 특정 테스트가 실패하면 나머지 테스트는 실행되지 않습니다.

클라이언트 라이브러리가 설치되었으므로 샘플을 실행해 보겠습니다.

샘플 실행

Zend/Gdata 디렉터리의 루트에는 데모 폴더가 있습니다. 시작하는 데 도움이 되는 샘플입니다. 이 샘플 중 일부는 demos/Zend/Gdata/Blogger.phpdemos/Zend/Gdata/Spreadsheet-ClientLogin.php와 같은 명령줄에서 실행되도록 설계되었으며 php /path/to/example를 사용하여 실행할 수 있습니다. 나머지 샘플은 명령줄과 웹브라우저 모두에서 실행할 수 있습니다. 이러한 확장 소재를 브라우저에서 보려면 웹페이지를 제공하는 데 사용하는 어느 디렉터리에나 배치해야 합니다. 이 샘플은 Google 데이터 애플리케이션을 작성하고 실행하는 방법에 대한 기본적인 개념을 제공하지만 더 자세한 내용을 알아보려면 호기심 많은 프로그래머를 위한 다른 리소스를 참고하세요.

참고: 웹 기반 데모를 온라인에서 보려면 googlecodesamples.com에서 PHP 애플리케이션을 찾으세요.

자세히 알아보기

클라이언트 라이브러리에 포함된 클래스에 대한 정보를 찾기에 가장 좋은 자료는 Zend 프레임워크 사이트의 API 참조 가이드입니다. 드롭다운에서 Zend_Gdata 패키지를 선택해야 합니다.

이제 코딩을 시작할 준비가 되었습니다. 그렇다면 멋진 애플리케이션을 작성해 보세요. 좋은 결과가 있기를 바랍니다.

다음 서비스에 대한 PHP 개발자 가이드를 찾을 수 있습니다.

PHP 클라이언트 라이브러리는 오픈소스 프로젝트이므로 더 많은 API에 대한 지원이 계속 추가되고 있습니다. 각 서비스에는 자체 지원 그룹이 있습니다. 사용 가능한 지원 그룹 목록을 보려면 FAQ 항목을 참조하세요.

API 호출 문제를 해결하는 데 도움이 필요한 경우 네트워크 트래픽 캡처 도구를 사용하여 API 요청 디버깅하기Google Data API에서 프록시 서버 사용하기에 관한 도움말을 참고하세요. Linux에 XAMPP 설치하기Windows에 XAMPP 설치하기에 관한 몇 가지 외부 도움말도 있습니다. 이 모든 도움말 외에도 Google Data API 도움말 블로그에서 PHP 클라이언트 라이브러리에 대한 게시물을 확인하세요.

부록 A: php.ini 구성 파일에서 PHP 경로 수정

PHP 경로는 로드 중에 추가 라이브러리를 찾을 때 PHP가 검색하는 위치 목록을 포함하는 변수입니다. PHP가 시스템 또는 서버에서 Google 데이터 PHP 클라이언트 라이브러리 파일을 로드하고 액세스할 수 있으려면 PHP가 알고 있는 위치에 파일을 배치해야 합니다. 또는 파일의 위치를 PHP 경로에 추가해야 합니다. php.ini 파일을 변경하려면 일반적으로 서버를 다시 시작해야 합니다. 언제든지 앞에서 다룬 PHP 정보 페이지로 이동하여 include_path 변수의 현재 값을 확인할 수 있습니다. 첫 번째 표에서 로드된 구성 파일 셀을 찾아 오른쪽 열에서 경로를 찾습니다.

참고: 명령줄에서 php를 사용하는 경우 추가 경로 변수를 수정해야 할 수도 있습니다. 부록 B: 명령줄에서 PHP 사용하기를 검토하세요.

php.ini 파일을 찾으면 다음 단계에 따라 경로에 추가합니다.

  1. 원하는 텍스트 편집기에서 php.ini 파일을 엽니다.
  2. PHP 경로를 참조하는 줄을 찾습니다. 경로는 include_path로 시작합니다.
  3. Zend 프레임워크를 저장한 경로를 이미 존재하는 위치 목록에 추가합니다. 이때 새 경로에 OS용으로 지정된 구분자 (예: Unix와 비슷한 시스템의 경우 :, Windows의 경우 ;)가 지정됩니다. Unix와 유사한 시스템의 올바른 경로는 다음과 같습니다.
    /path1:/path2:/usr/local/lib/php/library
    Windows에서 경로는 다음과 같습니다.
    \path1;\path2;\php\library
  4. 파일을 저장하고 닫습니다.

참고: Mac OS X에서 Finder는 /etc 디렉터리와 같은 시스템 위치에 있는 파일에 대한 액세스를 허용하지 않습니다. 따라서 vi 또는 pico과 같은 명령줄 편집기를 사용하여 수정하는 것이 가장 쉬울 수 있습니다. 이렇게 하려면 pico /path/to/php.ini와 같은 명령어를 사용하세요.

부록 B: 명령줄에서 PHP 사용

PHP 버전 5부터 '명령줄 인터프리터'를 CLI로 지칭하는 PHP에서 사용할 수 있는 명령줄 유틸리티가 있습니다. 이 유틸리티를 사용하면 PHP 스크립트를 명령줄에서 실행할 수 있습니다. 이 기능은 컴퓨터에서 PHP를 로컬로 실행하고 일부 스크립트를 빠르게 테스트할 방법을 찾고 있는 경우에 유용합니다. 물론 서버에서는 셸 액세스 권한이 필요합니다. 중요한 점은 PHP는 일반적으로 별도의 php.ini 파일 두 개를 사용한다는 것입니다. 이 중 하나는 서버에서 실행되는 PHP의 구성 옵션을 포함하고, 다른 하나는 명령줄에서 실행 시 PHP가 사용하는 구성을 포함합니다. 클라이언트 라이브러리에서 명령줄 데모 애플리케이션을 실행하려면 명령줄 php.ini 파일도 수정해야 합니다.

찾기 위해 Unix와 유사한 시스템 (Mac OS X, Linux 등)에서 다음 명령어를 입력합니다.

php -i | grep php.ini

이 명령어를 실행하면 터미널에 다음 정보가 표시됩니다.

Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini

참고: 실제 경로 위치(/etc/php...)는 물론 시스템에 따라 다를 수 있습니다.

부록 C: 힌트 및 해결책

이 섹션에는 개발자가 PHP로 작업하면서 발견한 몇 가지 문제와 적절한 해결 방법이 간략하게 설명되어 있습니다.

XAMPP의 dom-xml 확장 프로그램 문제

PHP 클라이언트 라이브러리는 DOMDocument 클래스를 사용하여 XML 요청 및 응답을 PHP 객체로 변환합니다. dom-xml 확장 프로그램은 XML 처리 문제를 일으키고 잘못된 변환으로 이어질 수 있습니다. 일부 개발자들은 PHP 사이트에 설명된 대로 XAMPP를 사용할 때 DOMDocument 생성자가 이전 함수 호출로 재정의된다는 사실을 발견했습니다. 이 문제를 해결하려면 php.ini 파일에서 XML 처리를 덮어쓰지 않도록 해야 합니다. 구성 파일에서 php_domxml.dll에 대한 참조를 삭제해야 합니다.

클라이언트 라이브러리를 사용할 때 요청 시간이 초과되었습니다.

클라이언트 라이브러리를 사용하여 YouTube Data API에 동영상을 업로드하는 것과 같이 상당히 큰 요청을 수행하는 경우 Zend_Http_Client 클래스의 timeout 매개변수를 변경해야 할 수 있습니다. 이렇게 하려면 인스턴스화하는 동안 $config 매개변수를 전달하여 timeout 값을 10초 기본값이 아닌 다른 값으로 설정하면 됩니다.

// assuming your Zend_Http_Client already exists as $httpClient
// and that you want to change the timeout from the 10 second default to 30 seconds

$config = array('timeout' => 30);
$httpClient->setConfig($config);

일부 호스팅 업체에서는 서버에서 HTTPS 연결을 허용하지 않습니다.

일부 호스팅 업체에서 기본 서버에서 https의 연결을 허용하지 않는다는 의견을 받았습니다. 아래와 유사한 오류 메시지가 표시되면 보안 프록시를 통해 https 연결을 만들어야 할 수 있습니다.

Unable to Connect to sslv2://www.google.com:443. Error #110: Connection timed out

호스팅 제공업체에는 사용할 프록시 서버의 실제 주소 정보가 있어야 합니다. 아래 스니펫은 PHP 클라이언트 라이브러리에서 커스텀 프록시 구성을 사용하는 방법을 보여줍니다.

// Load the proxy adapter class in addition to the other required classes
Zend_Loader::loadClass('Zend_Http_Client_Adapter_Proxy');

// Configure the proxy connection with your hostname and portnumber
$config = array(
    'adapter'    => 'Zend_Http_Client_Adapter_Proxy',
    'proxy_host' => 'your.proxy.server.net',
    'proxy_port' => 3128
);

// A simple https request would be an attempt to authenticate via ClientLogin
$proxiedHttpClient = new Zend_Http_Client('http://www.google.com:443', $config);

$username = 'foo@example.com';
$password = 'barbaz';

// The service name would depend on what API you are interacting with, here
// we are using the Google DocumentsList Data API
$service = Zend_Gdata_Docs::AUTH_SERVICE_NAME;

// Try to perform the ClientLogin authentication using our proxy client.
// If there is an error, we exit since it doesn't make sense to go on.
try {

  // Note that we are creating another Zend_Http_Client
  // by passing our proxied client into the constructor.

  $httpClient = Zend_Gdata_ClientLogin::getHttpClient(
      $username, $password, $service, $proxiedHttpClient);

} catch (Zend_Gdata_App_HttpException $httpException) {

  // You may want to handle this differently in your application
  exit("An error occurred trying to connect to the proxy server\n" .
      $httpException->getMessage() . "\n");

}

업데이트 기록

2008년 10월 1일

요헨 하트만이 업데이트했습니다. 이번 업데이트에서 이루어진 변경내용은 다음과 같습니다.

  • 명령줄 PHP를 참조하는 섹션을 부록으로 이동하여 웹 서버의 PHP 구성을 더 명확하게 만들었습니다.
  • 여러 php.ini 구성 파일에 관한 참고사항을 추가했습니다.
  • include_path를 동적으로 설정하는 방법에 관한 섹션을 추가했습니다.
  • 설치 검사기 스크립트에 섹션을 추가했습니다.
  • 온라인 샘플 링크가 추가되었습니다.
  • XAMPP 및 MAMP용 링크가 추가되었습니다.
  • '힌트 및 해결 방법' 부록을 추가했습니다.