| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.gdata.photos">
- <title>Picasa Web Alben verwenden</title>
- <para>
- Picasa Web Alben ist ein Service der es Benutzer erlaubt Alben von Ihren eigenen Bildern zu
- verwalten, und die Alben und Bilder von anderen anzusehen. Die <acronym>API</acronym> bietet
- ein programmtechnisches Interface für diesen Service, der es Benutzer erlaubt hinzuzufügen,
- zu aktualisieren, und von Ihren Alben zu löschen, genauso wie die Möglichkeit Tags und
- Kommentare auf Fotos zu gestatten.
- </para>
- <para>
- Der Zugriff auf öffentliche Alben und Photos ist nicht durch einen Zugang beschränkt.
- Trotzdem muß ein Benutzer angemeldet sein für einen nicht-nur-lesenden Zugriff.
- </para>
- <para>
- Für weitere Informationen über die <acronym>API</acronym>, inklusive Anleitungen für das
- Aktivieren des <acronym>API</acronym> Zugriffs, sollte in die <ulink
- url="http://code.google.com/apis/picasaweb/overview.html">Picasa Web Alben Daten
- <acronym>API</acronym> Übersicht</ulink> gesehen werden.
- </para>
- <note>
- <title>Authentifizierung</title>
- <para>
- Die <acronym>API</acronym> bietet Authentifizierung über AuthSub (vorgeschlagen) und
- ClientAuth. <acronym>HTTP</acronym> Verbindungen müssen für einen Lesezugriff
- authentifiziert sein, aber nicht-authentifizierte Verbindungen haben nur-lesenden
- Zugriff.
- </para>
- </note>
- <sect2 id="zend.gdata.photos.connecting">
- <title>Zum Service verbinden</title>
- <para>
- Die Picasa Web Album <acronym>API</acronym> basiert, wie alle GData
- <acronym>API</acronym>s, auf dem Atom Publishing Protokoll (APP), einem
- <acronym>XML</acronym> basierenden Format für gemanagte web-basierende Ressourcen. Der
- Verkehr zwischen Client und den Servers tritt über <acronym>HTTP</acronym> auf, und
- erlaubt sowohl authentifizierte als auch nicht authentifizierte Verbindungen.
- </para>
- <para>
- Bevor irgendeine Transaktion stattfinden kann muß diese Verbindung hergestellt werden.
- Die Erstellung einer Verbindung zum Picasa Servern beinhaltet zwei Schritte:
- Erstellung eines <acronym>HTTP</acronym> Clients und Binden einer
- <classname>Zend_Gdata_Photos</classname> Instanz an diesen Client.
- </para>
- <sect3 id="zend.gdata.photos.connecting.authentication">
- <title>Authentifikation</title>
- <para>
- Die Google Picasa <acronym>API</acronym> erlaubt erlaubt den Zugriff sowohl auf
- öffentliche als auch auf private Kalender Feeds. Öffentliche Feeds benötigen keine
- Authentifizierung sind aber nur-lesend und bieten eine reduzierte Funktionalität.
- Private Feeds bieten die kompletteste Funktionalität benötigen aber eine
- authentifizierte Verbindung zum Picasa Server. Es gibt drei Authentifizierungs
- Schemata die von Google Picasa unterstützt werden:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <firstterm>ClientAuth</firstterm> bietet direkte Benutzername/Passwort
- Authentifizierung zu den Picasa Servern. Da dieses Schema erfordert das
- Benutzer die Anwendung mit Ihrem Passwort versorgen, ist diese
- Authentifizierung nur zu empfehlen wenn andere Authentifizierungs Schemas
- nicht anwendbar sind.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>AuthSub</firstterm> erlaubt die Authentifizierung zu den Picasa
- Servern über einen Google Proxy Server. Das bietet den gleichen Level von
- Bequemlichkeit wie ClientAuth aber ohne die Sicherheits Risiken, was es zu
- einer idealen Wahl für Web basierende Anwendungen macht.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Die <classname>Zend_Gdata</classname> Bibliothek bietet Unterstützung für beide
- Authentifizierungs Schemas. Der Rest dieses Kapitels nimmt an das die vorhandenen
- Authentifizierungs Schemas geläufig sind und wie eine korrekte Authentifizierte
- Verbindung erstellt wird. Für weitere Details kann in die <link
- linkend="zend.gdata.introduction.authentication">Authentifizierungs
- Sektion</link> dieses Handbuches, oder in die <ulink
- url="http://code.google.com/apis/gdata/auth.html">Authentifizierungs Übersicht
- im Google Data <acronym>API</acronym> Entwickler Guide</ulink> gesehen werden.
- </para>
- </sect3>
- <sect3 id="zend.gdata.photos.connecting.service">
- <title>Erstellen einer Service Instanz</title>
- <para>
- Um mit den Servern zu interagieren, bietet diese Bibliothek die
- <classname>Zend_Gdata_Photos</classname> Service Klasse. Diese Klasse bietet ein
- übliches Interface zu den Google Data und Atom Publishing Protocol Modellen und
- assistiert in der Behandlung der Anfragen zum und von den Kalender Servern.
- </para>
- <para>
- Sobald ein Authentifizierung Schema ausgewählt wurde, besteht der nächste Schritt
- darin eine Instanz von <classname>Zend_Gdata_Photos</classname> zu erstellen. Der
- Klassen Konstruktor nimmt eine Instanz von <classname>Zend_Http_Client</classname>
- als einzelnes Argument. Das bietet ein Interface für AuthSub und ClientAuth
- Authentifizierungen, da beide von Ihnen die Erstellung eines speziellen
- authentifizierten <acronym>HTTP</acronym> Clients benötigen. Wenn keine Argumente
- angegeben werden, wird automatisch eine unauthentifizierte Instanz von
- <classname>Zend_Http_Client</classname> erstellt.
- </para>
- <para>
- Das folgende Beispiel zeigt wie man eine Service Klasse erstellt und dabei die
- ClientAuth Authentifizierung verwendet:
- </para>
- <programlisting language="php"><![CDATA[
- // Parameter für die ClientAuth Authentifizierung
- $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
- $user = "sample.user@gmail.com";
- $pass = "pa$$w0rd";
- // Erstellt einen authentifizierten HTTP Client
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- // Erstellt eine Instanz des Kalender Services
- $service = new Zend_Gdata_Photos($client);
- ]]></programlisting>
- <para>
- Eine Service Instanz die AuthSub verwendet, kann ähnlich erstellt werden, aber durch
- eine etwas längere Schreibweise:
- </para>
- <programlisting language="php"><![CDATA[
- session_start();
- /**
- * Gibt die komplette URL der aktuellen Seite zurück, basierend auf den env Variablen
- *
- * Verwendete Env Variablen:
- * $_SERVER['HTTPS'] = (on|off|)
- * $_SERVER['HTTP_HOST'] = Wert des Hosts: header
- * $_SERVER['SERVER_PORT'] = Port Nummer (nur verwendet wenn nicht http/80,https/443)
- * $_SERVER['REQUEST_URI'] = Die URI nach der Methode der HTTP Anfrage
- *
- * @return string Current URL
- */
- function getCurrentUrl()
- {
- global $_SERVER;
- /**
- * php_self filtern um Sicherheits Lücken zu vermeiden.
- */
- $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;
- }
- /**
- * Gibt die AuthSub URL zurück welche der Benutzer besuchen muß um Anfrage
- * dieser Anwendung zu authentifizieren
- *
- * Verwendet getCurrentUrl() um die nächste URL zu erhalten zu welcher der
- * Benutzer weitergeleitet wird nachdem er
- * sich erfolgreich beim Google Service authentifiziert hat.
- *
- * @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);
- }
- /**
- * Gibt ein HTTP Client Objekt mit den richtigen Headern für die Kommunikation
- * with Google zurück wobei
- * AuthSub Authentifizierung verwendet wird
- *
- * Verwendet $_SESSION['sessionToken'] um das AuthSub Session Token zu
- * speichern nachdem es erhalten wurde.
- * Das einmal verwendbare Token das in der URL bei der Umleitung angeboten wird
- * nachdem der Benutzer auf
- * Google erfolgreich authentifiziert wurde, wird von der $_GET['token']
- * Variable empfangen.
- *
- * @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;
- }
- /**
- * Erstellt eine neue Instant des Services und leitet den Benutzer zum AuthSub
- * Server um wenn das notwendig ist.
- */
- $service = new Zend_Gdata_Photos(getAuthSubHttpClient());
- ]]></programlisting>
- <para>
- Zuletzt kann ein nicht authentifizierter Server für die Verwendung mit öffentlichen
- Feeds erstellt werden:
- </para>
- <programlisting language="php"><![CDATA[
- // Erstellt eine Instanz des Services und verwendet einen nicht authentifizierten HTTP Client
- $service = new Zend_Gdata_Photos();
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.gdata.photos.queries">
- <title>Verstehen und Erstellen von Abfragen</title>
- <para>
- Die primäre Methode um Daten vom Service anzufragen ist die Erstellung einer Abfrage.
- Es gibt Abfrage Klassen für jede der folgenden Typen:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <firstterm>User</firstterm> wird verwendet um den Benutzer zu spezifizieren
- dessen Daten gesucht werden, und wird als EMail Adresse spezifiziert. Wenn kein
- Benutzer angegeben wurde, wird stattdessen "default" verwendet um den aktuellen
- authentifizierten Benutzer zu bezeichnen (wenn er authentifiziert wurde).
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Album</firstterm> wird verwendet um das Album zu spezifizieren das
- gesucht werden soll, und wird entweder als ID oder als Name des Albums
- spezifiziert.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Photo</firstterm> wird verwendet um das Photo zu spezifizieren das
- gesucht werden soll, und wird als ID spezifiziert.
- </para>
- </listitem>
- </itemizedlist>
- <para>Eine neue <classname>UserQuery</classname> kann wie folgt erstellt werden:</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>
- Für jede Abfrage kann eine Anzahl an Parameter, welche die Suche limitieren, abgefragt,
- oder mit get(Parameter) und set(Parameter) spezifiziert werden. Diese sind wie folgt:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <firstterm>Projection</firstterm> setzt das Format der im Feed zurückgegebenen
- Daten entweder "api" oder "base". Normal wird "api" gewählt. "api" ist auch der
- Standardwert.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Type</firstterm> setzt den Typ der Elemente die zurückgegeben werden,
- entweder "feed" oder "entry". Der Standardwert ist "feed".
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Access</firstterm> setzt die Sichtbarkeit von Teilen die
- zurückgegeben werden, mit "all", "public", oder "private". Der Standardwert ist
- "all". Nicht-öffentliche Elemente werden nur zurückgegeben wenn die Abfrage
- durch authentifizierte Benutzer gesucht wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Tag</firstterm> setzt einen Tag Filter für zurückgegebenen Teile.
- Wenn ein Tag gesetzt ist werden nur Teile mit so einem Tag im Wert
- zurückgegeben.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Kind</firstterm> setzt die Art von Elementen die zurückgegeben wird.
- Wenn eine Art spezifiziert wird, werden nur Einträge zurückgegeben die auf
- diesen Wert passen.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>ImgMax</firstterm> setzt das Maximum der Bildgröße für zurückgegebene
- Einträge. Nur Bildeinträge die kleiner als dieser Wert sind werden
- zurückgegeben.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>Thumbsize</firstterm> setzt die Vorschaugröße von Einträgen die
- zurückgegeben werden. Jeder empfangene Eintrag wird eine Vorschaugröße haben die
- diesem Wert entspricht.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>User</firstterm> setzt den Benutzer nach dessen Daten gesucht werden
- soll. Der Standardwert ist "default".
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>AlbumId</firstterm> setzt die ID des Albums nachdem gesucht wird.
- Dieses Element ist nur für Album und Photo Abfragen gültig. Im Fall von Photo
- Abfragen spezifiziert dieser Wert das Album das die angefragten Photos enthält.
- Die Album ID schließt sich gegenseitig mit dem Album Namen aus. Das Setzen des
- einen Entfernt den anderen.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>AlbumName</firstterm> setzt den Namen des Albums nachdem gesucht
- wird. Dieses Element ist nur für Album und Photo Abfragen gültig. Im Fall von
- Photo Abfragen spezifiziert dieser Wert das Album das die angefragten Photos
- enthält. Der Album Name schließt sich gegenseitig mit der Album ID aus. Das
- Setzen des einen Entfernt den anderen.
- </para>
- </listitem>
- <listitem>
- <para>
- <firstterm>PhotoId</firstterm> setzt die ID des Photos nachdem gesucht wird.
- Dieses Element ist nur für Photo Abfragen gültig.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.gdata.photos.retrieval">
- <title>Feeds und Einträge erhalten</title>
- <para>
- Das Service besitzt Funktionen um einen Feed oder individuelle Einträge für Benutzer,
- Alben, und individuelle Photos zu erhalten.
- </para>
- <sect3 id="zend.gdata.photos.user_retrieval">
- <title>Einen Benutzer erhalten</title>
- <para>
- Dieser Service unterstützt das Erhalten eines Benutzer Feeds und Listen von Benutzer
- Inhalten. Wenn der abgefragte Benutzer auch der authentifizierter Benutzer ist,
- werden auch Einträge die als "<emphasis>hidden</emphasis>" markiert sind,
- zurückgegeben.
- </para>
- <para>
- Auf den Benutzer Feed kann durch die Übergabe eines Benutzernamens an die
- <methodname>getUserFeed()</methodname> Methode zugegriffen werden:
- </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 "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- <para>
- Oder, der auf den Feed kann zugegriffen werden indem zuerst eine Abfrage erstellt
- wird:
- </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 "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- <para>
- Die Erstellung einer Abfrage bietet auch die Möglichkeit ein Benutzer Eintrags
- Objekt abzufragen:
- </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 "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.album_retrieval">
- <title>Ein Album erhalten</title>
- <para>
- Der Service unterstützt auch das erhalten eines Album Feeds und von Listen des
- Inhalts von Alben.
- </para>
- <para>
- Auf einen Album Feed wird durch die Erstellung eines Abfrage Objekts zugegriffen und
- dessen Übergabe an <methodname>getAlbumFeed()</methodname>:
- </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 "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- <para>
- Alternativ kann dem Abfrage Objekt ein Album Name mit
- <methodname>setAlbumName()</methodname> angegeben werden. Das Setzen des Album
- Namens schließt sich gegenseitig mit der Album ID aus und das Setzen des einen
- entfernt den anderen Wert.
- </para>
- <para>
- Die Erstellung einer Abfragen bietet auch die Möglichkeit ein Album Eintrags Objekt
- abzufragen:
- </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 "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.photo_retrieval">
- <title>Ein Photo erhalten</title>
- <para>
- Der Service unterstützt auch das erhalten eines Photo Feeds und von Listen von
- zugeordneten Kommentaren und Tags.
- </para>
- <para>
- Auf einen Photo Feed wird durch die Erstellung eines Abfrage Objekts zugegriffen und
- dessen Übergabe an <methodname>getPhotoFeed()</methodname>:
- </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 "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- <para>
- Die Erstellung einer Abfragen bietet auch die Möglichkeit ein Photo Eintrags Objekt
- abzufragen:
- </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 "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.comment_retrieval">
- <title>Ein Kommentar erhalten</title>
- <para>
- Der Service unterstützt den Erhalt von Kommentaren von einem Feed eines anderen
- Typs. Durch das Setzen der Abfrage das eine Art von "Kommentar" zurückgegeben wird,
- kann eine Feed Anfrage mit einem speziellen Benutzer, Album oder Photo assoziierte
- Kommentare zurückgeben.
- </para>
- <para>
- Die Durchführung von Aktionen auf jedem der Kommentare eines gegebenen Photos kann
- die folgt vollendet werden:
- </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) {
- // Mach irgendwas mit dem Kommentar
- }
- }
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.photos.tag_retrieval">
- <title>Ein Tag erhalten</title>
- <para>
- Der Service unterstützt den Erhalt von Tags von einem Feed eines anderen Typs. Durch
- das Setzen der Abfrage das eine Art von "Tag" zurückgegeben wird, kann eine Feed
- Anfrage mit einem speziellen Photo assoziierte Tags zurückgeben.
- </para>
- <para>
- Das Ausführen einer Aktrion auf jedem Tag an gegebenen Photos kann wie folgt
- durchgeführt werden:
- </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) {
- // Mach irgendwas mit dem Tag
- }
- }
- } catch (Zend_Gdata_App_Exception $e) {
- echo "Fehler: " . $e->getMessage();
- }
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.gdata.photos.creation">
- <title>Einträge erstellen</title>
- <para>
- Der Service hat Funktionen für die Erstellung von Alben, Photos, Kommentaren und Tags.
- </para>
- <sect3 id="zend.gdata.photos.album_creation">
- <title>Ein Album erstellen</title>
- <para>
- Der Service unterstützt die Erstellung eines neues Albums für authentifizierte
- Benutzer:
- </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>Ein Photo erstellen</title>
- <para>
- Der Service unterstützt die Erstellung eines neuen Photos für authentifizierte
- Benutzer:
- </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 ist der Name der Datei die durch ein HTML Formular hochgeladen wurde
- $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>Erstellen eines Kommentars</title>
- <para>Das Service unterstützt die Erstellung von neuen Kommentaren für ein 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);
- $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>Erstellen eines Tags</title>
- <para>Das Service unterstützt die Erstellung von neuen Tags für ein 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);
- $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>Einträge löschen</title>
- <para>Der Service hat Funktionen um Alben, Photos, Kommentare und Tags zu löschen.</para>
- <sect3 id="zend.gdata.photos.album_deletion">
- <title>Ein Album löschen</title>
- <para>
- Der Service unterstützt das Löschen von Alben für authentifizierte Benutzer:
- </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>Löschen eines Photos</title>
- <para>
- Der Service unterstützt das Löschen von Photos für authentifizierte Benutzer:
- </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>Ein Kommentar löschen</title>
- <para>
- Der Service unterstützt das Löschen von Kommentaren für authentifizierte Benutzer:
- </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>Ein Tag löschen</title>
- <para>
- Das Service unterstützt das Löschen eines Tags für authentifizierte Benutzer:
- </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>Optimistische Gleichzeitigkeit (Notizen für das Löschen)</title>
- <para>
- GData Feeds, inklusive denen des Picasa Web Album Services, implementieren
- optimistische Gleichzeitigkeit, ein Versionsverwaltungs System das vermeidet das
- Benutzer irrtümlich Änderungen überschreiben. Wenn ein Eintrag durch die Service
- Klasse gelöscht wird, wenn der Eintrag geändert wurde seit er zuletzt geholt wurde,
- wird eine Ausnahme geworfen, solange das nicht explizit anders gesetzt wurde (in
- diesem Fall wird die Löschung auf dem aktualisierten Eintrag durchgeführt).
- </para>
- <para>
- Ein Beispiel davon wie die Versionierung während einer Löschung handzuhaben ist wird
- durch <methodname>deleteAlbumEntry()</methodname> gezeigt:
- </para>
- <programlisting language="php"><![CDATA[
- // $album ist ein albumEntry der gelöscht werden soll
- 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>
|