<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 15743 -->
<sect1 id="zend.gdata.gapps">
    <title>Google Apps Provisioning の使用法</title>

    <para>
        Google Apps はドメイン管理者向けのサービスで、Google の提供する
        メールやカレンダー、Docs &amp; Spreadsheets
        などをユーザに使用させることができます。
        Provisioning API は、
        これらのサービスをプログラム上から設定するためのインターフェイスです。
        特に、この API を使用すると
        ユーザアカウントやニックネーム、メーリングリストなどの追加、取得、
        更新、削除ができるようになります。
    </para>

    <para>
        このライブラリは Provisioning API バージョン 2.0 を実装しています。
        Provisioning API であなたのアカウントにアクセスできるようにするには、
        Google Apps コントロールパネル上で手動で有効にする必要があります。
        この機能を利用できるのは、特定の種別のアカウントだけに限られます。
    </para>

    <para>
        Google Apps Provisioning API の使用法や
        API にアクセスできるようにするための方法については <ulink
        url="http://code.google.com/apis/calendar/overview.html">Provisioning
        API V2.0 Reference</ulink> を参照ください。
    </para>

    <note>
        <title>認証</title>
        <para>
            Provisioning API は AuthSub による認証をサポートしておらず、
            匿名でのアクセスはできません。すべての HTTP 接続は
            ClientAuth で認証を済ませている必要があります。
            </para>
    </note>

    <sect2 id="zend.gdata.gapps.domain">
        <title>現在のドメインの設定</title>

        <para>
            Provisioning API を使用するには、
            すべてのリクエスト URI で対象のドメインを指定する必要があります。
            開発を楽に進めるために、この情報は Gapps
            サービスクラスとクエリクラスの両方で保持するようにしています。
        </para>

        <sect3 id="zend.gdata.gapps.domain.service">
            <title>サービスクラスへのドメインの設定</title>

            <para>
                リクエスト対象のドメインをサービスクラスに設定するには、
                <code>setDomain()</code> をコールするか、
                あるいはサービスクラスのインスタンスの作成時に指定します。
                たとえば次のようになります。
            </para>

            <programlisting language="php"><![CDATA[
$domain = "example.com";
$gdata = new Zend_Gdata_Gapps($client, $domain);
]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.domain.query">
            <title>クエリクラスへのドメインの設定</title>

            <para>
                リクエスト対象のドメインをクエリクラスに設定する方法は、
                サービスクラスの場合と同じです。
                <code>setDomain()</code> をコールするか、
                あるいはクエリの作成時に指定します。
                たとえば次のようになります。
            </para>

            <programlisting language="php"><![CDATA[
$domain = "example.com";
$query = new Zend_Gdata_Gapps_UserQuery($domain, $arg);
]]></programlisting>

            <para>
                サービスクラスのファクトリメソッドでクエリを作成する際は、
                サービスクラスが自動的にクエリクラスのドメインを設定します。
                したがってこの場合は、
                コンストラクタの引数でドメインを指定する必要がなくなります。
            </para>

            <programlisting language="php"><![CDATA[
$domain = "example.com";
$gdata = new Zend_Gdata_Gapps($client, $domain);
$query = $gdata->newUserQuery($arg);
]]></programlisting>

        </sect3>

    </sect2>

    <sect2 id="zend.gdata.gapps.users">
        <title>ユーザの操作</title>

        <para>
            Google Apps がホストするドメイン上のユーザアカウントは、
            <classname>Zend_Gdata_Gapps_UserEntry</classname> のインスタンスで表されます。
            このクラスを使用すると、
            アカウント名やユーザ名、パスワード、アクセス権限、
            そして容量制限などすべての情報にアクセスできるようになります。
        </para>

        <sect3 id="zend.gdata.gapps.users.creating">
            <title>ユーザアカウントの作成</title>

            <para>
                ユーザアカウントを作成するには、
                <code>createUser()</code> メソッドを使用します。
            </para>

            <programlisting language="php"><![CDATA[
$gdata->createUser('foo', 'Random', 'User', '••••••••');
]]></programlisting>

            <para>
                あるいは UserEntry のインスタンスから作成することもできます。
                作成したインスタンスに対してユーザ名や姓、名、パスワードを設定し、
                サービスオブジェクトの <code>insertUser()</code>
                をコールすることでそのエントリをサーバにアップロードします。
            </para>

            <programlisting language="php"><![CDATA[
$user = $gdata->newUserEntry();
$user->login = $gdata->newLogin();
$user->login->username = 'foo';
$user->login->password = '••••••••';
$user->name = $gdata->newName();
$user->name->givenName = 'Random';
$user->name->familyName = 'User';
$user = $gdata->insertUser($user);
]]></programlisting>

            <para>
                ユーザのパスワードは、通常はプレーンテキストで指定しなければなりません。
                <code>login->passwordHashFunction</code> を 'SHA-1'
                に設定した場合は、パスワードを SHA-1 ダイジェスト形式で指定することもできます。
            </para>

        </sect3>

        <sect3 id="zend.gdata.gapps.users.retrieving">
            <title>ユーザアカウントの取得</title>

            <para>
                各ユーザアカウントを取得するには
                <code>retrieveUser()</code> メソッドをコールします。
                ユーザが見つからない場合は
                <constant>NULL</constant> が返されます。
            </para>

            <programlisting language="php"><![CDATA[
$user = $gdata->retrieveUser('foo');

echo 'ユーザ名: ' . $user->login->userName . "\n";
echo '名前: ' . $user->login->givenName . "\n";
echo '苗字: ' . $user->login->familyName . "\n";
echo '凍結中？: ' . ($user->login->suspended ? 'Yes' : 'No') . "\n";
echo '管理者？: ' . ($user->login->admin ? 'Yes' : 'No') . "\n"
echo 'パスワードの変更が必要？: ' .
     ($user->login->changePasswordAtNextLogin ? 'Yes' : 'No') . "\n";
echo '規約に同意した？: ' .
     ($user->login->agreedToTerms ? 'Yes' : 'No') . "\n";
]]></programlisting>

            <para>
                もうひとつの方法は、まず
                <classname>Zend_Gdata_Gapps_UserQuery</classname> のインスタンスを作成して
                username プロパティを (取得したいユーザのユーザ名に)
                設定し、サービスオブジェクトの
                <code>getUserEntry()</code> をコールするものです。
            </para>

            <programlisting language="php"><![CDATA[
$query = $gdata->newUserQuery('foo');
$user = $gdata->getUserEntry($query);

echo 'ユーザ名: ' . $user->login->userName . "\n";
echo '名前: ' . $user->login->givenName . "\n";
echo '苗字: ' . $user->login->familyName . "\n";
echo '凍結中？: ' . ($user->login->suspended ? 'Yes' : 'No') . "\n";
echo '管理者？: ' . ($user->login->admin ? 'Yes' : 'No') . "\n"
echo 'パスワードの変更が必要？: ' .
     ($user->login->changePasswordAtNextLogin ? 'Yes' : 'No') . "\n";
echo '規約に同意した？: ' .
     ($user->login->agreedToTerms ? 'Yes' : 'No') . "\n";
]]></programlisting>

            <para>
                指定したユーザが発見できない場合は ServiceException
                がスローされ、エラーコード
                <classname>Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST</classname>
                を返します。ServiceExceptions については <xref
                linkend="zend.gdata.gapps.exceptions" />
                を参照ください。
            </para>

        </sect3>

        <sect3 id="zend.gdata.gapps.users.retrievingAll">
            <title>ドメイン内のすべてのユーザの取得</title>

            <para>
                ドメイン内のすべてのユーザを取得するには、
                <code>retrieveAllUsers()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->retrieveAllUsers();

foreach ($feed as $user) {
    echo "  * " . $user->login->username . ' (' . $user->name->givenName .
        ' ' . $user->name->familyName . ")\n";
}
]]></programlisting>

            <para>
                これは <classname>Zend_Gdata_Gapps_UserFeed</classname> オブジェクトを作成します。
                このオブジェクトは、ドメイン上の各ユーザの情報を保持しています。
            </para>

            <para>
                あるいは、何もオプションを指定せずに
                <code>getUserFeed()</code> をコールする方法もあります。
                大きなドメインでは、このフィードが
                サーバ側で複数ページに分割される可能性があることに注意しましょう。
                ページ分割についての詳細は <xref
                linkend="zend.gdata.introduction.paging" />
                を参照ください。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->getUserFeed();

