Zend_Gdata_Exception.xml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 24249 -->
  4. <sect1 id="zend.gdata.exception">
  5. <title>Gdata の例外処理</title>
  6. <para>
  7. <classname>Zend_Gdata_App_Exception</classname> は、
  8. <classname>Zend_Gdata</classname> がスローする例外の基底クラスです。
  9. <code>Zedn_Gdata</code> がスローする例外は、すべて <classname>Zend_Gdata_App_Exception</classname> でキャッチできます。
  10. </para>
  11. <programlisting language="php"><![CDATA[
  12. try {
  13. $client =
  14. Zend_Gdata_ClientLogin::getHttpClient($username, $password);
  15. } catch(Zend_Gdata_App_Exception $ex) {
  16. // 例外の内容をユーザに報告します
  17. die($ex->getMessage());
  18. }
  19. ]]></programlisting>
  20. <para>
  21. <classname>Zend_Gdata</classname> では、以下のような例外サブクラスを使用しています。
  22. <itemizedlist>
  23. <listitem>
  24. <para>
  25. <classname>Zend_Gdata_App_AuthException</classname>
  26. は、ユーザのアカウントの情報が無効であることを表します。
  27. </para>
  28. </listitem>
  29. <listitem>
  30. <para>
  31. <classname>Zend_Gdata_App_BadMethodCallException</classname>
  32. は、そのサービスがサポートしていないメソッドをコールしたことを表します。
  33. たとえば、CodeSearch サービスは <methodname>post()</methodname>
  34. をサポートしていません。
  35. </para>
  36. </listitem>
  37. <listitem>
  38. <para>
  39. <classname>Zend_Gdata_App_HttpException</classname>
  40. は、<acronym>HTTP</acronym> リクエストが失敗したことを表します。
  41. <classname>Zend_Http_Response</classname> オブジェクトの中身を調べることで、
  42. 実際の原因がわかります。この場合は
  43. <command>$e->getMessage()</command> の情報だけでは不十分です。
  44. </para>
  45. </listitem>
  46. <listitem>
  47. <para>
  48. <classname>Zend_Gdata_App_InvalidArgumentException</classname>
  49. は、その状況では無効な値を指定したことを表します。
  50. たとえば、カレンダーの可視性に "banana"
  51. を指定したり、blog の名前を省略して Blogger のフィードを取得したりといった場合です。
  52. </para>
  53. </listitem>
  54. <listitem>
  55. <para>
  56. <classname>Zend_Gdata_App_CaptchaRequiredException</classname>
  57. は、ClientLogin を試みた際に認証サービスから
  58. <trademark>CAPTCHA</trademark> チャレンジを受け取った場合にスローされます。
  59. この例外の中には、トークン ID および
  60. <trademark>CAPTCHA</trademark> チャレンジ画像への <acronym>URL</acronym>
  61. が含まれています。この画像はパズルのようなもので、
  62. これをユーザに対して表示させる必要があります。
  63. チャレンジ画像に対するユーザからの応答を受け取ったら、
  64. それを用いて再度 ClientLogin を試みることができます。
  65. あるいは、ユーザが直接
  66. <ulink url="https://www.google.com/accounts/DisplayUnlockCaptcha"/>
  67. を使用することもできます。詳細な情報は
  68. <link linkend="zend.gdata.clientlogin">ClientLogin のドキュメント</link>
  69. を参照ください。
  70. </para>
  71. </listitem>
  72. </itemizedlist>
  73. </para>
  74. <para>
  75. これらの例外サブクラスを使用すると、より細やかな例外処理を行なえます。
  76. どの <classname>Zend_Gdata</classname> のメソッドがどんな例外サブクラスをスローするのかについては、
  77. <acronym>API</acronym> ドキュメントを参照ください。
  78. </para>
  79. <programlisting language="php"><![CDATA[
  80. try {
  81. $client = Zend_Gdata_ClientLogin::getHttpClient($username,
  82. $password,
  83. $service);
  84. } catch(Zend_Gdata_App_AuthException $authEx) {
  85. // ユーザの認証に失敗しました
  86. // もう一度認証を行うなどの処置が適切でしょう
  87. ...
  88. } catch(Zend_Gdata_App_HttpException $httpEx) {
  89. // Google Data のサーバに接続できませんでした
  90. die($httpEx->getMessage);}
  91. ]]></programlisting>
  92. </sect1>