<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 17175 -->
<!-- Reviewed: no -->
<sect1 id="zend.gdata.exception">
    <title>Attraper les exceptions Gdata</title>

    <para>
        La classe <classname>Zend_Gdata_App_Exception</classname> est la classe de base de
        toutes les exceptions envoyées par les composants Gdata.
    </para>

    <programlisting language="php"><![CDATA[
try {
    $client =
        Zend_Gdata_ClientLogin::getHttpClient($username, $password);
} catch(Zend_Gdata_App_Exception $ex) {
    // Affiche l'exception à l'utilisateur
    die($ex->getMessage());
}
]]></programlisting>

    <para>
        Voici les sous classes exception utilisées dans <classname>Zend_Gdata</classname>
        :<itemizedlist>
                <listitem>
                <para>
                    <classname>Zend_Gdata_App_AuthException</classname> indique que les
                    identifiants du compte utilisateur sont erronés.
                </para>
            </listitem>

            <listitem>
                <para>
                    <classname>Zend_Gdata_App_BadMethodCallException</classname> est levée
                    lorsque vous tentez d'utiliser une méthode sur un service qui ne l'implémente
                    pas. Par exemple, le service CodeSearch ne supporte pas la méthode
                    <methodname>post()</methodname>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <classname>Zend_Gdata_App_HttpException</classname> indique un échec de
                    requête <acronym>HTTP</acronym>. Cette exception vous donne le moyen de récupérer la réponse
                    <classname>Zend_Http_Response</classname> entière pour déterminer la cause
                    exacte de l'erreur, alors que <code>$e-&gt;getMessage()</code> ne montre pas
                    autant de détails.
                </para>
            </listitem>

            <listitem>
                <para>
                    <classname>Zend_Gdata_App_InvalidArgumentException</classname> est envoyée
                    lorsque l'application envoie une valeur non attendue. Par exemple spécifier la
                    visibilité d'un calendrier à "banane", ou récupérer le flux d'un blog Blogger
                    sans spécifier le nom du blog en question.
                </para>
            </listitem>

            <listitem>
                <para>
                    <classname>Zend_Gdata_App_CaptchaRequiredException</classname> est envoyée
                    lorsqu'une tentative de ClientLogin reçoit un challenge
                    <trademark>CAPTCHA</trademark> depuis le service d'authentification. Cette
                    exception contient un jeton ID et une <acronym>URL</acronym> vers une image
                    <trademark>CAPTCHA</trademark> . Cette image est un puzzle visuel qui devrait
                    être retournée à l'utilisateur du service. Après récupération de la réponse de
                    l'utilisateur, celle-ci peut être incluse lors du ClientLogin suivant.
                    L'utilisateur peut aussi alternativement être redirigé vers ce site : <ulink
                    url="https://www.google.com/accounts/DisplayUnlockCaptcha"></ulink>. De plus
                    amples informations peuvent être trouvées dans <link
                    linkend="zend.gdata.clientlogin">la documentation du ClientLogin</link>.
                </para>
            </listitem>
            </itemizedlist>
        </para>

    <para>
        Vous pouvez ainsi utiliser ces sous-classes d'exceptions pour les gérer chacune
        différemment. Référez vous à l'API pour savoir quel composant
        <classname>Zend_Gdata</classname> envoie quel type d'exception.
    </para>

    <programlisting language="php"><![CDATA[
try {
    $client =
        Zend_Gdata_ClientLogin::getHttpClient($username,
                                              $password,
                                              $service);
} catch(Zend_Gdata_App_AuthException $authEx) {
    // identifiants fournis incorrects
    // Vous pourriez par exemple offrir une
    // seconde chance à l'utilisateur ici
    ...
} catch(Zend_Gdata_App_HttpException $httpEx) {
    // les serveurs Google Data sont injoignables
    die($httpEx->getMessage);
}
]]></programlisting>
</sect1>