foreach ($feed as $user) {
    echo "  * " . $user->login->username . ' (' . $user->name->givenName .
        ' ' . $user->name->familyName . ")\n";
}

]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.users.updating">
            <title>ユーザアカウントの更新</title>

            <para>
                ユーザアカウントを更新するいちばん簡単な方法は、
                まず先ほどの方法でユーザを取得し、
                必要な箇所を変更し、最後にそのユーザの
                <code>save()</code> をコールするというものです。
                これにより、変更内容がサーバに反映されます。
            </para>

            <programlisting language="php"><![CDATA[
$user = $gdata->retrieveUser('foo');
$user->name->givenName = 'Foo';
$user->name->familyName = 'Bar';
$user = $user->save();
]]></programlisting>

            <sect4 id="zend.gdata.gapps.users.updating.resettingPassword">
                <title>ユーザのパスワードのリセット</title>

                <para>
                    ユーザのパスワードをリセットして新しい値を設定するには、
                    <code>login->password</code> プロパティを変更します。
                </para>

                <programlisting language="php"><![CDATA[
$user = $gdata->retrieveUser('foo');
$user->login->password = '••••••••';
$user = $user->save();
]]></programlisting>

                <para>
                    現在のパスワードをこの方式で取得することはできません。
                    セキュリティ上の理由により、Provisioning API
                    では現在のパスワードを取得できないようになっているからです。
                </para>

            </sect4>

            <sect4 id="zend.gdata.gapps.users.updating.forcingPasswordChange">
                <title>ユーザに強制的にパスワードを変更させる</title>

                <para>
                    次にログインしたときに強制的にパスワードを変更させるようにするには、
                    <code>login->changePasswordAtNextLogin</code>
                    を <constant>TRUE</constant> に設定します。
                </para>

                <programlisting language="php"><![CDATA[
$user = $gdata->retrieveUser('foo');
$user->login->changePasswordAtNextLogin = true;
$user = $user->save();
]]></programlisting>

                <para>
                    同様に、強制しないようにするなら
                    <code>login->changePasswordAtNextLogin</code>
                    を <constant>FALSE</constant> に設定します。
                </para>

            </sect4>

            <sect4 id="zend.gdata.gapps.users.updating.suspendingAccount">
                <title>ユーザアカウントの凍結</title>

                <para>
                    ユーザのログインを制限したいがアカウント自体は残しておきたいという場合は、
                    そのアカウントを<emphasis>凍結</emphasis>します。
                    アカウントを凍結したり凍結を解除したりするには
                    <code>suspendUser()</code> メソッドおよび
                    <code>restoreUser()</code> メソッドを使用します。
                </para>

                <programlisting language="php"><![CDATA[
$gdata->suspendUser('foo');
$gdata->restoreUser('foo');
]]></programlisting>

                <para>
                    あるいは、UserEntry のプロパティ
                    <code>login->suspended</code>
                    を <constant>TRUE</constant> に設定します。
                </para>

                <programlisting language="php"><![CDATA[
$user = $gdata->retrieveUser('foo');
$user->login->suspended = true;
$user = $user->save();
]]></programlisting>

                <para>
                    アクセス制限を解除するには、同様に
                    <code>login->suspended</code>
                    を <constant>FALSE</constant> に設定します。
                </para>

            </sect4>

            <sect4 id="zend.gdata.gapps.users.updating.grantingAdminRights">
                <title>管理者権限の付与</title>

                <para>
                    ユーザに対してドメインの管理者権限を付与するには、プロパティ
                    <code>login->admin</code> を
                    <constant>TRUE</constant> に設定します。
                </para>

                <programlisting language="php"><![CDATA[
$user = $gdata->retrieveUser('foo');
$user->login->admin = true;
$user = $user->save();
]]></programlisting>

                <para>
                    だいたい予想はつくでしょうが、
                    <code>login->admin</code> プロパティを
                    <constant>FALSE</constant> に設定すれば管理者権限を剥奪することができます。
                </para>

            </sect4>

        </sect3>

        <sect3 id="zend.gdata.gapps.users.deleting">
            <title>ユーザアカウントの削除</title>

            <para>
                ユーザアカウントを削除するには、単純に UserEntry
                の <code>delete()</code> をコールするだけです。
            </para>

            <programlisting language="php"><![CDATA[
$user = $gdata->retrieveUser('foo');
$user->delete();
]]></programlisting>

            <para>
                そのアカウントの UserEntry オブジェクトが手元にないのなら、
                <code>deleteUser()</code> メソッドを使用します。
            </para>

            <programlisting language="php"><![CDATA[
$gdata->deleteUser('foo');
]]></programlisting>

        </sect3>

    </sect2>

    <sect2 id="zend.gdata.gapps.nicknames">
        <title>ニックネームの操作</title>

        <para>
            ニックネームは、既存のユーザのメールアドレスのエイリアスとなります。
            ニックネームには、name と owner のふたつのプロパティがあります。
            あるニックネームあてに送信されたメールは、
            そのニックネームの持ち主であるユーザに転送されます。
        </para>

        <para>
            ニックネームは
            <classname>Zend_Gdata_Gapps_NicknameEntry</classname>
            のインスタンスで表されます。
        </para>

        <sect3 id="zend.gdata.gapps.nicknames.creating">
            <title>ニックネームの作成</title>

            <para>
                ニックネームを作成するには
                <code>createNickname()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$gdata->createNickname('foo', 'bar');
]]></programlisting>

            <para>
                あるいは NicknameEntry のインスタンスから作成することもできます。
                作成したインスタンスに対して名前と所有者を設定し、
                サービスオブジェクトの <code>insertNickname()</code>
                をコールすることでそのエントリをサーバにアップロードします。
            </para>

            <programlisting language="php"><![CDATA[
$nickname = $gdata->newNicknameEntry();
$nickname->login = $gdata->newLogin('foo');
$nickname->nickname = $gdata->newNickname('bar');
$nickname = $gdata->insertNickname($nickname);
]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.nicknames.retrieving">
            <title>ニックネームの取得</title>

            <para>
                ニックネームを取得するには
                <code>retrieveNickname()</code> メソッドをコールします。
                ユーザが見つからない場合は
                <constant>NULL</constant> が返されます。
            </para>

            <programlisting language="php"><![CDATA[
$nickname = $gdata->retrieveNickname('bar');

echo 'ニックネーム: ' . $nickname->nickname->name . "\n";
echo '所有者: ' . $nickname->login->username . "\n";
]]></programlisting>

            <para>
                もうひとつの方法は、まず
                <classname>Zend_Gdata_Gapps_NicknameQuery</classname> のインスタンスを作成して
                nickname プロパティを (取得したいニックネームに)
                設定し、サービスオブジェクトの
                <code>getNicknameEntry()</code> をコールするものです。
            </para>

            <programlisting language="php"><![CDATA[
$query = $gdata->newNicknameQuery('bar');
$nickname = $gdata->getNicknameEntry($query);

echo 'ニックネーム: ' . $nickname->nickname->name . "\n";
echo '所有者: ' . $nickname->login->username . "\n";
]]></programlisting>

            <para>
                ユーザの場合と同様、指定したニックネームが発見できない場合は
                ServiceException がスローされ、エラーコード
                <classname>Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST</classname>
                を返します。ServiceExceptions については <xref
                linkend="zend.gdata.gapps.exceptions" />
                を参照ください。
            </para>

        </sect3>

        <sect3 id="zend.gdata.gapps.nicknames.retrievingUser">
            <title>あるユーザのすべてのニックネームの取得</title>

            <para>
                指定したユーザのすべてのニックネームを取得するには、
                <code>retrieveNicknames()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->retrieveNicknames('foo');

foreach ($feed as $nickname) {
    echo '  * ' . $nickname->nickname->name . "\n";
}
]]></programlisting>

            <para>
                これは <classname>Zend_Gdata_Gapps_NicknameFeed</classname> オブジェクトを作成します。
                このオブジェクトは、指定したユーザのニックネームに関する情報を保持します。
            </para>

            <para>
                あるいは、新しい <classname>Zend_Gdata_Gapps_NicknameQuery</classname>
                を作成して username プロパティをそのユーザに設定し、
                サービスオブジェクトの <code>getNicknameFeed()</code>
                をコールすることもできます。
            </para>

            <programlisting language="php"><![CDATA[
$query = $gdata->newNicknameQuery();
$query->setUsername('foo');
$feed = $gdata->getNicknameFeed($query);

foreach ($feed as $nickname) {
    echo '  * ' . $nickname->nickname->name . "\n";
}
]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.nicknames.retrievingAll">
            <title>ドメイン内のすべてのニックネームの取得</title>
            <para>
                フィード内のすべてのニックネームを取得するには、
                <code>retrieveAllNicknames()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->retrieveAllNicknames();

foreach ($feed as $nickname) {
    echo '  * ' . $nickname->nickname->name . ' => ' .
        $nickname->login->username . "\n";
}
]]></programlisting>

            <para>
                これは <classname>Zend_Gdata_Gapps_NicknameFeed</classname> オブジェクトを作成します。
                このオブジェクトは、ドメイン上の各ニックネームの情報を保持しています。
            </para>

            <para>
                あるいは、サービスオブジェクトの <code>getNicknameFeed()</code>
                を引数なしでコールする方法もあります。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->getNicknameFeed();

