| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.gdata.photos">
- <title>Utilisation des albums Web Picasa</title>
- <para>
- Les albums Web Picasa représentent un service Google permettant de maintenir à jour
- des albums photos, tout en pouvant récupérer des photos de l'album d'un membre. L'API
- propose des services pour ajouter, mettre à jour ou supprimer des photos d'un album, de même
- que gérer des mots-clés ou des commentaires sur des images(photos).
- </para>
- <para>
- L'accès public à un album, en lecture donc, n'est pas sujet à demande
- d'authentification. En revanche, toute autre manipulation telle que la mise à jour ou la
- suppression, nécessitera que vous vous authentifiez.
- </para>
- <para>
- Pour plus d'informations sur l'API, voyez <ulink
- url="http://code.google.com/apis/picasaweb/overview.html">l'API Picasa Web
- Albums</ulink>.
- </para>
- <note>
- <title>Authentification</title>
- <para>
- L'API propose les deux modes d'authentification, AuthSub (recommandé) et
- ClientAuth. Pour toute opération d'écriture vers le service, une authentification sera
- demandée, la lecture est elle, libre, au regard de l'API.
- </para>
- </note>
- <sect2 id="zend.gdata.photos.connecting">
- <title>Se connecter au service</title>
- <para>
- L'API Picasa, comme tous les autres services Web Google Gdata, est basée sur le
- protocole Atom Publishing Protocol (APP), et le <acronym>XML</acronym>. Le trafic entre le client et le
- serveur se fait sur <acronym>HTTP</acronym>, et autorise des connexions authentifiées, ou non.
- </para>
- <para>
- Avant tout, il faut donc se connecter. Ceci se fait en deux étapes : créer un
- client <acronym>HTTP</acronym>, et insérer un <classname>Zend_Gdata_Photos</classname> dans
- celui-ci.
- </para>
- <sect3 id="zend.gdata.photos.connecting.authentication">
- <title>Authentification</title>
- <para>
- L'API propose un accès à la fois aux données publiques, et aux données
- privées. Les données publiques ne requièrent pas d'authentification, mais ne sont
- accessibles qu'en lecture seule. L'écriture et l'accès aux données privées
- requièrent une authentification, qui peut s'effectuer de trois manières différentes
- :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <firstterm>ClientAuth</firstterm> permet une authentification directe
- en donnant un couple login/password. Les utilisateurs devront donc
- renseigner ces 2 paramètres sur votre site directement.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>AuthSub</firstterm> permet l'authentification en passant
- par un serveur proxy de Google. Les risques liés à la sécurité sont donc
- moindre avec cette méthode.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- La librairie <classname>Zend_Gdata</classname> permet ces 2 types
- d'authentification. Le reste de ce chapitre supposera que vous soyez habitué à
- l'authentification avec les service Web Google GData. Si ce n'est pas le cas, nous
- vous conseillons de consulter <link
- linkend="zend.gdata.introduction.authentication">la section authentification</link>
- de ce manuel, ou encore <ulink url="http://code.google.com/apis/gdata/auth.html">le
- guide d'authentification Google GData webservices <acronym>API</acronym></ulink>.
- </para>
- </sect3>
- <sect3 id="zend.gdata.photos.connecting.service">
- <title>Créer une instance du service</title>
- <para>
- Pour interagir avec les serveurs, la classe
- <classname>Zend_Gdata_Photos</classname> sera nécessaire. Elle abstrait toute la
- logique de communication avec le Protocol Atom Publishing vers les serveurs de
- Google.
- </para>
- <para>
- Une fois que vous avez choisi une méthode d'authentification, vous devez créer
- une instance de <classname>Zend_Gdata_Photos</classname>. Le constructeur prend en
- paramètre une instance de <classname>Zend_Http_Client</classname>. Cette classe est
- l'interface AuthSub ou ClientAuth authentification. Si vous ne passez pas cette
- instance en argument, alors une instance de <classname>Zend_Http_Client</classname>
- sera crée automatiquement, mais en mode non authentifié.
- </para>
- <para>
- Voici un exemple qui démontre comment créer une classe vers le service avec le
- procédé d'authentification ClientAuth :
- </para>
- <programlisting language="php"><![CDATA[
- // Paramètres pour ClientAuth authentification
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $user = "sample.user@gmail.com";
- $pass = "pa$$w0rd";
- // Création d'une client HTTP authentifié
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- // Création de l'instance du service
- $service = new Zend_Gdata_Photos($client);
- ]]></programlisting>
- <para>Au sujet du procédé AuthSub, voici la démarche :</para>
- <programlisting language="php"><![CDATA[
- session_start();
- /**
- * Retourne l'URL complet de la page actuelle,
- * en fonction des variables d'environnement
- *
- * Env variables utilisées:
- * $_SERVER['HTTPS'] = (on|off|)
- * $_SERVER['HTTP_HOST'] = value of the Host: header
- * $_SERVER['SERVER_PORT'] = port number (only used if not http/80,https/443)
- * $_SERVER['REQUEST_URI'] = the URI after the method of the HTTP request
- *
- * @return string Current URL
- */
- function getCurrentUrl()
- {
- global $_SERVER;
- /**
- * Filtre php_self pour éviter des problèmes de sécurité
- */
- $php_request_uri = htmlentities(substr($_SERVER['REQUEST_URI'], 0,
- strcspn($_SERVER['REQUEST_URI'], "\n\r")), ENT_QUOTES);
- if (isset($_SERVER['HTTPS'])
- && strtolower($_SERVER['HTTPS']) == 'on') {
- $protocol = 'https://';
- } else {
- $protocol = 'http://';
- }
- $host = $_SERVER['HTTP_HOST'];
- if ($_SERVER['SERVER_PORT'] != '' &&
- (($protocol == 'http://' && $_SERVER['SERVER_PORT'] != '80') ||
- ($protocol == 'https://' && $_SERVER['SERVER_PORT'] != '443'))) {
- $port = ':' . $_SERVER['SERVER_PORT'];
- } else {
- $port = '';
- }
- return $protocol . $host . $port . $php_request_uri;
- }
- /**
- * Retourne l'URL AuthSub que l'utilisateur doit visiter
- * pour authentifier ses requêtes
- *
- * Utilise getCurrentUrl() pour récupérer le prochain URL
- * vers lequel l'utilisateur sera redirigé après
- * s'être authentifié.
- *
- * @return string AuthSub URL
- */
- function getAuthSubUrl()
- {
- $next = getCurrentUrl();
- $scope = 'http://picasaweb.google.com/data';
- $secure = false;
- $session = true;
- return Zend_Gdata_AuthSub::getAuthSubTokenUri($next,
- $scope,
- $secure,
- $session);
- }
- /**
- * Retourne un objet servant de client HTTP avec les bons en-têtes,
- * permettant de communiquer avec les services Google, et utilisant
- * l'authentification AuthSub.
- *
- * Utilise $_SESSION['sessionToken'] pour stocker le jeton de session
- * AuthSub après l'avoir obtenu. $_GET['token'] récupère ce jeton
- * après la redirection d'authentification
- *
- * @return Zend_Http_Client
- */
- function getAuthSubHttpClient()
- {
- global $_SESSION, $_GET;
- if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
- $_SESSION['sessionToken'] =
- Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
- }
- $client =
- Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
- return $client;
- }
- /**
- * Créer une instance du service, redirigeant l'utilisateur
- * vers le serveur AuthSub si nécéssaire.
- */
- $service = new Zend_Gdata_Photos(getAuthSubHttpClient());
- ]]></programlisting>
- <para>Enfin, un client non authentifié peut aussi être crée :</para>
- <programlisting language="php"><![CDATA[
- // Création d'une instance du service en mode non authentifié
- $service = new Zend_Gdata_Photos();
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.gdata.photos.queries">
- <title>Comprendre et construire des requêtes</title>
- <para>
- Pour créer des requêtes vers le service Web, vous devrez utiliser une de ces
- classes :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <firstterm>User</firstterm> Cette classe requêtera tout ce qui concerne un
- utilisateur du service. Sans spécifier d'utilisateur, "default" sera
- utilisé.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Album</firstterm> Cette classe va servir de base pour toutes
- les requêtes concernant les albums Picasa.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Photo</firstterm> Cette classe va servir de base pour toutes
- les requêtes concernant les photos Picasa.
- </para>
- </listitem>
- </itemizedlist>
- <para>Une <code>UserQuery</code> peut être construite comme suit :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_UserQuery();
- $query->setUser("sample.user");
- ]]></programlisting>
- <para>
- Pour chaque requête, des paramètres de limitations de la recherche peuvent être
- passés grâce aux méthodes get(Paramètre) and set(Paramètre) :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <firstterm>Projection</firstterm> spécifie le format de retour des données
- dans le flux. Peut être "api" ou "base". En temps normal, "api" est conseillé,
- c'est la valeur par défaut d'ailleurs.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Type</firstterm> détermine le type des éléments retournés,
- "feed"(défaut) ou "entry".
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Access</firstterm> détermine la visibilité des éléments
- retournés, "all"(défaut), "public", ou "private". Les éléments non publics ne
- seront retournés que si le client est authentifié.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Tag</firstterm> fournit un filtre par mots-clés sur les
- éléments retournés.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Kind</firstterm> détermine un filtre sur la sorte (le type)
- d'éléments retournés.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>ImgMax</firstterm> spécifie un filtre par dimension maximale
- sur les éléments retournés.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Thumbsize</firstterm> spécifie un filtre par dimension maximale
- des miniatures retournées.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>User</firstterm> spécifie l'utilisateur dont les éléments sont
- recherchés. Par défaut, "default".
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>AlbumId</firstterm> spécifie l'identifiant de l'album
- recherché. Ceci ne s'applique qu'aux requêtes album et photo. Dans le cas d'une
- recherche de photo, ceci indique l'album dans lequel effectuer la requête de
- recherche. Ce paramètre annule et remplace AlbumName, si spécifié.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>AlbumName</firstterm> spécifie le nom de l'album recherché.
- Ceci ne s'applique qu'aux requêtes album et photo. Dans le cas d'une recherche
- de photo, ceci indique l'album dans lequel effectuer la requête de recherche. Ce
- paramètre annule et remplace AlbumId, si spécifié.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>PhotoId</firstterm> spécifie l'identifiant de la photo
- recherchée. Ceci ne s'applique qu'aux requêtes photo.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.gdata.photos.retrieval">
- <title>Récupérer des flux et des éléments</title>
- <para>
- Le service propose des méthodes de récupération de flux, ou d'éléments simples,
- concernant les utilisateurs, albums, ou photos.
- </para>
- <sect3 id="zend.gdata.photos.user_retrieval">
- <title>Récupérer un utilisateur</title>
- <para>
- Le service propose de récupérer un utilisateur, et toutes les infos de son
- flux, comme ses photos, ses albums.... Si le client est authentifié et demande des
- informations sur son propre compte, alors les éléments marqués comme
- "<code>hidden</code>" seront aussi retournés.
- </para>
- <para>
- Le flux de l'utilisateur est accessible en passant son nom à la méthode
- <code>getUserFeed</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- try {
- $userFeed = $service->getUserFeed("sample.user");
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- <para>Ou alors, le flux peut être requêté directement :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_UserQuery();
- $query->setUser("sample.user");
- try {
- $userFeed = $service->getUserFeed(null, $query);
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- <para>
- Construire une requête donne aussi accès aux éléments d'un utilisateur
- :
- </para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_UserQuery();
- $query->setUser("sample.user");
- $query->setType("entry");
- try {
- $userEntry = $service->getUserEntry($query);
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.album_retrieval">
- <title>Récupérer un album</title>
- <para>Le service donne accès aux flux d'albums et à leurs contenus.</para>
- <para>
- Le flux d'albums est disponible en construisant un objet de requête et en le
- passant à <code>getAlbumFeed</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_AlbumQuery();
- $query->setUser("sample.user");
- $query->setAlbumId("1");
- try {
- $albumFeed = $service->getAlbumFeed($query);
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- <para>
- L'objet de requête accepte aussi un nom d'album avec
- <code>setAlbumName</code>. Attention, ceci annule un identifiant d'album
- éventuellement précédemment spécifié.
- </para>
- <para>Construire une requête donne aussi accès au requêtage d'un album :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_AlbumQuery();
- $query->setUser("sample.user");
- $query->setAlbumId("1");
- $query->setType("entry");
- try {
- $albumEntry = $service->getAlbumEntry($query);
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.photo_retrieval">
- <title>Récupérer une Photo</title>
- <para>
- Le service permet la récupération de flux de photos, et des commentaires et/ou
- mots-clés associés
- </para>
- <para>
- Le flux de photos est accessible en construisant un objet de requête et en le
- passant à la méthode <code>getPhotoFeed</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_PhotoQuery();
- $query->setUser("sample.user");
- $query->setAlbumId("1");
- $query->setPhotoId("100");
- try {
- $photoFeed = $service->getPhotoFeed($query);
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- <para>Construire une requête donne aussi accès au requêtage d'une photo :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_PhotoQuery();
- $query->setUser("sample.user");
- $query->setAlbumId("1");
- $query->setPhotoId("100");
- $query->setType("entry");
- try {
- $photoEntry = $service->getPhotoEntry($query);
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.comment_retrieval">
- <title>Récupérer des commentaires</title>
- <para>
- Vous pouvez récupérer des commentaires depuis des éléments divers de flux. En
- spécifiant à votre requête un paramètre de "comment", celle-ci retournera les
- mots-clés associés à la ressource demandée (user, album ou photo)
- </para>
- <para>
- Voici comment effectuer des actions sur les commentaires récupérés d'une photo
- :
- </para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_PhotoQuery();
- $query->setUser("sample.user");
- $query->setAlbumId("1");
- $query->setPhotoId("100");
- $query->setKind("comment");
- try {
- $photoFeed = $service->getPhotoFeed($query);
- foreach ($photoFeed as $entry) {
- if ($entry instanceof Zend_Gdata_Photos_CommentEntry) {
- // Faites quelque chose avec le commentaire
- }
- }
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.tag_retrieval">
- <title>Récupérer des mots-clés</title>
- <para>
- Vous pouvez récupérer des mots-clés depuis des éléments divers de flux. En
- spécifiant à votre requête un paramètre de "tag", celle-ci retournera les mots-clés
- associés à la ressource demandée.
- </para>
- <para>
- Voici comment effectuer des actions sur les mots-clés récupérés d'une photo
- :
- </para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $query = new Zend_Gdata_Photos_PhotoQuery();
- $query->setUser("sample.user");
- $query->setAlbumId("1");
- $query->setPhotoId("100");
- $query->setKind("tag");
- try {
- $photoFeed = $service->getPhotoFeed($query);
- foreach ($photoFeed as $entry) {
- if ($entry instanceof Zend_Gdata_Photos_TagEntry) {
- // Faites quelque chose avec le mot-clé
- }
- }
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Error: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.gdata.photos.creation">
- <title>Créer des ressources</title>
- <para>
- Des opérations de création sont possible, qu'il s'agisse d'albums, photos,
- commentaires, ou mots-clés.
- </para>
- <sect3 id="zend.gdata.photos.album_creation">
- <title>Créer un album</title>
- <para>Il est possible de créer un album, pour les clients authentifiés :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $entry = new Zend_Gdata_Photos_AlbumEntry();
- $entry->setTitle($service->newTitle("test album"));
- $service->insertAlbumEntry($entry);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.photo_creation">
- <title>Créer une photo</title>
- <para>
- Créer une photo est possible pour les clients authentifiés, procédez comme
- suit :
- </para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- // $photo est le nom d'un fichier issu d'un formulaire d'uplaod
- $fd = $service->newMediaFileSource($photo["tmp_name"]);
- $fd->setContentType($photo["type"]);
- $entry = new Zend_Gdata_Photos_PhotoEntry();
- $entry->setMediaSource($fd);
- $entry->setTitle($service->newTitle($photo["name"]));
- $albumQuery = new Zend_Gdata_Photos_AlbumQuery;
- $albumQuery->setUser("sample.user");
- $albumQuery->setAlbumId("1");
- $albumEntry = $service->getAlbumEntry($albumQuery);
- $service->insertPhotoEntry($entry, $albumEntry);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.comment_creation">
- <title>Créer un commentaire pour une photo</title>
- <para>
- Il est possible de créer un commentaire pour une photo, voici un exemple
- :
- </para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $entry = new Zend_Gdata_Photos_CommentEntry();
- $entry->setTitle($service->newTitle("comment"));
- $entry->setContent($service->newContent("comment"));
- $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
- $photoQuery->setUser("sample.user");
- $photoQuery->setAlbumId("1");
- $photoQuery->setPhotoId("100");
- $photoQuery->setType('entry');
- $photoEntry = $service->getPhotoEntry($photoQuery);
- $service->insertCommentEntry($entry, $photoEntry);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.tag_creation">
- <title>Créer un mot-clé pour une photo</title>
- <para>Il est possible de créer un mot-clé pour une photo, voici un exemple :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $entry = new Zend_Gdata_Photos_TagEntry();
- $entry->setTitle($service->newTitle("tag"));
- $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
- $photoQuery->setUser("sample.user");
- $photoQuery->setAlbumId("1");
- $photoQuery->setPhotoId("100");
- $photoQuery->setType('entry');
- $photoEntry = $service->getPhotoEntry($photoQuery);
- $service->insertTagEntry($entry, $photoEntry);
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.gdata.photos.deletion">
- <title>Supprimer des éléments</title>
- <para>Il est possible de supprimer albums, photos, commentaires, et mots-clés.</para>
- <sect3 id="zend.gdata.photos.album_deletion">
- <title>Supprimer un album</title>
- <para>Supprimer un album est possible si le client est authentifié :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $albumQuery = new Zend_Gdata_Photos_AlbumQuery;
- $albumQuery->setUser("sample.user");
- $albumQuery->setAlbumId("1");
- $albumQuery->setType('entry');
- $entry = $service->getAlbumEntry($albumQuery);
- $service->deleteAlbumEntry($entry, true);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.photo_deletion">
- <title>Supprimer une photo</title>
- <para>Supprimer une photo est possible si le client est authentifié :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
- $photoQuery->setUser("sample.user");
- $photoQuery->setAlbumId("1");
- $photoQuery->setPhotoId("100");
- $photoQuery->setType('entry');
- $entry = $service->getPhotoEntry($photoQuery);
- $service->deletePhotoEntry($entry, true);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.comment_deletion">
- <title>Supprimer un commentaire</title>
- <para>Supprimer un commentaire est possible si le client est authentifié :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
- $photoQuery->setUser("sample.user");
- $photoQuery->setAlbumId("1");
- $photoQuery->setPhotoId("100");
- $photoQuery->setType('entry');
- $path = $photoQuery->getQueryUrl() . '/commentid/' . "1000";
- $entry = $service->getCommentEntry($path);
- $service->deleteCommentEntry($entry, true);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.tag_deletion">
- <title>Supprimer un mot-clé</title>
- <para>Supprimer un mot-clé est possible, si le client est authentifié :</para>
- <programlisting language="php"><![CDATA[
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $service = new Zend_Gdata_Photos($client);
- $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
- $photoQuery->setUser("sample.user");
- $photoQuery->setAlbumId("1");
- $photoQuery->setPhotoId("100");
- $photoQuery->setKind("tag");
- $query = $photoQuery->getQueryUrl();
- $photoFeed = $service->getPhotoFeed($query);
- foreach ($photoFeed as $entry) {
- if ($entry instanceof Zend_Gdata_Photos_TagEntry) {
- if ($entry->getContent() == $tagContent) {
- $tagEntry = $entry;
- }
- }
- }
- $service->deleteTagEntry($tagEntry, true);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.optimistic_concurrenty">
- <title>Gestion des accès concurrents</title>
- <para>
- Les flux GData, dont ceux de Picasa Web Albums, implémentent un système
- d'accès concurrent qui empêche les changements avec écrasements par inadvertance. Si
- vous demandez l'effacement d'une ressource qui a été modifiée depuis votre dernière
- requête, alors une exception sera levée, sauf si vous demandez le contraire
- explicitement (dans un tel cas, la procédure d'effacement sera réessayée sur
- l'élément mis à jour).
- </para>
- <para>
- Voici un exemple de gestion des versions et accès concurrent sur un effacement
- avec <code>deleteAlbumEntry</code>:
- </para>
- <programlisting language="php"><![CDATA[
- // $album est l'albumEntry à effacer
- try {
- $this->delete($album);
- } catch (Zend_Gdata_App_HttpException $e) {
- if ($e->getMessage()->getStatus() === 409) {
- $entry =
- new Zend_Gdata_Photos_AlbumEntry($e->getMessage()
- ->getBody());
- $this->delete($entry->getLink('edit')->href);
- } else {
- throw $e;
- }
- }
- ]]></programlisting>
- </sect3>
- </sect2>
- </sect1>
|