Zend Framework の紹介

 Learning Zend Framework

appendix

 Zend Framework リファレンス


  • 第36章 Zend_Gdata
  • 第37章 Zend_Http
  • 第38章 Zend_InfoCard
  • 第39章 Zend_Json
  • 第40章 Zend_Layout
  • 第41章 Zend_Ldap
  • 第42章 Zend_Loader
  • 第43章 Zend_Locale
  • 第44章 Zend_Log
  • 第45章 Zend_Mail
  • 第46章 Zend_Markup
  • 第47章 Zend_Measure
  • 第48章 Zend_Memory
  • 第49章 Zend_Mime
  • 第50章 Zend_Navigation
  • 第51章 Zend_Oauth
  • 第52章 Zend_OpenId
  • 第53章 Zend_Paginator
  • 第54章 Zend_Pdf
  • 第55章 Zend_ProgressBar
  • 第56章 Zend_Queue
  • 第57章 Zend_Reflection
  • 第58章 Zend_Registry
  • 第59章 Zend_Rest

  • 第60章 Zend_Search_Lucene
  • 第61章 Zend_Serializer
  • 第62章 Zend_Server
  • 第63章 Zend_Service
  • 第64章 Zend_Session
  • 第65章 Zend_Soap
  • 第66章 Zend_Tag
  • 第67章 Zend_Test
  • 第68章 Zend_Text
  • 第69章 Zend_TimeSync
  • 第70章 Zend_Tool
  • 第71章 Zend_Tool_Framework
  • 第72章 Zend_Tool_Project
  • 第73章 Zend_Translate
  • 第74章 Zend_Uri
  • 第75章 Zend_Validate
  • 第76章 Zend_Version
  • 第77章 Zend_View
  • 第78章 Zend_Wildfire
  • 第79章 Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 70.6% Update 2010-11-28 - Revision 23415

    第36章 Zend_Gdata

    目次

    36.1. 導入
    36.1.1. Zend_Gdata の構造
    36.1.2. Google サービスの使用法
    36.1.3. Zend_Gdata クラスのインスタンスの取得
    36.1.4. Google Data クライアント認証
    36.1.5. 依存性
    36.1.6. 新しい Gdata クライアントの作成
    36.1.7. 共通のクエリパラメータ
    36.1.8. フィードの取得
    36.1.9. 複数ページのフィードの扱い方
    36.1.10. フィードやエントリ内のデータの操作
    36.1.11. エントリの更新
    36.1.12. Google サーバへのエントリの送信
    36.1.13. Google サーバからのデータの削除
    36.2. Authenticating with AuthSub
    36.2.1. Creating an AuthSub authenticated Http Client
    36.2.2. Revoking AuthSub authentication
    36.3. Using the Book Search Data API
    36.3.1. Authenticating to the Book Search service
    36.3.2. Searching for books
    36.3.2.1. Partner Co-Branded Search
    36.3.3. Using community features
    36.3.3.1. Adding a rating
    36.3.3.2. Reviews
    36.3.3.2.1. Adding a review
    36.3.3.2.2. Editing a review
    36.3.3.3. Labels
    36.3.3.3.1. Submitting a set of labels
    36.3.3.4. Retrieving annotations: reviews, ratings, and labels
    36.3.3.5. Deleting Annotations
    36.3.4. Book collections and My Library
    36.3.4.1. Retrieving books in a user's library
    36.3.4.1.1. Retrieving all books in a user's library
    36.3.4.1.2. Searching for books in a user's library
    36.3.4.2. Updating books in a user's library
    36.3.4.2.1. Adding a book to a library
    36.3.4.2.2. Removing a book from a library
    36.4. ClientLogin による認証
    36.4.1. ClientLogin 認証済みの Http クライアントの作成
    36.4.2. Http クライアントの ClientLogin 認証の解除
    36.5. Google Calendar の使用法
    36.5.1. Calendar サービスへの接続
    36.5.1.1. 認証
    36.5.1.2. サービスのインスタンスの作成
    36.5.2. カレンダーリストの取得
    36.5.3. イベントの取得
    36.5.3.1. クエリ
    36.5.3.2. 開始時刻順によるイベントの取得
    36.5.3.3. 指定した日付の範囲からのイベントの取得
    36.5.3.4. 全文検索によるイベントの取得
    36.5.3.5. 特定のイベントの取得
    36.5.4. イベントの作成
    36.5.4.1. 一度だけのイベントの作成
    36.5.4.2. イベントのスケジュールおよびリマインダー
    36.5.4.3. 繰り返し発生するイベントの作成
    36.5.4.4. QuickAdd の使用法
    36.5.5. イベントの変更
    36.5.6. イベントの削除
    36.5.7. イベントのコメントへのアクセス
    36.6. Google Documents List Data API の使用法
    36.6.1. ドキュメントの一覧の取得
    36.6.2. ドキュメントのアップロード
    36.6.3. ドキュメントのフィードの検索
    36.6.3.1. ワープロ文書の一覧の取得
    36.6.3.2. スプレッドシートの一覧の取得
    36.6.3.3. テキストクエリの実行
    36.7. Using Google Health
    36.7.1. Connect To The Health Service
    36.7.1.1. Authentication
    36.7.1.2. Create A Health Service Instance
    36.7.2. Profile Feed
    36.7.2.1. Send a Structured Query
    36.7.2.1.1. Query The Feed
    36.7.2.2. Iterate Through The Profile Entries
    36.7.3. Profile List Feed
    36.7.3.1. Query The Feed
    36.7.4. Sending Notices to the Register Feed
    36.7.4.1. Sending a notice
    36.8. Google Spreadsheets の使用法
    36.8.1. スプレッドシートの作成
    36.8.2. スプレッドシートの一覧の取得
    36.8.3. ワークシートの一覧の取得
    36.8.4. リストベースのフィードの扱い
    36.8.4.1. リストベースのフィードの取得
    36.8.4.2. 逆順での行の並べ替え
    36.8.4.3. 構造化問い合わせ
    36.8.4.4. 行の追加
    36.8.4.5. 行の編集
    36.8.4.6. 行の削除
    36.8.5. セルベースのフィードの扱い
    36.8.5.1. セルベースのフィードの取得
    36.8.5.2. セルの範囲の問い合わせ
    36.8.5.3. セルの内容の変更
    36.9. Google Apps Provisioning の使用法
    36.9.1. 現在のドメインの設定
    36.9.1.1. サービスクラスへのドメインの設定
    36.9.1.2. クエリクラスへのドメインの設定
    36.9.2. ユーザの操作
    36.9.2.1. ユーザアカウントの作成
    36.9.2.2. ユーザアカウントの取得
    36.9.2.3. ドメイン内のすべてのユーザの取得
    36.9.2.4. ユーザアカウントの更新
    36.9.2.4.1. ユーザのパスワードのリセット
    36.9.2.4.2. ユーザに強制的にパスワードを変更させる
    36.9.2.4.3. ユーザアカウントの凍結
    36.9.2.4.4. 管理者権限の付与
    36.9.2.5. ユーザアカウントの削除
    36.9.3. ニックネームの操作
    36.9.3.1. ニックネームの作成
    36.9.3.2. ニックネームの取得
    36.9.3.3. あるユーザのすべてのニックネームの取得
    36.9.3.4. ドメイン内のすべてのニックネームの取得
    36.9.3.5. ニックネームの削除
    36.9.4. Interacting with groups
    36.9.4.1. Creating a group
    36.9.4.2. Retrieving an individual group
    36.9.4.3. Retrieving all groups in a domain
    36.9.4.4. Deleting a group
    36.9.4.5. Updating a group
    36.9.4.6. Retrieving all groups to which a person is a member
    36.9.5. Interacting with group members
    36.9.5.1. Adding a member to a group
    36.9.5.2. Check to see if member belongs to group
    36.9.5.3. Removing a member from a group
    36.9.5.4. Retrieving the list of members to a group
    36.9.6. Interacting with group owners
    36.9.6.1. Adding an owner to a group
    36.9.6.2. Retrieving the list of the owner of a group
    36.9.6.3. Check to see if an email is the owner of a group
    36.9.6.4. Removing an owner from a group
    36.9.7. メーリングリストの操作
    36.9.7.1. メーリングリストの作成
    36.9.7.2. あるアカウントが購読しているすべてのメーリングリストの取得
    36.9.7.3. ドメイン内のすべてのメーリングリストの取得
    36.9.7.4. メーリングリストの削除
    36.9.8. メーリングリストの参加者の操作
    36.9.8.1. メーリングリストへの参加者の追加
    36.9.8.2. メーリングリストの参加者一覧の取得
    36.9.8.3. ある参加者のメーリングリストからの削除
    36.9.9. エラー処理
    36.10. Using Google Base
    36.10.1. Connect To The Base Service
    36.10.1.1. Authentication
    36.10.1.2. Create A Service Instance
    36.10.2. Retrieve Items
    36.10.2.1. Send a Structured Query
    36.10.2.1.1. Query Customer Items Feed
    36.10.2.1.2. Query Snippets Feed
    36.10.2.2. Iterate through the Items
    36.10.3. Insert, Update, and Delete Customer Items
    36.10.3.1. Insert an Item
    36.10.3.2. Modify an Item
    36.10.3.3. Delete an Item
    36.11. Picasa Web Albums の使用法
    36.11.1. サービスへの接続
    36.11.1.1. 認証
    36.11.1.2. サービスのインスタンスの作成
    36.11.2. クエリの仕組みと作成方法
    36.11.3. フィードやエントリの取得
    36.11.3.1. ユーザの取得
    36.11.3.2. アルバムの取得
    36.11.3.3. 写真の取得
    36.11.3.4. コメントの取得
    36.11.3.5. タグの取得
    36.11.4. エントリの作成
    36.11.4.1. アルバムの作成
    36.11.4.2. 写真の作成
    36.11.4.3. コメントの作成
    36.11.4.4. タグの作成
    36.11.5. エントリの削除
    36.11.5.1. アルバムの削除
    36.11.5.2. 写真の削除
    36.11.5.3. コメントの削除
    36.11.5.4. タグの削除
    36.11.5.5. 楽観的な同時並行性 (削除時の注意)
    36.12. YouTube Data API の使用法
    36.12.1. 認証
    36.12.2. Developer Keys および Client ID
    36.12.3. 公開動画フィードの取得
    36.12.3.1. メタデータによる動画の検索
    36.12.3.2. カテゴリやタグ/キーワードによる動画の検索
    36.12.3.3. 標準のフィード
    36.12.3.4. 指定したユーザがアップロードした動画の取得
    36.12.3.5. 指定したユーザのお気に入り動画の取得
    36.12.3.6. 動画に対する返信動画の取得
    36.12.4. 動画のコメントの取得
    36.12.5. プレイリストフィードの取得
    36.12.5.1. 指定したユーザのプレイリストの取得
    36.12.5.2. 指定したプレイリストの取得
    36.12.6. 指定したユーザの購読内容の一覧の取得
    36.12.7. ユーザのプロファイルの取得
    36.12.8. YouTube への動画のアップロード
    36.12.9. ブラウザベースのアップロード
    36.12.10. アップロード状況のチェック
    36.12.11. その他の関数
    36.13. Gdata の例外処理

    36.1. 導入

    Google Data API は、Google のオンラインサービスに対するプログラマ向けのインターフェイスです。 Google data Protocol は Atom Publishing Protocol に基づいており、クライアントアプリケーションからのデータの問い合わせ、 データの投稿、更新、削除などを標準の HTTP と Atom syndication formation で行います。 Zend_Gdata コンポーネントは PHP 5 用のインターフェイスで、Google Data に PHP からアクセスするためのものです。 Zend_Gdata コンポーネントは、Atom Publishing Protocol を実装したその他のサービスへのアクセスもサポートしています。

    Google Data API についての詳細な情報は http://code.google.com/apis/gdata/ を参照ください。

    Zend_Gdata でアクセスできるサービスには次のようなものがあります。

    • Google Calendar は、オンラインカレンダーアプリケーションです。

    • Google Spreadsheets は、オンラインで共同作業を行えるスプレッドシートツールです。 アプリケーションで使用するデータの保存場所としても使用できます。

    • Google Documents List は、その Google アカウントに保存されているすべてのスプレッドシートやワープロ文書、 プレゼンテーションの一覧を取得します。

    • Google Provisioning は、Google Apps がホストするドメイン上の ユーザアカウントやニックネーム、グループ、そしてメーリングリストの 作成、取得、更新、削除を行うものです。

    • Google Base は、Google Base のアイテムを取得したり アイテムを投稿、更新、あるいは削除したりできます。

    • YouTube は、動画やコメント、お気に入り、登録チャンネル、 ユーザのプロファイルといった情報を検索して取得できます。

    • Picasa Web Albums は、オンラインの写真共有アプリケーションです。

    • Google Blogger は、人気のあるインターネットプロバイダです。 "ボタンひとつで簡単に" 記事を配信できます。

    • Google CodeSearch を使用すると、さまざまなプロジェクトが公開しているソースコードを検索できます。

    • Google Notebook は、メモ帳の内容を一般に公開できます。

    [注意] サポートしていないサービス

    Zend_Gdata には、これら以外の Google のサービス (例えば検索、Gmail、翻訳、マップなど) に対するインターフェイスは含まれていません。 Google Data API をサポートしているサービスにのみ対応しています。

    36.1.1. Zend_Gdata の構造

    Zend_Gata は、いくつかの型のクラスを組み合わせたものです。

    • サービスクラス - これは Zend_Gdata_App を継承したものです。 Zend_GdataZend_Gdata_Spreadsheets といったその他のクラスもここに含まれます。 これらのクラスは APP や GData サービス とのやり取りを行うもので、 フィードを取得したりエントリを取得したり、 あるいはエントリを投稿したり更新したり削除したりといったことができます。

    • クエリクラス - これは Zend_Gdata_Query を継承したものです。 各サービス専用のクラス、たとえば Zend_Gdata_Spreadsheets_ListQueryZend_Gdata_Spreadsheets_CellQuery もここに含まれます。 クエリクラスは、GData サービスからデータを取得するためのクエリを作成するものです。 setUpdatedMin()setStartIndex()、そして getPublishedMin() といったメソッドが存在します。 クエリクラスには、出来上がったクエリの URL を生成するためのメソッド getQueryUrl もあります。 また、getQueryString() メソッドを使用すると、URL のクエリ文字列部分を取得できます。

    • フィードクラス - これは Zend_Gdata_App_Feed を継承したものです。 Zend_Gdata_FeedZend_Gdata_Spreadsheets_SpreadsheetFeedZend_Gdata_Spreadsheets_ListFeed といったその他のクラスもここに含まれます。 これらのクラスはサービスから取得したエントリのフィードを表すものです。 サービスから返されたデータを取得するために使用します。

    • エントリクラス - これは Zend_Gdata_App_Entry を継承したものです。 Zend_Gdata_EntryZend_Gdata_Spreadsheets_ListEntry といったその他のクラスもここに含まれます。 これらのクラスは、サービスから取得したエントリを表すものです。また、 サービスに送信するデータを作成するためにも用います。 エントリのプロパティの値(たとえばスプレッドシートのセルの値など) を設定できるだけでなく、このオブジェクトを使用して 既存エントリの更新や削除のリクエストを送信することもできます。 たとえば $entry->save() をコールすると、変更した内容を元のエントリに書き戻します。また $entry->delete() はそのエントリをサーバから削除します。

    • その他のデータモデルクラス - これは Zend_Gdata_App_Extension を継承したものです。ここには、 Zend_Gdata_App_Extension_Title (atom:title XML 要素を表します) や Zend_Gdata_Extension_When (GData Event "Kind" で使用する gd:when XML 要素を表します)、そして Zend_Gdata_Extension_Cell (Google Spreadsheets で使用する gs:cell XML 要素を表します) といったクラスが含まれます。 これらのクラスは、サービスから取得したデータを保存したり サービスに送信するデータを構築したりするために用いるものです。 プロパティへのアクセス用のメソッドが用意されています。たとえば setText() はその要素の子テキストノードの内容を設定し、 getText() はその要素のテキストノードの内容を取得します。 また getStartTime() は When 要素の開始時刻属性を取得します。 そのほかにも同様のメソッドがあります。 データモデルクラスには、その他のメソッドもあります。 getDOM() は、その要素とすべての子要素を DOM 形式で表したものを返し、 transferFromDOM() は DOM ツリーをもとにしたデータモデルを作成します。

    36.1.2. Google サービスの使用法

    Google データサービスは、Atom Publishing Protocol (APP) および Atom syndication format に基づいたサービスです。 Zend_Gdata コンポーネントを用いて APP や Google サービスを扱うには、Zend_Gdata_AppZend_Gdata そして Zend_Gdata_Spreadsheets などのサービスクラスを使用する必要があります。 サービスクラスには、サービスからデータのフィードを取得したり 新しいエントリをフィードに挿入したり 既存のエントリを更新したり削除したりといったメソッドがあります。

    注意: Zend_Gdata を用いた実際に動作するサンプルプログラムが demos/Zend/Gdata ディレクトリにあります。 このサンプルはコマンドラインで動かすように作られていますが、 ウェブアプリケーション版にも簡単に書き換えられるでしょう。

    36.1.3. Zend_Gdata クラスのインスタンスの取得

    Zend Framework の命名規約では、すべてのクラスは その存在位置のディレクトリ構造に基づいた名前をつける必要があります。 たとえば Spreadsheets に関する拡張クラスは Zend/Gdata/Spreadsheets/Extension/... 配下に置かれ、 その結果、クラス名は Zend_Gdata_Spreadsheets_Extension_... となります。ということは、スプレッドシートのセル要素のインスタンスを作成しようとしたら、 恐ろしく長い名前をタイプすることになるということです!

    ということで、すべてのサービスクラス (Zend_Gdata_AppZend_GdataZend_Gdata_Spreadsheets など) に特別なファクトリメソッドを用意するようにしました。 これを用いることで、データモデルやクエリ、 その他のクラスのインスタンスをより簡単に作成できるようになります。 このファクトリメソッドは、マジックメソッド __call を用いて実装しています。このメソッドで、 $service->newXXX(arg1, arg2, ...) というコールをすべて処理しています。 XXX の値に基づいて、登録されているすべての 'パッケージ' からクラスを探します。 以下に例を示します。

    $ss = new Zend_Gdata_Spreadsheets();

    // Zend_Gdata_App_Spreadsheets_CellEntry を作成します
    $entry $ss->newCellEntry();

    // Zend_Gdata_App_Spreadsheets_Extension_Cell を作成します
    $cell $ss->newCell();
    $cell->setText('My cell value');
    $cell->setRow('1');
    $cell->setColumn('3');
    $entry->cell $cell;

    // ... $entry を使用して、Google Spreadsheet の内容を更新します

    継承ツリー内にある各サービス用クラス内で、 適切な 'パッケージ' (ディレクトリ) を登録します。 ファクトリメソッドは、これを使用してクラスを探します。

    36.1.4. Google Data クライアント認証

    ほとんどの Google Data サービスは、 個人データへのアクセスやデータの保存、削除の前に Google サーバに対する認証を要求します。 Google Data の認証用に提供される実装は AuthSub および ClientLogin の二種類があります。 Zend_Gdata ではこれら両方の方式に対するインターフェイスを用意しています。

    Google Data サービスに対するその他大半の問い合わせは、 認証を必要としません。

    36.1.5. 依存性

    Zend_GdataZend_Http_Client を用いてリクエストを google.com に送信し、結果を取得します。 ほとんどの Google Data リクエストに対する応答は Zend_Gdata_App_Feed あるいは Zend_Gdata_App_Entry クラスのサブクラスで返されます。

    Zend_Gdata は、PHP アプリケーションの稼動しているホストが インターネットに直接つながっていることを想定しています。 Zend_Gdata クライアントは Google Data サーバへの接続を行います。

    36.1.6. 新しい Gdata クライアントの作成

    Zend_Gdata_App クラス、Zend_Gdata クラス、 あるいはそのサブクラスのひとつのオブジェクトを作成します。 各サブクラスではサービス固有のヘルパーメソッドを提供します。

    Zend_Gdata_App のコンストラクタに渡すオプションの引数は Zend_Http_Client のインスタンスです。このパラメータを渡さなかった場合は、 Zend_Gdata はデフォルトの Zend_Http_Client オブジェクトを作成します。 これには、プライベートフィードにアクセスするための認証データは設定されていません。 Zend_Http_Client オブジェクトを自分で指定すると、 クライアントオブジェクトに対する設定オプションを指定できます。

    $client = new Zend_Http_Client();
    $client->setConfig( ...オプション... );

    $gdata = new Zend_Gdata($client);

    Zend Framework 1.7 以降、プロトコルのバージョン管理のサポートが追加されました。 これにより、クライアントおよびサーバで新機能をサポートしつつ、 過去との互換性を保持できるようになります。 ほとんどのサービスはバージョン管理を自前で行う必要はありませんが、 Zend_Gdata のインスタンスを直接作成する場合 (サブクラスを使わない場合) は、必要なプロトコルのバージョンを指定してサーバの機能にアクセスする必要があります。

    $client = new Zend_Http_Client();
    $client->setConfig( ...オプション... );

    $gdata = new Zend_Gdata($client);
    $gdata->setMajorProtocolVersion(2);
    $gdata->setMinorProtocolVersion(null);

    認証済みの Zend_Http_Client オブジェクトを作成する方法については、 認証のセクションも参照ください。

    36.1.7. 共通のクエリパラメータ

    パラメータを指定することで、Zend_Gdata での問い合わせをカスタマイズできます。 クエリのパラメータは、 Zend_Gdata_Query のサブクラスを使用して指定します。 Zend_Gdata_Query クラスにはクエリパラメータを設定するメソッドが含まれ、 これを用いて GData サービスにアクセスします。 たとえば Spreadsheets のような個々のサービスでも クエリクラスを用意しており、そのサービスやフィードに合わせた独自のパラメータを定義しています。 Spreadsheets の CellQuery クラスは Cell Feed に対する問い合わせを行い、ListQuery クラスは List Feed に対する問い合わせを行います。 それぞれのフィードに対して別々のパラメータを指定できます。 GData 全体で使用できるパラメータについて、 以下で説明します。

    • q パラメータはテキストのクエリ文字列を指定します。 パラメータの値は文字列となります。

      このパラメータを設定するには setQuery() 関数を使用します。

    • alt パラメータはフィードの形式を指定します。 このパラメータには atomrssjson、 あるいは json-in-script のいずれかを指定します。 このパラメータを指定しなかった場合、デフォルトのフィードの形式は atom となります。 注意: Zend_Gdata で処理できるのは、 atom フィード形式の出力だけであることに注意しましょう。 Zend_Http_Client を使用するとその他の形式のフィードも取得できます。 その際は、Zend_Gdata_Query クラスやそのサブクラスが作成したクエリ URL を使用します。

      このパラメータを設定するには setAlt() 関数を使用します。

    • maxResults パラメータはフィード内のエントリ数を制限します。 整数値を指定します。返されるフィード内のエントリの数は、 この値を超えることはありません。

      このパラメータを設定するには setMaxResults() 関数を使用します。

    • startIndex パラメータは、 フィードで返される最初のエントリの番号を指定します。 それ以前の番号のエントリは読み飛ばされます。

      このパラメータを設定するには setStartIndex() 関数を使用します。

    • updatedMin パラメータおよび updatedMax パラメータは、エントリの日付の範囲を指定します。 updatedMin を指定すると、 それより前に更新されたエントリはフィードに含まれません。 同様に、updatedMax で指定した日付より後で更新されたエントリもフィードに含まれません。

      これらのパラメータには、タイムスタンプを表す数値を指定します。 あるいは 日付/時刻 を表す文字列を指定することもできます。

      これらのパラメータを設定するには setUpdatedMin() および setUpdatedMax() 関数を使用します。

    これらの set 関数に対応する get 関数もあります。

    $query = new Zend_Gdata_Query();
    $query->setMaxResults(10);
    echo 
    $query->getMaxResults();   // 10 を返します

    Zend_Gdata クラスでは、 特別なゲッターメソッドおよびセッターメソッドも実装しています。 つまり、パラメータの名前をクラスの仮想的なメンバとして扱うことができます。

    $query = new Zend_Gdata_Query();
    $query->maxResults 10;
    echo 
    $query->maxResults;        // 10 を返します

    すべてのパラメータを消去するには resetParameters() を使用します。複数のクエリで Zend_Gdata を使いまわす場合などに便利です。

    $query = new Zend_Gdata_Query();
    $query->maxResults 10;
    // ...フィードを取得します...

    $gdata->resetParameters();      // すべてのパラメータを消去します
    // ...別のフィードを取得します...

    36.1.8. フィードの取得

    getFeed() を使用して、指定した URI からフィードを取得します。 この関数は、getFeed の二番目の引数で指定したクラスのインスタンスを返します。 このクラスのデフォルトは Zend_Gdata_Feed です。

    $gdata = new Zend_Gdata();
    $query = new Zend_Gdata_Query(
            
    'http://www.blogger.com/feeds/blogID/posts/default');
    $query->setMaxResults(10);
    $feed $gdata->getFeed($query);

    この後の節で、各 Google Data サービス用のヘルパークラス固有の関数について説明します。これらの関数により、 対応するサービスにあわせた適切な URI からフィードを取得できるようになります。

    36.1.9. 複数ページのフィードの扱い方

    多くのエントリが含まれるフィードを取得した場合、 そのフィードはいくつかの「ページ」に分かれていることがあるかもしれません。 そのような場合には、各ページには次のページへのリンクが含まれることになります。 このリンクにアクセスするには getLink('next') を使用します。 この例は、フィードの次のページを取得する方法を示すものです。

    function getNextPage($feed) {
        
    $nextURL $feed->getLink('next');
        if (
    $nextURL !== null) {
            return 
    $gdata->getFeed($nextURL);
        } else {
            return 
    null;
        }
    }

    もしこのようにページに分かれているのが気に入らない場合は、 フィードの最初のページを Zend_Gdata_App::retrieveAllEntriesForFeed() に渡しましょう。そうすると、 すべてのエントリの内容をひとつのフィードにまとめてくれます。 この関数の使用法を、次の例で示します。

    $gdata = new Zend_Gdata();
    $query = new Zend_Gdata_Query(
            
    'http://www.blogger.com/feeds/blogID/posts/default');
    $feed $gdata->retrieveAllEntriesForFeed($gdata->getFeed($query));

    大きなフィードに対してこの関数をコールすると、 処理に時間がかかるということに注意しましょう。 set_time_limit()PHP の実行時間制限を拡大する必要があるかもしれません。

    36.1.10. フィードやエントリ内のデータの操作

    フィードを取得したら、次はそのデータを読み込んだり そこに含まれるエントリを読み込んだりする番です。 これには各データモデルクラスのアクセス用メソッドを使用するか、 あるいはマジックメソッドを使用します。以下に例を示します。

    $client Zend_Gdata_ClientLogin::getHttpClient($user$pass$service);
    $gdata = new Zend_Gdata($client);
    $query = new Zend_Gdata_Query(
            
    'http://www.blogger.com/feeds/blogID/posts/default');
    $query->setMaxResults(10);
    $feed $gdata->getFeed($query);
    foreach (
    $feed as $entry) {
        
    // マジックメソッドを使用します
        
    echo 'Title: ' $entry->title->text;
        
    // 定義されているアクセス用メソッドを使用します
        
    echo 'Content: ' $entry->getContent()->getText();
    }

    36.1.11. エントリの更新

    エントリを取得したら、それを更新してサーバに保存できます。以下に例を示します。

    $client Zend_Gdata_ClientLogin::getHttpClient($user$pass$service);
    $gdata = new Zend_Gdata($client);
    $query = new Zend_Gdata_Query(
            
    'http://www.blogger.com/feeds/blogID/posts/default');
    $query->setMaxResults(10);
    $feed $gdata->getFeed($query);
    foreach (
    $feed as $entry) {
        
    // タイトルに 'NEW' を追加します
        
    echo 'Old Title: ' $entry->title->text;
        
    $entry->title->text $entry->title->text ' NEW';

        
    // エントリの内容を更新します
        
    $newEntry $entry->save();
        echo 
    'New Title: ' $newEntry->title->text;
    }

    36.1.12. Google サーバへのエントリの送信

    Zend_Gdata オブジェクトの関数 insertEntry() にアップロードしたいデータを指定し、 新しいエントリを Google Data サービスに保存します。

    各サービス用のデータモデルクラスを使用して適切なエントリを作成し、 Google のサービスに投稿できます。 insertEntry() 関数には、 Zend_Gdata_App_Entry の子クラスに投稿内容を格納して渡します。 このメソッドは Zend_Gdata_App_Entry の子クラスを返します。 これは、サーバから返されたエントリの状態を表します。

    もうひとつの方法として、そのエントリの内容を XML 構造の文字列として作成して insertEntry() 関数に渡すこともできます。

    $gdata = new Zend_Gdata($authenticatedHttpClient);

    $entry $gdata->newEntry();
    $entry->title $gdata->newTitle('Playing football at the park');
    $content =
        
    $gdata->newContent('We will visit the park and play football');
    $content->setType('text');
    $entry->content $content;

    $entryResult $gdata->insertEntry($entry,
            
    'http://www.blogger.com/feeds/blogID/posts/default');

    echo 
    'この結果のエントリの <id> は、' $entryResult->id->text;

    エントリを送信するには、認証済みの Zend_Http_Client を使用する必要があります。これは、 Zend_Gdata_AuthSub クラスあるいは Zend_Gdata_ClientLogin クラスを使用して作成します。

    36.1.13. Google サーバからのデータの削除

    方法 1: Zend_Gdata オブジェクトの関数 delete() に削除したいエントリを指定して、Google Data サービスからデータを削除します。 フィードエントリの編集用 URLdelete() メソッドに渡します。

    方法 2: あるいは、Google サービスから取得したエントリに対して $entry->delete() をコールすることもできます。

    $gdata = new Zend_Gdata($authenticatedHttpClient);
    // Google Data のフィード
    $feedUri = ...;
    $feed $gdata->getFeed($feedUri);
    foreach (
    $feed as $feedEntry) {
        
    // 方法 1 - エントリを直接削除します
        
    $feedEntry->delete();
        
    // 方法 2 - 編集用 URL を $gdata->delete()
        // に渡してエントリを削除します
        // $gdata->delete($feedEntry->getEditLink()->href);
    }

    エントリを削除するには、認証済みの Zend_Http_Client を使用する必要があります。これは、 Zend_Gdata_AuthSub クラスあるいは Zend_Gdata_ClientLogin クラスを使用して作成します。

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...