foreach ($feed as $nickname) {
    echo '  * ' . $nickname->nickname->name . ' => ' .
        $nickname->login->username . "\n";
}
]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.nicknames.deleting">
            <title>ニックネームの削除</title>

            <para>
                ニックネームを削除するには、単純に NicknameEntry
                の <code>delete()</code> をコールするだけです。
            </para>

            <programlisting language="php"><![CDATA[
$nickname = $gdata->retrieveNickname('bar');
$nickname->delete();
]]></programlisting>

            <para>
                そのニックネームの NicknameEntry オブジェクトが手元にないのなら、
                <code>deleteNickname()</code> メソッドを使用します。
            </para>

            <programlisting language="php"><![CDATA[
$gdata->deleteNickname('bar');
]]></programlisting>

        </sect3>

    </sect2>

    <sect2 id="zend.gdata.gapps.emailLists">
        <title>メーリングリストの操作</title>

        <para>
            メーリングリストは、複数のユーザのメールアドレスを
            ひとつのメールアドレスに対応させるものです。
            このドメインのメンバー以外であっても、
            メーリングリストに参加することができます。
        </para>

        <para>
            ドメイン上のメーリングリストの情報は、
            <classname>Zend_Gdata_Gapps_EmailListEntry</classname> のインスタンスとして表されます。
        </para>

        <sect3 id="zend.gdata.gapps.emailLists.creating">
            <title>メーリングリストの作成</title>

            <para>
                メーリングリストを作成するには
                <code>createEmailList()</code> メソッドを使用します。
            </para>

            <programlisting language="php"><![CDATA[
$gdata->createEmailList('friends');
]]></programlisting>

            <para>
                あるいは EmailListEntry のインスタンスから作成することもできます。
                作成したインスタンスに対してメーリングリストの名前を設定し、
                サービスオブジェクトの <code>insertEmailList()</code>
                をコールすることでそのエントリをサーバにアップロードします。
            </para>

            <programlisting language="php"><![CDATA[
$list = $gdata->newEmailListEntry();
$list->emailList = $gdata->newEmailList('friends');
$list = $gdata->insertEmailList($list);
]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.emailList.retrieve">
            <title>あるアカウントが購読しているすべてのメーリングリストの取得</title>

            <para>
                特定の参加者が購読しているすべてのメーリングリストを取得するには
                <code>retrieveEmailLists()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->retrieveEmailLists('baz@somewhere.com');

foreach ($feed as $list) {
    echo '  * ' . $list->emailList->name . "\n";
}
]]></programlisting>

            <para>
                これは <classname>Zend_Gdata_Gapps_EmailListFeed</classname> オブジェクトを作成します。
                このオブジェクトは、指定した参加者に関連するメーリングリストの情報を保持します。
            </para>

            <para>
                あるいは、新しい <classname>Zend_Gdata_Gapps_EmailListQuery</classname>
                を作成して recipient プロパティをそのメールアドレスに設定し、
                サービスオブジェクトの <code>getEmailListFeed()</code>
                をコールすることもできます。
            </para>

            <programlisting language="php"><![CDATA[
$query = $gdata->newEmailListQuery();
$query->setRecipient('baz@somewhere.com');
$feed = $gdata->getEmailListFeed($query);

foreach ($feed as $list) {
    echo '  * ' . $list->emailList->name . "\n";
}
]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.emailLists.retrievingAll">
            <title>ドメイン内のすべてのメーリングリストの取得</title>

            <para>
                ドメイン内のすべてのメーリングリストを取得するには
                <code>retrieveAllEmailLists()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->retrieveAllEmailLists();

foreach ($feed as $list) {
    echo '  * ' . $list->emailList->name . "\n";
}
]]></programlisting>

            <para>
                これは <classname>Zend_Gdata_Gapps_EmailListFeed</classname> オブジェクトを作成します。
                このオブジェクトは、ドメイン上の各メーリングリストに関する情報を保持します。
            </para>

            <para>
                あるいは、サービスオブジェクトの <code>getEmailListFeed()</code>
                を引数なしでコールする方法もあります。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->getEmailListFeed();

