Zend_Gdata_Photos.xml 30 KB

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