Zend_Gdata_Photos.xml 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 13842 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.gdata.photos">
  5. <title>Utilisation des albums Web Picasa</title>
  6. <para>Les albums Web Picasa représentent un service Google permettant de maintenir à jour des albums photos, tout en
  7. pouvant récupérer des photos de l'album d'un membre. L'API propose des services pour ajouter, mettre à jour ou
  8. supprimer des photos d'un album, de même que gérer des mots-clés ou des commentaires sur des images(photos).</para>
  9. <para>L'accès public à un album, en lecture donc, n'est pas sujet à demande d'authentification. En revanche, toute
  10. autre manipulation telle que la mise à jour ou la suppression, nécessitera que vous vous authentifiez.</para>
  11. <para>Pour plus d'informations sur l'API, voyez <ulink
  12. url="http://code.google.com/apis/picasaweb/overview.html">l'API Picasa Web Albums</ulink>.</para>
  13. <note>
  14. <title>Authentification</title>
  15. <para>L'API propose les deux modes d'authentification, AuthSub (recommandé) et ClientAuth. Pour toute opération
  16. d'écriture vers le service, une authentification sera demandée, la lecture est elle, libre, au regard de
  17. l'API.</para>
  18. </note>
  19. <sect2 id="zend.gdata.photos.connecting">
  20. <title>Se connecter au service</title>
  21. <para>L'API Picasa, comme tous les autres services Web Google Gdata, est basée sur le protocole Atom Publishing
  22. Protocol (APP), et le XML. Le trafic entre le client et le serveur se fait sur HTTP, et autorise des connexions
  23. authentifiées, ou non.</para>
  24. <para>Avant tout, il faut donc se connecter. Ceci se fait en deux étapes : créer un client HTTP, et insérer un
  25. <classname>Zend_Gdata_Photos</classname> dans celui-ci.</para>
  26. <sect3 id="zend.gdata.photos.connecting.authentication">
  27. <title>Authentification</title>
  28. <para>L'API propose un accès à la fois aux données publiques, et aux données privées. Les données publiques
  29. ne requièrent pas d'authentification, mais ne sont accessibles qu'en lecture seule. L'écriture et l'accès
  30. aux données privées requièrent une authentification, qui peut s'effectuer de trois manières différentes
  31. :</para>
  32. <itemizedlist>
  33. <listitem>
  34. <para><firstterm>ClientAuth</firstterm> permet une authentification directe en donnant un couple
  35. login/password. Les utilisateurs devront donc renseigner ces 2 paramètres sur votre site
  36. directement.</para>
  37. </listitem>
  38. <listitem>
  39. <para><firstterm>AuthSub</firstterm> permet l'authentification en passant par un serveur proxy de
  40. Google. Les risques liés à la sécurité sont donc moindre avec cette méthode.</para>
  41. </listitem>
  42. </itemizedlist>
  43. <para>La librairie <classname>Zend_Gdata</classname> permet ces 2 types d'authentification. Le reste de ce chapitre
  44. supposera que vous soyez habitué à l'authentification avec les service Web Google GData. Si ce n'est pas le
  45. cas, nous vous conseillons de consulter <link linkend="zend.gdata.introduction.authentication">la section
  46. authentification</link> de ce manuel, ou encore <ulink url="http://code.google.com/apis/gdata/auth.html">le
  47. guide d'authentification Google GData webservices API</ulink>.</para>
  48. </sect3>
  49. <sect3 id="zend.gdata.photos.connecting.service">
  50. <title>Créer une instance du service</title>
  51. <para>Pour interagir avec les serveurs, la classe <classname>Zend_Gdata_Photos</classname> sera nécessaire. Elle
  52. abstrait toute la logique de communication avec le Protocol Atom Publishing vers les serveurs de
  53. Google.</para>
  54. <para>Une fois que vous avez choisi une méthode d'authentification, vous devez créer une instance de
  55. <classname>Zend_Gdata_Photos</classname>. Le constructeur prend en paramètre une instance de
  56. <classname>Zend_Http_Client</classname>. Cette classe est l'interface AuthSub ou ClientAuth authentification. Si vous
  57. ne passez pas cette instance en argument, alors une instance de <classname>Zend_Http_Client</classname> sera crée
  58. automatiquement, mais en mode non authentifié.</para>
  59. <para>Voici un exemple qui démontre comment créer une classe vers le service avec le procédé
  60. d'authentification ClientAuth :</para>
  61. <programlisting role="php"><![CDATA[
  62. // Paramètres pour ClientAuth authentification
  63. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  64. $user = "sample.user@gmail.com";
  65. $pass = "pa$$w0rd";
  66. // Création d'une client HTTP authentifié
  67. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  68. // Création de l'instance du service
  69. $service = new Zend_Gdata_Photos($client);
  70. ]]></programlisting>
  71. <para>Au sujet du procédé AuthSub, voici la démarche :</para>
  72. <programlisting role="php"><![CDATA[
  73. session_start();
  74. /**
  75. * Retourne l'URL complet de la page actuelle,
  76. * en fonction des variables d'environnement
  77. *
  78. * Env variables utilisées:
  79. * $_SERVER['HTTPS'] = (on|off|)
  80. * $_SERVER['HTTP_HOST'] = value of the Host: header
  81. * $_SERVER['SERVER_PORT'] = port number (only used if not http/80,https/443)
  82. * $_SERVER['REQUEST_URI'] = the URI after the method of the HTTP request
  83. *
  84. * @return string Current URL
  85. */
  86. function getCurrentUrl()
  87. {
  88. global $_SERVER;
  89. /**
  90. * Filtre php_self pour éviter des problèmes de sécurité
  91. */
  92. $php_request_uri = htmlentities(substr($_SERVER['REQUEST_URI'], 0,
  93. strcspn($_SERVER['REQUEST_URI'], "\n\r")), ENT_QUOTES);
  94. if (isset($_SERVER['HTTPS'])
  95. && strtolower($_SERVER['HTTPS']) == 'on') {
  96. $protocol = 'https://';
  97. } else {
  98. $protocol = 'http://';
  99. }
  100. $host = $_SERVER['HTTP_HOST'];
  101. if ($_SERVER['SERVER_PORT'] != '' &&
  102. (($protocol == 'http://' && $_SERVER['SERVER_PORT'] != '80') ||
  103. ($protocol == 'https://' && $_SERVER['SERVER_PORT'] != '443'))) {
  104. $port = ':' . $_SERVER['SERVER_PORT'];
  105. } else {
  106. $port = '';
  107. }
  108. return $protocol . $host . $port . $php_request_uri;
  109. }
  110. /**
  111. * Retourne l'URL AuthSub que l'utilisateur doit visiter
  112. * pour authentifier ses requêtes
  113. *
  114. * Utilise getCurrentUrl() pour récupérer le prochain URL
  115. * vers lequel l'utilisateur sera redirigé après
  116. * s'être authentifié.
  117. *
  118. * @return string AuthSub URL
  119. */
  120. function getAuthSubUrl()
  121. {
  122. $next = getCurrentUrl();
  123. $scope = 'http://picasaweb.google.com/data';
  124. $secure = false;
  125. $session = true;
  126. return Zend_Gdata_AuthSub::getAuthSubTokenUri($next,
  127. $scope,
  128. $secure,
  129. $session);
  130. }
  131. /**
  132. * Retourne un objet servant de client HTTP avec les bons en-têtes,
  133. * permettant de communiquer avec les services Google, et utilisant
  134. * l'authentification AuthSub.
  135. *
  136. * Utilise $_SESSION['sessionToken'] pour stocker le jeton de session
  137. * AuthSub après l'avoir obtenu. $_GET['token'] récupère ce jeton
  138. * après la redirection d'authentification
  139. *
  140. * @return Zend_Http_Client
  141. */
  142. function getAuthSubHttpClient()
  143. {
  144. global $_SESSION, $_GET;
  145. if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
  146. $_SESSION['sessionToken'] =
  147. Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
  148. }
  149. $client =
  150. Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
  151. return $client;
  152. }
  153. /**
  154. * Créer une instance du service, redirigeant l'utilisateur
  155. * vers le serveur AuthSub si nécéssaire.
  156. */
  157. $service = new Zend_Gdata_Photos(getAuthSubHttpClient());
  158. ]]></programlisting>
  159. <para>Enfin, un client non authentifié peut aussi être crée :</para>
  160. <programlisting role="php"><![CDATA[
  161. // Création d'une instance du service en mode non authentifié
  162. $service = new Zend_Gdata_Photos();
  163. ]]></programlisting>
  164. </sect3>
  165. </sect2>
  166. <sect2 id="zend.gdata.photos.queries">
  167. <title>Comprendre et construire des requêtes</title>
  168. <para>Pour créer des requêtes vers le service Web, vous devrez utiliser une de ces classes :</para>
  169. <itemizedlist>
  170. <listitem>
  171. <para><firstterm>User</firstterm> Cette classe requêtera tout ce qui concerne un utilisateur du service.
  172. Sans spécifier d'utilisateur, "default" sera utilisé.</para>
  173. </listitem>
  174. <listitem>
  175. <para><firstterm>Album</firstterm> Cette classe va servir de base pour toutes les requêtes concernant
  176. les albums Picasa.</para>
  177. </listitem>
  178. <listitem>
  179. <para><firstterm>Photo</firstterm> Cette classe va servir de base pour toutes les requêtes concernant
  180. les photos Picasa.</para>
  181. </listitem>
  182. </itemizedlist>
  183. <para>Une <code>UserQuery</code> peut être construite comme suit :</para>
  184. <programlisting role="php"><![CDATA[
  185. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  186. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  187. $service = new Zend_Gdata_Photos($client);
  188. $query = new Zend_Gdata_Photos_UserQuery();
  189. $query->setUser("sample.user");
  190. ]]></programlisting>
  191. <para>Pour chaque requête, des paramètres de limitations de la recherche peuvent être passés grâce aux méthodes
  192. get(Paramètre) and set(Paramètre) :</para>
  193. <itemizedlist>
  194. <listitem>
  195. <para><firstterm>Projection</firstterm> spécifie le format de retour des données dans le flux. Peut être
  196. "api" ou "base". En temps normal, "api" est conseillé, c'est la valeur par défaut d'ailleurs.</para>
  197. </listitem>
  198. <listitem>
  199. <para><firstterm>Type</firstterm> détermine le type des éléments retournés, "feed"(défaut) ou
  200. "entry".</para>
  201. </listitem>
  202. <listitem>
  203. <para><firstterm>Access</firstterm> détermine la visibilité des éléments retournés, "all"(défaut),
  204. "public", ou "private". Les éléments non publics ne seront retournés que si le client est
  205. authentifié.</para>
  206. </listitem>
  207. <listitem>
  208. <para><firstterm>Tag</firstterm> fournit un filtre par mots-clés sur les éléments retournés.</para>
  209. </listitem>
  210. <listitem>
  211. <para><firstterm>Kind</firstterm> détermine un filtre sur la sorte (le type) d'éléments
  212. retournés.</para>
  213. </listitem>
  214. <listitem>
  215. <para><firstterm>ImgMax</firstterm> spécifie un filtre par dimension maximale sur les éléments
  216. retournés.</para>
  217. </listitem>
  218. <listitem>
  219. <para><firstterm>Thumbsize</firstterm> spécifie un filtre par dimension maximale des miniatures
  220. retournées.</para>
  221. </listitem>
  222. <listitem>
  223. <para><firstterm>User</firstterm> spécifie l'utilisateur dont les éléments sont recherchés. Par défaut,
  224. "default".</para>
  225. </listitem>
  226. <listitem>
  227. <para><firstterm>AlbumId</firstterm> spécifie l'identifiant de l'album recherché. Ceci ne s'applique
  228. qu'aux requêtes album et photo. Dans le cas d'une recherche de photo, ceci indique l'album dans lequel
  229. effectuer la requête de recherche. Ce paramètre annule et remplace AlbumName, si spécifié.</para>
  230. </listitem>
  231. <listitem>
  232. <para><firstterm>AlbumName</firstterm> spécifie le nom de l'album recherché. Ceci ne s'applique qu'aux
  233. requêtes album et photo. Dans le cas d'une recherche de photo, ceci indique l'album dans lequel
  234. effectuer la requête de recherche. Ce paramètre annule et remplace AlbumId, si spécifié.</para>
  235. </listitem>
  236. <listitem>
  237. <para><firstterm>PhotoId</firstterm> spécifie l'identifiant de la photo recherchée. Ceci ne s'applique
  238. qu'aux requêtes photo.</para>
  239. </listitem>
  240. </itemizedlist>
  241. </sect2>
  242. <sect2 id="zend.gdata.photos.retrieval">
  243. <title>Récupérer des flux et des éléments</title>
  244. <para>Le service propose des méthodes de récupération de flux, ou d'éléments simples, concernant les
  245. utilisateurs, albums, ou photos.</para>
  246. <sect3 id="zend.gdata.photos.user_retrieval">
  247. <title>Récupérer un utilisateur</title>
  248. <para>Le service propose de récupérer un utilisateur, et toutes les infos de son flux, comme ses photos, ses
  249. albums.... Si le client est authentifié et demande des informations sur son propre compte, alors les
  250. éléments marqués comme "<code>hidden</code>" seront aussi retournés.</para>
  251. <para>Le flux de l'utilisateur est accessible en passant son nom à la méthode <code>getUserFeed</code>
  252. :</para>
  253. <programlisting role="php"><![CDATA[
  254. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  255. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  256. $service = new Zend_Gdata_Photos($client);
  257. try {
  258. $userFeed = $service->getUserFeed("sample.user");
  259. } catch (Zend_Gdata_App_Exception $e) {
  260. echo "Error: " . $e->getMessage();
  261. }
  262. ]]></programlisting>
  263. <para>Ou alors, le flux peut être requêté directement :</para>
  264. <programlisting role="php"><![CDATA[
  265. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  266. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  267. $service = new Zend_Gdata_Photos($client);
  268. $query = new Zend_Gdata_Photos_UserQuery();
  269. $query->setUser("sample.user");
  270. try {
  271. $userFeed = $service->getUserFeed(null, $query);
  272. } catch (Zend_Gdata_App_Exception $e) {
  273. echo "Error: " . $e->getMessage();
  274. }
  275. ]]></programlisting>
  276. <para>Construire une requête donne aussi accès aux éléments d'un utilisateur :</para>
  277. <programlisting role="php"><![CDATA[
  278. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  279. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  280. $service = new Zend_Gdata_Photos($client);
  281. $query = new Zend_Gdata_Photos_UserQuery();
  282. $query->setUser("sample.user");
  283. $query->setType("entry");
  284. try {
  285. $userEntry = $service->getUserEntry($query);
  286. } catch (Zend_Gdata_App_Exception $e) {
  287. echo "Error: " . $e->getMessage();
  288. }
  289. ]]></programlisting>
  290. </sect3>
  291. <sect3 id="zend.gdata.photos.album_retrieval">
  292. <title>Récupérer un album</title>
  293. <para>Le service donne accès aux flux d'albums et à leurs contenus.</para>
  294. <para>Le flux d'albums est disponible en construisant un objet de requête et en le passant à
  295. <code>getAlbumFeed</code> :</para>
  296. <programlisting role="php"><![CDATA[
  297. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  298. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  299. $service = new Zend_Gdata_Photos($client);
  300. $query = new Zend_Gdata_Photos_AlbumQuery();
  301. $query->setUser("sample.user");
  302. $query->setAlbumId("1");
  303. try {
  304. $albumFeed = $service->getAlbumFeed($query);
  305. } catch (Zend_Gdata_App_Exception $e) {
  306. echo "Error: " . $e->getMessage();
  307. }
  308. ]]></programlisting>
  309. <para>L'objet de requête accepte aussi un nom d'album avec <code>setAlbumName</code>. Attention, ceci annule
  310. un identifiant d'album éventuellement précédemment spécifié.</para>
  311. <para>Construire une requête donne aussi accès au requêtage d'un album :</para>
  312. <programlisting role="php"><![CDATA[
  313. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  314. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  315. $service = new Zend_Gdata_Photos($client);
  316. $query = new Zend_Gdata_Photos_AlbumQuery();
  317. $query->setUser("sample.user");
  318. $query->setAlbumId("1");
  319. $query->setType("entry");
  320. try {
  321. $albumEntry = $service->getAlbumEntry($query);
  322. } catch (Zend_Gdata_App_Exception $e) {
  323. echo "Error: " . $e->getMessage();
  324. }
  325. ]]></programlisting>
  326. </sect3>
  327. <sect3 id="zend.gdata.photos.photo_retrieval">
  328. <title>Récupérer une Photo</title>
  329. <para>Le service permet la récupération de flux de photos, et des commentaires et/ou mots-clés
  330. associés</para>
  331. <para>Le flux de photos est accessible en construisant un objet de requête et en le passant à la méthode
  332. <code>getPhotoFeed</code> :</para>
  333. <programlisting role="php"><![CDATA[
  334. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  335. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  336. $service = new Zend_Gdata_Photos($client);
  337. $query = new Zend_Gdata_Photos_PhotoQuery();
  338. $query->setUser("sample.user");
  339. $query->setAlbumId("1");
  340. $query->setPhotoId("100");
  341. try {
  342. $photoFeed = $service->getPhotoFeed($query);
  343. } catch (Zend_Gdata_App_Exception $e) {
  344. echo "Error: " . $e->getMessage();
  345. }
  346. ]]></programlisting>
  347. <para>Construire une requête donne aussi accès au requêtage d'une photo :</para>
  348. <programlisting role="php"><![CDATA[
  349. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  350. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  351. $service = new Zend_Gdata_Photos($client);
  352. $query = new Zend_Gdata_Photos_PhotoQuery();
  353. $query->setUser("sample.user");
  354. $query->setAlbumId("1");
  355. $query->setPhotoId("100");
  356. $query->setType("entry");
  357. try {
  358. $photoEntry = $service->getPhotoEntry($query);
  359. } catch (Zend_Gdata_App_Exception $e) {
  360. echo "Error: " . $e->getMessage();
  361. }
  362. ]]></programlisting>
  363. </sect3>
  364. <sect3 id="zend.gdata.photos.comment_retrieval">
  365. <title>Récupérer des commentaires</title>
  366. <para>Vous pouvez récupérer des commentaires depuis des éléments divers de flux. En spécifiant à votre
  367. requête un paramètre de "comment", celle-ci retournera les mots-clés associés à la ressource demandée (user,
  368. album ou photo)</para>
  369. <para>Voici comment effectuer des actions sur les commentaires récupérés d'une photo :</para>
  370. <programlisting role="php"><![CDATA[
  371. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  372. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  373. $service = new Zend_Gdata_Photos($client);
  374. $query = new Zend_Gdata_Photos_PhotoQuery();
  375. $query->setUser("sample.user");
  376. $query->setAlbumId("1");
  377. $query->setPhotoId("100");
  378. $query->setKind("comment");
  379. try {
  380. $photoFeed = $service->getPhotoFeed($query);
  381. foreach ($photoFeed as $entry) {
  382. if ($entry instanceof Zend_Gdata_Photos_CommentEntry) {
  383. // Faites quelque chose avec le commentaire
  384. }
  385. }
  386. } catch (Zend_Gdata_App_Exception $e) {
  387. echo "Error: " . $e->getMessage();
  388. }
  389. ]]></programlisting>
  390. </sect3>
  391. <sect3 id="zend.gdata.photos.tag_retrieval">
  392. <title>Récupérer des mots-clés</title>
  393. <para>Vous pouvez récupérer des mots-clés depuis des éléments divers de flux. En spécifiant à votre requête
  394. un paramètre de "tag", celle-ci retournera les mots-clés associés à la ressource demandée.</para>
  395. <para>Voici comment effectuer des actions sur les mots-clés récupérés d'une photo :</para>
  396. <programlisting role="php"><![CDATA[
  397. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  398. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  399. $service = new Zend_Gdata_Photos($client);
  400. $query = new Zend_Gdata_Photos_PhotoQuery();
  401. $query->setUser("sample.user");
  402. $query->setAlbumId("1");
  403. $query->setPhotoId("100");
  404. $query->setKind("tag");
  405. try {
  406. $photoFeed = $service->getPhotoFeed($query);
  407. foreach ($photoFeed as $entry) {
  408. if ($entry instanceof Zend_Gdata_Photos_TagEntry) {
  409. // Faites quelque chose avec le mot-clé
  410. }
  411. }
  412. } catch (Zend_Gdata_App_Exception $e) {
  413. echo "Error: " . $e->getMessage();
  414. }
  415. ]]></programlisting>
  416. </sect3>
  417. </sect2>
  418. <sect2 id="zend.gdata.photos.creation">
  419. <title>Créer des ressources</title>
  420. <para>Des opérations de création sont possible, qu'il s'agisse d'albums, photos, commentaires, ou
  421. mots-clés.</para>
  422. <sect3 id="zend.gdata.photos.album_creation">
  423. <title>Créer un album</title>
  424. <para>Il est possible de créer un album, pour les clients authentifiés :</para>
  425. <programlisting role="php"><![CDATA[
  426. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  427. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  428. $service = new Zend_Gdata_Photos($client);
  429. $entry = new Zend_Gdata_Photos_AlbumEntry();
  430. $entry->setTitle($service->newTitle("test album"));
  431. $service->insertAlbumEntry($entry);
  432. ]]></programlisting>
  433. </sect3>
  434. <sect3 id="zend.gdata.photos.photo_creation">
  435. <title>Créer une photo</title>
  436. <para>Créer une photo est possible pour les clients authentifiés, procédez comme suit :</para>
  437. <programlisting role="php"><![CDATA[
  438. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  439. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  440. $service = new Zend_Gdata_Photos($client);
  441. // $photo est le nom d'un fichier issu d'un formulaire d'uplaod
  442. $fd = $service->newMediaFileSource($photo["tmp_name"]);
  443. $fd->setContentType($photo["type"]);
  444. $entry = new Zend_Gdata_Photos_PhotoEntry();
  445. $entry->setMediaSource($fd);
  446. $entry->setTitle($service->newTitle($photo["name"]));
  447. $albumQuery = new Zend_Gdata_Photos_AlbumQuery;
  448. $albumQuery->setUser("sample.user");
  449. $albumQuery->setAlbumId("1");
  450. $albumEntry = $service->getAlbumEntry($albumQuery);
  451. $service->insertPhotoEntry($entry, $albumEntry);
  452. ]]></programlisting>
  453. </sect3>
  454. <sect3 id="zend.gdata.photos.comment_creation">
  455. <title>Créer un commentaire pour une photo</title>
  456. <para>Il est possible de créer un commentaire pour une photo, voici un exemple :</para>
  457. <programlisting role="php"><![CDATA[
  458. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  459. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  460. $service = new Zend_Gdata_Photos($client);
  461. $entry = new Zend_Gdata_Photos_CommentEntry();
  462. $entry->setTitle($service->newTitle("comment"));
  463. $entry->setContent($service->newContent("comment"));
  464. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  465. $photoQuery->setUser("sample.user");
  466. $photoQuery->setAlbumId("1");
  467. $photoQuery->setPhotoId("100");
  468. $photoQuery->setType('entry');
  469. $photoEntry = $service->getPhotoEntry($photoQuery);
  470. $service->insertCommentEntry($entry, $photoEntry);
  471. ]]></programlisting>
  472. </sect3>
  473. <sect3 id="zend.gdata.photos.tag_creation">
  474. <title>Créer un mot-clé pour une photo</title>
  475. <para>Il est possible de créer un mot-clé pour une photo, voici un exemple :</para>
  476. <programlisting role="php"><![CDATA[
  477. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  478. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  479. $service = new Zend_Gdata_Photos($client);
  480. $entry = new Zend_Gdata_Photos_TagEntry();
  481. $entry->setTitle($service->newTitle("tag"));
  482. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  483. $photoQuery->setUser("sample.user");
  484. $photoQuery->setAlbumId("1");
  485. $photoQuery->setPhotoId("100");
  486. $photoQuery->setType('entry');
  487. $photoEntry = $service->getPhotoEntry($photoQuery);
  488. $service->insertTagEntry($entry, $photoEntry);
  489. ]]></programlisting>
  490. </sect3>
  491. </sect2>
  492. <sect2 id="zend.gdata.photos.deletion">
  493. <title>Supprimer des éléments</title>
  494. <para>Il est possible de supprimer albums, photos, commentaires, et mots-clés.</para>
  495. <sect3 id="zend.gdata.photos.album_deletion">
  496. <title>Supprimer un album</title>
  497. <para>Supprimer un album est possible si le client est authentifié :</para>
  498. <programlisting role="php"><![CDATA[
  499. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  500. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  501. $service = new Zend_Gdata_Photos($client);
  502. $albumQuery = new Zend_Gdata_Photos_AlbumQuery;
  503. $albumQuery->setUser("sample.user");
  504. $albumQuery->setAlbumId("1");
  505. $albumQuery->setType('entry');
  506. $entry = $service->getAlbumEntry($albumQuery);
  507. $service->deleteAlbumEntry($entry, true);
  508. ]]></programlisting>
  509. </sect3>
  510. <sect3 id="zend.gdata.photos.photo_deletion">
  511. <title>Supprimer une photo</title>
  512. <para>Supprimer une photo est possible si le client est authentifié :</para>
  513. <programlisting role="php"><![CDATA[
  514. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  515. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  516. $service = new Zend_Gdata_Photos($client);
  517. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  518. $photoQuery->setUser("sample.user");
  519. $photoQuery->setAlbumId("1");
  520. $photoQuery->setPhotoId("100");
  521. $photoQuery->setType('entry');
  522. $entry = $service->getPhotoEntry($photoQuery);
  523. $service->deletePhotoEntry($entry, true);
  524. ]]></programlisting>
  525. </sect3>
  526. <sect3 id="zend.gdata.photos.comment_deletion">
  527. <title>Supprimer un commentaire</title>
  528. <para>Supprimer un commentaire est possible si le client est authentifié :</para>
  529. <programlisting role="php"><![CDATA[
  530. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  531. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  532. $service = new Zend_Gdata_Photos($client);
  533. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  534. $photoQuery->setUser("sample.user");
  535. $photoQuery->setAlbumId("1");
  536. $photoQuery->setPhotoId("100");
  537. $photoQuery->setType('entry');
  538. $path = $photoQuery->getQueryUrl() . '/commentid/' . "1000";
  539. $entry = $service->getCommentEntry($path);
  540. $service->deleteCommentEntry($entry, true);
  541. ]]></programlisting>
  542. </sect3>
  543. <sect3 id="zend.gdata.photos.tag_deletion">
  544. <title>Supprimer un mot-clé</title>
  545. <para>Supprimer un mot-clé est possible, si le client est authentifié :</para>
  546. <programlisting role="php"><![CDATA[
  547. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  548. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  549. $service = new Zend_Gdata_Photos($client);
  550. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  551. $photoQuery->setUser("sample.user");
  552. $photoQuery->setAlbumId("1");
  553. $photoQuery->setPhotoId("100");
  554. $photoQuery->setKind("tag");
  555. $query = $photoQuery->getQueryUrl();
  556. $photoFeed = $service->getPhotoFeed($query);
  557. foreach ($photoFeed as $entry) {
  558. if ($entry instanceof Zend_Gdata_Photos_TagEntry) {
  559. if ($entry->getContent() == $tagContent) {
  560. $tagEntry = $entry;
  561. }
  562. }
  563. }
  564. $service->deleteTagEntry($tagEntry, true);
  565. ]]></programlisting>
  566. </sect3>
  567. <sect3 id="zend.gdata.photos.optimistic_concurrenty">
  568. <title>Gestion des accès concurrents</title>
  569. <para>Les flux GData, dont ceux de Picasa Web Albums, implémentent un système d'accès concurrent qui empêche
  570. les changements avec écrasements par inadvertance. Si vous demandez l'effacement d'une ressource qui a été
  571. modifiée depuis votre dernière requête, alors une exception sera levée, sauf si vous demandez le contraire
  572. explicitement (dans un tel cas, la procédure d'effacement sera réessayée sur l'élément mis à jour).</para>
  573. <para>Voici un exemple de gestion des versions et accès concurrent sur un effacement avec
  574. <code>deleteAlbumEntry</code>:</para>
  575. <programlisting role="php"><![CDATA[
  576. // $album est l'albumEntry à effacer
  577. try {
  578. $this->delete($album);
  579. } catch (Zend_Gdata_App_HttpException $e) {
  580. if ($e->getMessage()->getStatus() === 409) {
  581. $entry =
  582. new Zend_Gdata_Photos_AlbumEntry($e->getMessage()
  583. ->getBody());
  584. $this->delete($entry->getLink('edit')->href);
  585. } else {
  586. throw $e;
  587. }
  588. }
  589. ]]></programlisting>
  590. </sect3>
  591. </sect2>
  592. </sect1>