Google Data PHP クライアント ライブラリを使ってみる

警告: このページは、Google の古い API である Google Data API を対象としています。Google Data API ディレクトリに記載されている API のみを対象としており、その多くは新しい API に置き換えられています。特定の新しい API については、その新しい API のドキュメントをご覧ください。新しい API を使用してリクエストを承認する方法については、Google アカウントの認証と承認をご覧ください。

Google Data API チーム Jochen Hartmann
2008 年 10 月更新(原文: Daniel Holevoet)

はじめに

Google Data PHP クライアント ライブラリは、Google Data 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. 最新バージョンの PHP に対応する PHP インストーラ オプション(Windows バイナリ セクション内)を選択し、ダウンロードを許可します。
  2. インストーラを開き、インストール ウィザードの指示に沿って操作します。
  3. ウィザードのプロンプトが表示されたら、システムにインストールされているウェブサーバーを選択し、PHP で動作するようにサーバーを設定します。
  4. 上記の手順に沿ってインストールを確認します。

Mac OS X の場合

OS X には PHP が含まれていますが、使用する前に最新バージョンの PHP にアップグレードする必要があります。アップグレードするには、いくつかの無料バイナリ パッケージのいずれかをインストールするか、ご自身でコンパイルします。詳しくは、PHP のドキュメントの Mac OS X へのインストールをご覧ください。

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 クライアント ライブラリが含まれているため、インストールをスキップできます。ただし、最新バージョンのフレームワークを使用していることを確認することで、利用可能な最新の機能とバグ修正がすべて確実に得られるため、通常はこのフレームワークを使用することをおすすめします。

フレームワーク全体をダウンロードすると、Google データ クライアント ライブラリだけでなく、フレームワークの他の部分にもアクセスできます。クライアント ライブラリ自体は、完全な Zend Framework に含まれる他のいくつかのクラスを使用していますが、スタンドアロン ダウンロードにバンドルされているため、フレームワーク全体をダウンロードする必要はありません。

  1. Google データ クライアント ライブラリのファイルをダウンロードします。(そのページで「Google Data API」を検索します)。
  2. ダウンロードしたファイルを解凍します。4 つのサブディレクトリを作成する必要があります。
    • demos - サンプル アプリケーション
    • documentation - クライアント ライブラリ ファイルのドキュメント
    • library - 実際のクライアント ライブラリ ソースファイル。
    • tests - 自動テスト用の単体テストファイル。
  3. library フォルダのロケーションを PHP パスに追加します(次のセクションをご覧ください)。

クライアント ライブラリ ファイルにアクセスできるかどうかを確認する

最後のステップでは、プロジェクトを構築するディレクトリから PHP クライアント ライブラリ ファイルを参照し、インクルードできるようにします。これを行うには、PHP の構成ファイル(php.ini)で include_path 変数を設定します。include_path 変数には、Java の import ステートメントと同様に、外部クラス、ライブラリ、ファイルを現在のスクリプトに pull する require または include ステートメントを発行したときにディレクトリ検索の場所が含まれています。クライアント ライブラリ ファイルの場所を、すでに include_path に設定されている値に追加する必要があります。これは次の 2 つの方法で実現できます(それぞれ詳しくは後述します)。

  • コマンドラインから 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 マニュアルをご覧ください。

サーバーに対するシェルアクセス権がなく、set_include_path 関数を使用できる .htaccess ファイルを変更または作成できない場合は、なお、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)PHP クライアント ライブラリのディレクトリへの include_path 参照、(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 Framework サイトの API リファレンス ガイドでご確認ください。プルダウンから [Zend_Gdata] パッケージを選択します。

これで、コーディングを開始するための準備は完了です。優れたアプリケーションを作成する。結果をお待ちしております。

次のサービスの PHP デベロッパー ガイドが用意されています。

PHP クライアント ライブラリはオープンソース プロジェクトであるため、さらに多くの API のサポートが継続的に追加されています。各サービスには独自のサポート グループがあります。詳しくは、利用可能なサポート グループのよくある質問のページをご覧ください。

API 呼び出しのトラブルシューティングについては、ネットワーク トラフィック キャプチャ ツールを使用した API リクエストのデバッグGoogle Data API でのプロキシ サーバーの使用に関する記事をご覧ください。Linux に XAMPP をインストールするWindows に XAMPP をインストールするに関する社外向け記事もご覧ください。すべての記事に加えて、Google Data API ガイド ブログの PHP クライアント ライブラリに関する投稿もチェックしてください。

付録 A: php.ini 構成ファイルで PHP パスを編集する

PHP パスは、PHP が読み込み時に追加のライブラリを検索する際に検索する場所のリストを含む変数です。コンピュータまたはサーバーで Google データ PHP クライアント ライブラリ ファイルを読み込んで PHP でアクセスできるようにするには、PHP が認識している場所に配置する必要があります。または、ファイルの場所を PHP パスに追加する必要があります。通常、php.ini ファイルを変更すると、サーバーを再起動する必要があります。前述した PHP 情報ページinclude_path 変数の現在の値をいつでも確認できます。最初のテーブルで [Loaded File 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 ディレクトリなど)にはアクセスできません。そのため、vipico などのコマンドライン エディタを使用して編集するのが最も簡単な場合があります。これを行うには、pico /path/to/php.ini などのコマンドを使用します。

付録 B: コマンドラインからの PHP の使用

PHP バージョン 5 には、PHP で利用できるコマンドライン ユーティリティがあります。これは、「コマンドライン インタープリタ」の CLI と呼ばれます。このユーティリティを使用すると、コマンドラインから php スクリプトを実行できます。マシン上でローカルに PHP を実行していて、スクリプトをすばやくテストしたいときには、この方法が役立ちます。もちろん、このサーバーにはシェルアクセスが必要です。注意すべき重要な点として、PHP は通常、2 つの個別の php.ini ファイルを使用します。1 つはサーバーで実行される PHP の構成オプションであり、もう 1 つはコマンドラインから実行するときに 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 の使用時に、PHP サイトで説明されているように、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 日

更新: Jochen Hartmann。この改訂での変更内容は次のとおりです。

  • コマンドライン PHP を参照するセクションを付録に移動することで、ウェブサーバーの PHP 構成を明確にしました。
  • 複数の php.ini 構成ファイルに関する注記を追加しました。
  • include_path を動的に設定する方法のセクションを追加しました。
  • インストール チェッカー スクリプトにセクションを追加しました。
  • オンライン サンプルへのリンクを追加しました。
  • XAMPP と MAMP のリンクを追加しました。
  • 「ヒントとソリューション」の付録を追加しました。