Zend_Gdata_Exception.xml 4.8 KB

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