foreach ($feed as $list) {
    echo '  * ' . $list->emailList->name . "\n";
}
]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.emailList.deleting">
            <title>メーリングリストの削除</title>

            <para>
                メーリングリストを削除するには
                deleteEmailList() メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$gdata->deleteEmailList('friends');
]]></programlisting>

        </sect3>

    </sect2>

    <sect2 id="zend.gdata.gapps.emailListRecipients">
        <title>メーリングリストの参加者の操作</title>

        <para>
            メーリングリストの各参加者は、
            <classname>Zend_Gdata_Gapps_EmailListRecipient</classname> のインスタンスとして表されます。
            このクラスを使用すると、メーリングリストにメンバーを追加したり、
            そこからメンバーを削除したりすることができます。
        </para>

        <sect3 id="zend.gdata.gapps.emailListRecipients.adding">
            <title>メーリングリストへの参加者の追加</title>

            <para>
                メーリングリストにメンバーを追加するには
                <code>addRecipientToEmailList()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$gdata->addRecipientToEmailList('bar@somewhere.com', 'friends');
]]></programlisting>

        </sect3>

        <sect3 id="zend.gdata.gapps.emailListRecipients.retrieving">
            <title>メーリングリストの参加者一覧の取得</title>

            <para>
                <code>retrieveAllRecipients()</code>
                メソッドを使用すると、メーリングリストの参加者一覧を取得できます。
            </para>

            <programlisting language="php"><![CDATA[
$feed = $gdata->retrieveAllRecipients('friends');

foreach ($feed as $recipient) {
    echo '  * ' . $recipient->who->email . "\n";
}
]]></programlisting>

            <para>
                あるいは、新しい EmailListRecipientQuery
                を作成して emailListName プロパティをそのメーリングリストに設定し、
                サービスオブジェクトの <code>getEmailListRecipientFeed()</code>
                をコールすることもできます。
            </para>

            <programlisting language="php"><![CDATA[
$query = $gdata->newEmailListRecipientQuery();
$query->setEmailListName('friends');
$feed = $gdata->getEmailListRecipientFeed($query);

foreach ($feed as $recipient) {
    echo '  * ' . $recipient->who->email . "\n";
}
]]></programlisting>

            <para>
                これは <classname>Zend_Gdata_Gapps_EmailListRecipientFeed</classname> オブジェクトを作成します。
                このオブジェクトは、指定したメーリングリストの各参加者に関する情報を保持します。
            </para>

        </sect3>

        <sect3 id="zend.gdata.gapps.emailListRecipients.removing">
            <title>ある参加者のメーリングリストからの削除</title>

            <para>
                メーリングリストからメンバーを削除するには
                <code>removeRecipientFromEmailList()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
