1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 21815 -->
4 <sect1 id="zend.gdata.photos">
5 <title>Picasa Web Albums の使用法</title>
8 Picasa Web Albums は、自分の写真のアルバムを管理したり
9 他人のアルバムや写真を閲覧したりするサービスです。
10 <acronym>API</acronym> を使用すると、このサービスをプログラムから操作できるようになります。
12 そして写真へのタグ付けやコメントを行うことができます。
16 公開されているアルバムや写真へのアクセスについては、
18 しかし、読み込み専用以外のアクセスを行うにはログインする必要があります。
22 <acronym>API</acronym> についての詳細な情報、
23 たとえば <acronym>API</acronym> へのアクセスを有効にする方法などは <ulink
24 url="http://code.google.com/apis/picasaweb/overview.html">Picasa
25 Web Albums Data <acronym>API</acronym> の概要</ulink>
32 この <acronym>API</acronym> は、AuthSub (推奨)
33 および ClientAuth による認証に対応しています。
34 書き込みを行うには認証済みの <acronym>HTTP</acronym> 接続が必須ですが、
35 認証していない接続でも読み込み専用のアクセスは可能です。
39 <sect2 id="zend.gdata.photos.connecting">
40 <title>サービスへの接続</title>
42 Picasa Web Albums <acronym>API</acronym> は、その他の GData <acronym>API</acronym> と同様に
43 Atom Publishing Protocol (APP) を使用しています。これは、<acronym>XML</acronym>
44 ベースのフォーマットでウェブのリソースを管理するための仕組みです。
45 クライアントと Google Calendar サーバとの間のやり取りは
46 <acronym>HTTP</acronym> で行われ、認証済みの接続と未認証の接続の両方が利用できます。
52 Picasa サーバとの接続は、まず <acronym>HTTP</acronym> クライアントを作成して
53 <classname>Zend_Gdata_Photos</classname>
54 サービスのインスタンスをそこにバインドするという手順で行います。
57 <sect3 id="zend.gdata.photos.connecting.authentication">
60 Google Picasa <acronym>API</acronym> を使用すると、公開カレンダーだけでなく
61 プライベートカレンダーのフィードにもアクセスできます。
63 認証しない場合は読み込み専用となり、機能が制限されます。
64 プライベートフィードでは完全な機能が使用できますが、
65 Picasa サーバとの認証が必要になります。
66 Google Picasa がサポートしている認証方式は、次の 3 通りです。
72 <firstterm>ClientAuth</firstterm>
76 ユーザ自身がアプリケーションにパスワードを教える必要があるので、
77 これは他の方式が使えない場合にのみ使用するようにしましょう。
82 <firstterm>AuthSub</firstterm>
83 は、Gooble のプロキシサーバを経由して Picasa サーバとの認証を行ないます。
84 これは ClientAuth と同じくらい便利に使用でき、
93 <classname>Zend_Gdata</classname> ライブラリは、
95 これ以降の説明は、認証方式については理解しており
96 適切な認証方式で接続できるようになっていることを前提として進めていきます。
98 <link linkend="zend.gdata.introduction.authentication">認証に関するセクション</link>
100 <ulink url="http://code.google.com/apis/gdata/auth.html">Google Data <acronym>API</acronym> Developer's Guide
101 の Authentication Overview</ulink>
106 <sect3 id="zend.gdata.photos.connecting.service">
107 <title>サービスのインスタンスの作成</title>
109 サーバとのやりとりを行うためのクラスとして、このライブラリでは
110 <classname>Zend_Gdata_Photos</classname> サービスクラスを用意しています。
111 このクラスは Google Data や Atom Publishing Protocol
113 サーバとのリクエストのやりとりを支援します。
118 <classname>Zend_Gdata_Photos</classname> のインスタンスを作成します。
119 このクラスのコンストラクタには、引数として
120 <classname>Zend_Http_Client</classname> のインスタンスを渡します。
121 これは、AuthSub 認証および ClientAuth 認証へのインターフェイスを提供します。
122 これらの認証を使用する場合には、認証済みの <acronym>HTTP</acronym> クライアントが必要です。
124 <classname>Zend_Http_Client</classname>
125 のインスタンスを自動的に作成して使用します。
129 以下の例は、ClientAuth 認証を使用してサービスクラスを作成するものです。
131 <programlisting language="php"><![CDATA[
132 // ClientAuth 認証用のパラメータ
133 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
134 $user = "sample.user@gmail.com";
137 // 認証済みの HTTP クライアントを作成します
138 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
141 $service = new Zend_Gdata_Photos($client);
145 AuthSub を使用するサービスを作成するのもほぼ同様ですが、
148 <programlisting language="php"><![CDATA[
152 * 現在のページの完全な URL を、環境変数をもとにして返します
155 * $_SERVER['HTTPS'] = (on|off|)
156 * $_SERVER['HTTP_HOST'] = Host: ヘッダの値
157 * $_SERVER['SERVER_PORT'] = ポート番号 (http/80,https/443 以外の場合に使用します)
158 * $_SERVER['REQUEST_URI'] = HTTP リクエストのメソッドのあとに続く URI
160 * @return string 現在の URL
162 function getCurrentUrl()
167 * php_self をフィルタリングしてセキュリティ脆弱性を防ぎます
169 $php_request_uri = htmlentities(substr($_SERVER['REQUEST_URI'], 0,
170 strcspn($_SERVER['REQUEST_URI'], "\n\r")), ENT_QUOTES);
172 if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') {
173 $protocol = 'https://';
175 $protocol = 'http://';
177 $host = $_SERVER['HTTP_HOST'];
178 if ($_SERVER['SERVER_PORT'] != '' &&
179 (($protocol == 'http://' && $_SERVER['SERVER_PORT'] != '80') ||
180 ($protocol == 'https://' && $_SERVER['SERVER_PORT'] != '443'))) {
181 $port = ':' . $_SERVER['SERVER_PORT'];
185 return $protocol . $host . $port . $php_request_uri;
189 * 認証後のリダイレクト先を伝えられるようにします
192 * getCurrentUrl() を使用して次の URL を取得し、
193 * Google サービスでの認証に成功したらそこにリダイレクトします
195 * @return string AuthSub URL
197 function getAuthSubUrl()
199 $next = getCurrentUrl();
200 $scope = 'http://picasaweb.google.com/data';
203 return Zend_Gdata_AuthSub::getAuthSubTokenUri($next, $scope, $secure,
208 * AuthSub 認証を使用して Google と通信するための適切なヘッダを設定した
209 * HTTP クライアントオブジェクトを返します
211 * $_SESSION['sessionToken'] を使用して、取得した AuthSub セッショントークンを
212 * 保存します。Google での認証に成功したユーザのリダイレクト先 URL
213 * に含まれる一回限りのトークンは、$_GET['token'] から取得します
215 * @return Zend_Http_Client
217 function getAuthSubHttpClient()
219 global $_SESSION, $_GET;
220 if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
221 $_SESSION['sessionToken'] =
222 Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
224 $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
230 * 必要に応じてユーザを AuthSub サーバにリダイレクトします
232 $service = new Zend_Gdata_Photos(getAuthSubHttpClient());
235 <para>未認証のサーバを作成して、公開フィードへのアクセスに使用できます。</para>
236 <programlisting language="php"><![CDATA[
237 // サービスのインスタンスを、未認証の HTTP クライアントで作成します
238 $service = new Zend_Gdata_Photos();
243 <sect2 id="zend.gdata.photos.queries">
244 <title>クエリの仕組みと作成方法</title>
246 サービスに対してデータを要求するために最初にやることは、
247 クエリを作成することです。以下の形式用のクエリクラスが用意されています。
253 <firstterm>User</firstterm>
254 は、誰のデータを探すのかをユーザ名で指定します。
255 省略した場合は "default" を使用します。
256 これは、現在認証されているユーザ (認証済みの場合)
262 <firstterm>Album</firstterm>
269 <firstterm>Photo</firstterm>
270 は、検索対象の写真を ID で指定します。
275 <para>新しい <code>UserQuery</code> を作成するには次のようにします。</para>
276 <programlisting language="php"><![CDATA[
277 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
278 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
279 $service = new Zend_Gdata_Photos($client);
281 $query = new Zend_Gdata_Photos_UserQuery();
282 $query->setUser("sample.user");
286 各クエリで検索結果を絞り込むために使用するパラメータを取得したり設定したりするには、
287 それぞれ get(Parameter) および set(Parameter)
294 <firstterm>Projection</firstterm>
295 は、フィードで返されるデータのフォーマットを指定します。
296 "api" あるいは "base" のいずれかです。通常は
297 "api" を指定することになるでしょう。デフォルトは "api"
303 <firstterm>Type</firstterm>
304 は返される要素の型を指定します。"feed" あるいは "entry"
305 のいずれかで、デフォルトは "feed" です。
310 <firstterm>Access</firstterm>
311 は、返されるアイテムの可視性を指定します。
312 "all"、"public" あるいは "private" のいずれかで、
315 認証済みのユーザに対するクエリの場合のみです。
320 <firstterm>Tag</firstterm>
322 タグを指定した場合は、その内容のタグがつけられている項目のみを返します。
327 <firstterm>Kind</firstterm>
329 指定した場合は、この値にマッチするエントリのみを返します。
334 <firstterm>ImgMax</firstterm>
335 は、返されるエントリの最大画像サイズを指定します。
336 この値より小さい画像エントリのみを返します。
341 <firstterm>Thumbsize</firstterm>
342 は、返されるエントリのサムサイズを指定します。
343 返されたエントリのサムサイズはこの値に等しくなります。
348 <firstterm>User</firstterm>
355 <firstterm>AlbumId</firstterm>
356 は、検索対象のアルバムの ID を指定します。
357 この要素は、アルバムや写真の問い合わせに対してのみ適用されます。
359 ここで指定したアルバムに含まれる写真が対象となります。
360 アルバム ID は アルバム名とは互いに排他的です。
361 一方を指定すると、もう一方は取り消されます。
366 <firstterm>AlbumName</firstterm>
367 は、検索対象のアルバムの名前を指定します。
368 この要素は、アルバムや写真の問い合わせに対してのみ適用されます。
370 ここで指定したアルバムに含まれる写真が対象となります。
371 アルバム名は アルバム ID とは互いに排他的です。
372 一方を指定すると、もう一方は取り消されます。
377 <firstterm>PhotoId</firstterm>
378 は、検索対象の写真の ID を指定します。
379 この要素は、写真の問い合わせに対してのみ適用されます。
385 <sect2 id="zend.gdata.photos.retrieval">
386 <title>フィードやエントリの取得</title>
388 このサービスには、ユーザやアルバムそして写真に関する
389 フィードや個々のエントリを取得する機能があります。
392 <sect3 id="zend.gdata.photos.user_retrieval">
393 <title>ユーザの取得</title>
395 このサービスは、ユーザのフィードおよびユーザのコンテンツ一覧の取得をサポートしています。
396 指定したユーザが認証済みユーザである場合は、
397 "<code>hidden</code>" とマークされているエントリも返されます。
400 <para>ユーザのフィードにアクセスするには、ユーザ名を <code>getUserFeed</code> メソッドに渡します。</para>
401 <programlisting language="php"><![CDATA[
402 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
403 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
404 $service = new Zend_Gdata_Photos($client);
407 $userFeed = $service->getUserFeed("sample.user");
408 } catch (Zend_Gdata_App_Exception $e) {
409 echo "エラー: " . $e->getMessage();
413 <para>あるいは、クエリを作成してフィードにアクセスすることもできます。この場合は、まず次のようにします。</para>
414 <programlisting language="php"><![CDATA[
415 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
416 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
417 $service = new Zend_Gdata_Photos($client);
419 $query = new Zend_Gdata_Photos_UserQuery();
420 $query->setUser("sample.user");
423 $userFeed = $service->getUserFeed(null, $query);
424 } catch (Zend_Gdata_App_Exception $e) {
425 echo "エラー: " . $e->getMessage();
429 <para>クエリを作成すると、ユーザエントリオブジェクトも取得できるようになります。</para>
430 <programlisting language="php"><![CDATA[
431 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
432 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
433 $service = new Zend_Gdata_Photos($client);
435 $query = new Zend_Gdata_Photos_UserQuery();
436 $query->setUser("sample.user");
437 $query->setType("entry");
440 $userEntry = $service->getUserEntry($query);
441 } catch (Zend_Gdata_App_Exception $e) {
442 echo "エラー: " . $e->getMessage();
447 <sect3 id="zend.gdata.photos.album_retrieval">
448 <title>アルバムの取得</title>
449 <para>このサービスには、アルバムのフィードやアルバムのコンテンツ一覧を取得する機能があります。</para>
452 アルバムのフィードにアクセスするには、クエリオブジェクトを作成してそれを <code>getAlbumFeed</code> に渡します。
454 <programlisting language="php"><![CDATA[
455 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
456 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
457 $service = new Zend_Gdata_Photos($client);
459 $query = new Zend_Gdata_Photos_AlbumQuery();
460 $query->setUser("sample.user");
461 $query->setAlbumId("1");
464 $albumFeed = $service->getAlbumFeed($query);
465 } catch (Zend_Gdata_App_Exception $e) {
466 echo "エラー: " . $e->getMessage();
471 あるいは、<code>setAlbumName</code>
472 でクエリオブジェクトにアルバム名を指定することもできます。
473 アルバム名は アルバム ID とは互いに排他的です。
474 一方を指定すると、もう一方は取り消されます。
477 <para>クエリを作成すると、アルバムエントリオブジェクトも取得できるようになります。</para>
478 <programlisting language="php"><![CDATA[
479 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
480 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
481 $service = new Zend_Gdata_Photos($client);
483 $query = new Zend_Gdata_Photos_AlbumQuery();
484 $query->setUser("sample.user");
485 $query->setAlbumId("1");
486 $query->setType("entry");
489 $albumEntry = $service->getAlbumEntry($query);
490 } catch (Zend_Gdata_App_Exception $e) {
491 echo "エラー: " . $e->getMessage();
496 <sect3 id="zend.gdata.photos.photo_retrieval">
498 <para>このサービスには、写真のフィードやコメント・タグ一覧を取得する機能があります。</para>
501 写真のフィードにアクセスするには、クエリオブジェクトを作成してそれを <code>getPhotoFeed</code> に渡します。
503 <programlisting language="php"><![CDATA[
504 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
505 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
506 $service = new Zend_Gdata_Photos($client);
508 $query = new Zend_Gdata_Photos_PhotoQuery();
509 $query->setUser("sample.user");
510 $query->setAlbumId("1");
511 $query->setPhotoId("100");
514 $photoFeed = $service->getPhotoFeed($query);
515 } catch (Zend_Gdata_App_Exception $e) {
516 echo "エラー: " . $e->getMessage();
520 <para>クエリを作成すると、写真エントリオブジェクトも取得できるようになります。</para>
521 <programlisting language="php"><![CDATA[
522 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
523 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
524 $service = new Zend_Gdata_Photos($client);
526 $query = new Zend_Gdata_Photos_PhotoQuery();
527 $query->setUser("sample.user");
528 $query->setAlbumId("1");
529 $query->setPhotoId("100");
530 $query->setType("entry");
533 $photoEntry = $service->getPhotoEntry($query);
534 } catch (Zend_Gdata_App_Exception $e) {
535 echo "エラー: " . $e->getMessage();
540 <sect3 id="zend.gdata.photos.comment_retrieval">
541 <title>コメントの取得</title>
543 このサービスには、さまざまな形式のフィードからのコメントの取得をサポートしています。
544 クエリが返す結果の種類として "comment" を指定することで、
545 指定したユーザやアルバム、写真に関連づけられたコメントを取得できるようになります。
548 <para>指定した写真のコメントを処理するには、次のようにします。</para>
549 <programlisting language="php"><![CDATA[
550 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
551 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
552 $service = new Zend_Gdata_Photos($client);
554 $query = new Zend_Gdata_Photos_PhotoQuery();
555 $query->setUser("sample.user");
556 $query->setAlbumId("1");
557 $query->setPhotoId("100");
558 $query->setKind("comment");
561 $photoFeed = $service->getPhotoFeed($query);
563 foreach ($photoFeed as $entry) {
564 if ($entry instanceof Zend_Gdata_Photos_CommentEntry) {
565 // コメントに対して何らかの処理をします
568 } catch (Zend_Gdata_App_Exception $e) {
569 echo "エラー: " . $e->getMessage();
574 <sect3 id="zend.gdata.photos.tag_retrieval">
577 このサービスには、さまざまな形式のフィードからのタグの取得をサポートしています。
578 クエリが返す結果の種類として "tag" を指定することで、
579 指定した写真に関連づけられたタグを取得できるようになります。
582 <para>指定した写真のタグを処理するには、次のようにします。</para>
583 <programlisting language="php"><![CDATA[
584 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
585 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
586 $service = new Zend_Gdata_Photos($client);
588 $query = new Zend_Gdata_Photos_PhotoQuery();
589 $query->setUser("sample.user");
590 $query->setAlbumId("1");
591 $query->setPhotoId("100");
592 $query->setKind("tag");
595 $photoFeed = $service->getPhotoFeed($query);
597 foreach ($photoFeed as $entry) {
598 if ($entry instanceof Zend_Gdata_Photos_TagEntry) {
602 } catch (Zend_Gdata_App_Exception $e) {
603 echo "エラー: " . $e->getMessage();
610 <sect2 id="zend.gdata.photos.creation">
611 <title>エントリの作成</title>
612 <para>このサービスには、アルバムや写真、コメント、そしてタグを作成する機能があります。</para>
614 <sect3 id="zend.gdata.photos.album_creation">
615 <title>アルバムの作成</title>
616 <para>このサービスは、認証済みユーザ用の新しいアルバムの作成をサポートしています。</para>
617 <programlisting language="php"><![CDATA[
618 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
619 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
620 $service = new Zend_Gdata_Photos($client);
622 $entry = new Zend_Gdata_Photos_AlbumEntry();
623 $entry->setTitle($service->newTitle("test album"));
625 $service->insertAlbumEntry($entry);
629 <sect3 id="zend.gdata.photos.photo_creation">
631 <para>このサービスは、認証済みユーザ用の新しい写真の作成をサポートしています。</para>
632 <programlisting language="php"><![CDATA[
633 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
634 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
635 $service = new Zend_Gdata_Photos($client);
637 // $photo は、HTML フォームからアップロードされたファイルの名前です
639 $fd = $service->newMediaFileSource($photo["tmp_name"]);
640 $fd->setContentType($photo["type"]);
642 $entry = new Zend_Gdata_Photos_PhotoEntry();
643 $entry->setMediaSource($fd);
644 $entry->setTitle($service->newTitle($photo["name"]));
646 $albumQuery = new Zend_Gdata_Photos_AlbumQuery;
647 $albumQuery->setUser("sample.user");
648 $albumQuery->setAlbumId("1");
650 $albumEntry = $service->getAlbumEntry($albumQuery);
652 $service->insertPhotoEntry($entry, $albumEntry);
656 <sect3 id="zend.gdata.photos.comment_creation">
657 <title>コメントの作成</title>
658 <para>このサービスは、写真への新しいコメントの作成をサポートしています。</para>
659 <programlisting language="php"><![CDATA[
660 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
661 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
662 $service = new Zend_Gdata_Photos($client);
664 $entry = new Zend_Gdata_Photos_CommentEntry();
665 $entry->setTitle($service->newTitle("comment"));
666 $entry->setContent($service->newContent("comment"));
668 $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
669 $photoQuery->setUser("sample.user");
670 $photoQuery->setAlbumId("1");
671 $photoQuery->setPhotoId("100");
672 $photoQuery->setType('entry');
674 $photoEntry = $service->getPhotoEntry($photoQuery);
676 $service->insertCommentEntry($entry, $photoEntry);
680 <sect3 id="zend.gdata.photos.tag_creation">
682 <para>このサービスは、写真への新しいタグの作成をサポートしています。</para>
683 <programlisting language="php"><![CDATA[
684 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
685 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
686 $service = new Zend_Gdata_Photos($client);
688 $entry = new Zend_Gdata_Photos_TagEntry();
689 $entry->setTitle($service->newTitle("tag"));
691 $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
692 $photoQuery->setUser("sample.user");
693 $photoQuery->setAlbumId("1");
694 $photoQuery->setPhotoId("100");
695 $photoQuery->setType('entry');
697 $photoEntry = $service->getPhotoEntry($photoQuery);
699 $service->insertTagEntry($entry, $photoEntry);
705 <sect2 id="zend.gdata.photos.deletion">
706 <title>エントリの削除</title>
707 <para>このサービスには、アルバムや写真、コメント、そしてタグを削除する機能があります。</para>
709 <sect3 id="zend.gdata.photos.album_deletion">
710 <title>アルバムの削除</title>
711 <para>このサービスは、認証済みユーザ用のアルバムの削除をサポートしています。</para>
712 <programlisting language="php"><![CDATA[
713 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
714 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
715 $service = new Zend_Gdata_Photos($client);
717 $albumQuery = new Zend_Gdata_Photos_AlbumQuery;
718 $albumQuery->setUser("sample.user");
719 $albumQuery->setAlbumId("1");
720 $albumQuery->setType('entry');
722 $entry = $service->getAlbumEntry($albumQuery);
724 $service->deleteAlbumEntry($entry, true);
728 <sect3 id="zend.gdata.photos.photo_deletion">
730 <para>このサービスは、認証済みユーザ用の写真の削除をサポートしています。</para>
731 <programlisting language="php"><![CDATA[
732 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
733 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
734 $service = new Zend_Gdata_Photos($client);
736 $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
737 $photoQuery->setUser("sample.user");
738 $photoQuery->setAlbumId("1");
739 $photoQuery->setPhotoId("100");
740 $photoQuery->setType('entry');
742 $entry = $service->getPhotoEntry($photoQuery);
744 $service->deletePhotoEntry($entry, true);
748 <sect3 id="zend.gdata.photos.comment_deletion">
749 <title>コメントの削除</title>
750 <para>このサービスは、認証済みユーザのコメントの削除をサポートしています。</para>
751 <programlisting language="php"><![CDATA[
752 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
753 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
754 $service = new Zend_Gdata_Photos($client);
756 $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
757 $photoQuery->setUser("sample.user");
758 $photoQuery->setAlbumId("1");
759 $photoQuery->setPhotoId("100");
760 $photoQuery->setType('entry');
762 $path = $photoQuery->getQueryUrl() . '/commentid/' . "1000";
764 $entry = $service->getCommentEntry($path);
766 $service->deleteCommentEntry($entry, true);
770 <sect3 id="zend.gdata.photos.tag_deletion">
772 <para>このサービスは、認証済みユーザのタグの削除をサポートしています。</para>
773 <programlisting language="php"><![CDATA[
774 $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
775 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
776 $service = new Zend_Gdata_Photos($client);
778 $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
779 $photoQuery->setUser("sample.user");
780 $photoQuery->setAlbumId("1");
781 $photoQuery->setPhotoId("100");
782 $photoQuery->setKind("tag");
783 $query = $photoQuery->getQueryUrl();
785 $photoFeed = $service->getPhotoFeed($query);
787 foreach ($photoFeed as $entry) {
788 if ($entry instanceof Zend_Gdata_Photos_TagEntry) {
789 if ($entry->getContent() == $tagContent) {
795 $service->deleteTagEntry($tagEntry, true);
799 <sect3 id="zend.gdata.photos.optimistic_concurrenty">
800 <title>楽観的な同時並行性 (削除時の注意)</title>
802 Picasa Web Albums サービスを含めた GData のフィードは、
803 楽観的な同時並行性 (optimistic concurrency) を実装しています。
804 これは、変更内容を不意に上書きしてしまうことを防ぐバージョン管理システムです。
806 もし最後に取得した後でそのエントリが変更されていた場合は例外がスローされます。
807 ただし明示的にその他の設定をしている場合は別です
808 (この場合、更新後のエントリに対して削除を試みます)。
812 削除時のバージョン管理の処理方法については <code>deleteAlbumEntry</code>
815 <programlisting language="php"><![CDATA[
816 // $album は、削除したい albumEntry です
818 $this->delete($album);
819 } catch (Zend_Gdata_App_HttpException $e) {
820 if ($e->getMessage()->getStatus() === 409) {
822 new Zend_Gdata_Photos_AlbumEntry($e->getMessage()->getBody());
823 $this->delete($entry->getLink('edit')->href);