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

경고: 이 페이지는 Google의 이전 API인 Google Data API에 관한 내용이며, Google Data API 디렉터리에 나열된 API에만 해당합니다. 이 API 중 상당수는 최신 API로 대체되었습니다. 특정 새 API에 관한 자세한 내용은 새 API의 문서를 참고하세요. 최신 API로 요청을 승인하는 방법에 대한 자세한 내용은 Google 계정 인증 및 승인을 참고하세요.

요헨 하트만, Google 데이터 API팀
2008년 10월 업데이트 (원래 작성자: 다니엘 홀레보트)

소개

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

설치 전

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

<?php phpinfo(); ?>

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

php info 페이지 스크린샷

스크린샷은 PHP 정보 페이지를 보여줍니다. 이 페이지에는 설치된 PHP 버전 (이 경우 5.2.6)과 사용 설정된 확장 프로그램('Configure Command' 섹션) 및 PHP의 내부 구성 파일 위치('Loaded Configuration File' 섹션)가 표시됩니다. 페이지가 표시되지 않거나 PHP 버전이 5.1.4보다 오래된 경우 PHP 버전을 설치하거나 업그레이드해야 합니다. 그렇지 않으면 다음 섹션을 건너뛰고 PHP 클라이언트 라이브러리 설치로 계속하면 됩니다.

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

PHP 설치

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

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

Windows의 경우

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

  1. 최신 버전의 PHP에 해당하는 PHP 설치 프로그램 옵션 (Windows 바이너리 섹션)을 선택하고 다운로드를 허용합니다.
  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 Data PHP 클라이언트 라이브러리 설치

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

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

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

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

마지막 단계는 프로젝트를 빌드하는 디렉터리에서 PHP 클라이언트 라이브러리 파일을 참조하고 포함할 수 있는지 확인하는 것입니다. 이는 PHP의 구성 파일(php.ini)에서 include_path 변수를 설정하여 이루어집니다. include_path 변수에는 외부 클래스, 라이브러리 또는 파일을 현재 스크립트로 가져오는 require 또는 include 문을 실행할 때 PHP가 살펴보는 여러 디렉터리 위치가 포함되어 있습니다(Java의 import 문과 유사). 클라이언트 라이브러리 파일의 위치를 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.php, demos/Zend/Gdata/Spreadsheet-ClientLogin.php과 같이 명령줄에서 실행되도록 설계되었으며 php /path/to/example로 실행할 수 있습니다. 나머지 샘플은 명령줄과 웹브라우저에서 모두 실행할 수 있습니다. 브라우저에서 보려면 웹페이지를 제공하는 데 사용하는 디렉터리에 배치해야 합니다. 이러한 샘플을 통해 Google 데이터 애플리케이션을 작성하고 실행하는 방법을 대략적으로 파악할 수 있지만, 더 자세히 알아보고 싶다면 호기심 많은 프로그래머를 위한 다른 리소스도 있습니다.

참고: 웹 기반 데모를 온라인으로 확인하려면 googlecodesamples.com을 방문하여 PHP 애플리케이션을 찾아보세요.

자세한 내용을 알아볼 수 있는 리소스

클라이언트 라이브러리에 포함된 클래스에 관한 정보를 찾을 수 있는 가장 좋은 곳은 Zend Framework 사이트의 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 Data PHP 클라이언트 라이브러리 파일을 로드하고 액세스할 수 있으려면 PHP가 인식하는 위치에 파일을 넣어야 합니다. 또는 파일의 위치를 PHP 경로에 추가해야 합니다. php.ini 파일을 변경하려면 일반적으로 서버를 다시 시작해야 합니다. 앞서 설명한 PHP 정보 페이지로 이동하여 언제든지 include_path 변수의 현재 값을 확인할 수 있습니다. 첫 번째 표에서 Loaded Configuration File 셀을 찾아 오른쪽 열에서 경로를 확인합니다.

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

php.ini 파일을 찾았으면 다음 단계에 따라 경로에 추가하세요.

  1. 원하는 텍스트 편집기에서 php.ini 파일을 엽니다.
  2. PHP 경로를 참조하는 줄을 찾습니다. include_path로 시작해야 합니다.
  3. Zend Framework를 저장한 경로를 이미 있는 위치 목록에 추가하고 새 경로 앞에 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 처리 문제를 일으켜 잘못된 변환을 초래할 수 있습니다. 일부 개발자는 XAMPP를 사용할 때 DOMDocument 생성자가 PHP 사이트에 설명된 대로 이전 함수 호출로 재정의된다고 말합니다. 이 문제를 해결하려면 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일

Jochen Hartmann이 업데이트했습니다. 이번 업데이트에서 이루어진 변경내용은 다음과 같습니다.

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