$gdata->removeRecipientFromEmailList('baz@somewhere.com', 'friends');
]]></programlisting>

        </sect3>

    </sect2>

    <sect2 id="zend.gdata.gapps.exceptions">
        <title>エラー処理</title>

        <para>
            <classname>Zend_Gdata</classname> が標準でスローする例外に加えて、
            Provisioning API によるリクエストでは
            <classname>Zend_Gdata_Gapps_ServiceException</classname>
            がスローされる可能性があります。これらの例外は、
            API 固有のエラーが原因でリクエストが失敗したことを表します。
        </para>

        <para>
            ServiceException のインスタンスには、
            ひとつあるいは複数の Error オブジェクトが含まれます。
            これらのオブジェクトにはエラーコードとエラーの原因、そして
            (オプションで) その例外を引き起こした入力が含まれます。
            エラーコードの完全な一覧は、Zend Framework API
            ドキュメントで <classname>Zend_Gdata_Gapps_Error</classname> の部分を参照ください。
            さらに、正式なエラーの一覧は <ulink
            url="http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html#appendix_d">Google
            Apps Provisioning API V2.0 Reference: Appendix D</ulink>
            で見ることができます。
        </para>

        <para>
            ServiceException に含まれるすべてのエラーの一覧は
            <code>getErrors()</code> で配列として取得できますが、
            特定のエラーが発生したのかどうかだけを知りたいこともあります。
            そのような場合には <code>hasError()</code> をコールします。
        </para>

        <para>
            以下の例は、
            リクエストしたリソースが存在しなかった場合を検出し、
            適切に処理するものです。
        </para>

        <programlisting language="php"><![CDATA[
function retrieveUser ($username) {
    $query = $gdata->newUserQuery($username);
    try {
        $user = $gdata->getUserEntry($query);
    } catch (Zend_Gdata_Gapps_ServiceException $e) {
        // ユーザが見つからなかった場合は null を設定します
        if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
            $user = null;
        } else {
            throw $e;
        }
    }
    return $user;
}
]]></programlisting>

    </sect2>

</sect1>
