| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.gdata.introduction">
- <title>Einführung</title>
- <para>
- Die <acronym>API</acronym>s von Google Data bieten ein programmtechnisches Interface zu
- einigen von Google's Online Services. Das Google Data Protokoll basiert auf dem
- <ulink url="http://ietfreport.isoc.org/idref/draft-ietf-atompub-protocol/">Atom Publishing
- Protokoll</ulink> und erlaubt Client Anwendungen das Empfangen von passenden Anfragen zu
- Daten, senden von Daten, modifizieren von Daten und löschen von Daten wobei Standard
- <acronym>HTTP</acronym> und das Atom Syndication Format verwendet wird. Die
- <classname>Zend_Gdata</classname> Komponente ist ein <acronym>PHP</acronym> 5 Interface für
- den Zugriff auf Daten von Google von <acronym>PHP</acronym> aus. Die
- <classname>Zend_Gdata</classname> Komponente unterstützt auch den Zugriff auf andere
- Services die das Atom Publishing Protokoll implementieren.
- </para>
- <para>
- Siehe <ulink
- url="http://code.google.com/apis/gdata/">http://code.google.com/apis/gdata/</ulink> für
- mehr Informationen über die Google Data <acronym>API</acronym>.
- </para>
- <para>
- Die Services auf die durch <classname>Zend_Gdata</classname> zugegriffen werden kann
- beinhalten unter anderem:
- <itemizedlist>
- <listitem>
- <para>
- <link linkend="zend.gdata.calendar">Google Kalender</link> ist eine populäre
- online Kalender Anwendung.
- </para>
- </listitem>
- <listitem>
- <para>
- <link linkend="zend.gdata.spreadsheets">Google Tabellenkalkulation</link> bietet
- ein gemeinschaftliches online Tabellenkalkulations Tool welches als einfacher
- Datenspeicher für eigene Anwendungen verwendet werden kann.
- </para>
- </listitem>
- <listitem>
- <para>
- <link linkend="zend.gdata.docs">Google Dokumenten Liste</link> bietet eine
- online Liste von allen Tabellenkalkulationen, Wortbearbeitungs Dokumenten, und
- Präsentationen die in einem Google Account gespeichert sind.
- </para>
- </listitem>
- <listitem>
- <para>
- <link linkend="zend.gdata.gapps">Google Versorgung</link> bietet die Möglichkeit
- Benutzerdaten, Spitznamen, Gruppen und Emaillisten auf einer Google Apps
- gehosten Domain zu erstellen, erhalten, aktualisieren und zu löschen.
- </para>
- </listitem>
- <listitem>
- <para>
- <link linkend="zend.gdata.photos">Picasa Web Album</link> bietet eine online
- Photo Sharing Anwendung.
- </para>
- </listitem>
-
- <listitem>
- <para>
- <link linkend="zend.gdata.analytics">Google Analytics</link>
- bietet eine Besucher-Analyse Anwendung.
- </para>
- </listitem>
- <listitem>
- <para>
- <ulink
- url="http://code.google.com/apis/blogger/developers_guide_php.html">Google
- Blogger</ulink> ist ein populärer Internet Provider von "push-button
- Veröffentlichung" und Verbreitung.
- </para>
- </listitem>
- <listitem>
- <para>
- Google CodeSearch erlaubt das Suchen von öffentlichem Source Code für viele
- Projekte.
- </para>
- </listitem>
- <listitem>
- <para>
- Google Notebook erlaubt das sehen von veröffentlichten Notebook Inhalten.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <note>
- <title>Nicht unterstützte Services</title>
- <para>
- <classname>Zend_Gdata</classname> bietet kein Interface zu irgendwelchen anderen Google
- Services wie Search, Gmail, Translation oder Maps. Nur Services die das Google Data
- <acronym>API</acronym> unterstützen werden unterstützt.
- </para>
- </note>
- <sect2 id="zend.gdata.introduction.structure">
- <title>Struktur von Zend_Gdata</title>
- <para>
- <classname>Zend_Gata</classname> besteht aus verschiedenen Typen von Klassen:
- <itemizedlist>
- <listitem>
- <para>
- Service Klassen - abgeleitet von <classname>Zend_Gdata_App</classname>.
- Diese beinhalten auch andere Klassen wie <classname>Zend_Gdata</classname>,
- <classname>Zend_Gdata_Spreadsheeps</classname>, usw. Diese Klassen erlauben
- die Interaktion mit APP oder GData Services und bieten die Möglichkeit Feeds
- und Einträge zu empfangen, Einträge zu senden, zu aktualisieren und zu
- löschen.
- </para>
- </listitem>
- <listitem>
- <para>
- Abfrage Klassen - abgeleitet von <classname>Zend_Gdata_Query</classname>.
- Diese beinhalten auch andere Klassen für spezielle Services, wie
- <classname>Zend_Gdata_Spreadsheet_ListQuery</classname> und
- <classname>Zend_Gdata_Spreadsheets_CellQuery</classname>. Abfrage Klassen
- bieten Methoden die verwendet werden können um Abfragen für Daten zu
- erstellen die von GData Services empfangen werden. Die Methoden inkludieren
- Getter und Setter wie <methodname>setUpdatedMin()</methodname>,
- <methodname>setStartIndex()</methodname>, und
- <methodname>getPublishedMin()</methodname>. Die Abfrage Klassen haben auch
- eine Methode um eine <acronym>URL</acronym> zu erhalten welche die erstellte
- Abfrage repräsentieren. -- <methodname>getQueryUrl()</methodname>.
- Alternativ kann man die Abfrage String Komponente der <acronym>URL</acronym>
- erhalten indem die <methodname>getQueryString()</methodname> Methode
- verwendet wird.
- </para>
- </listitem>
- <listitem>
- <para>
- Feed Klassen - abgeleitet von <classname>Zend_Gdata_App_Feed</classname>.
- Diese beinhalten auch andere Klassen wie
- <classname>Zend_Gdata_Feed</classname>,
- <classname>Zend_Gdata_Spreadsheets_SpreadsheetFeed</classname>, und
- <classname>Zend_Gdata_Spreadsheets_ListFeed</classname>. Diese Klassen
- repräsentieren Feeds von Einträgen die von Services empfangen wurden. Sie
- werden primär verwendet um Daten die von Services zurückgegeben werden zu
- erhalten.
- </para>
- </listitem>
- <listitem>
- <para>
- Eingabe Klassen - abgeleitet von
- <classname>Zend_Gdata_App_Entry</classname>. Diese beinhalten auch andere
- Klassen wie <classname>Zend_Gdata_Entry</classname>, und
- <classname>Zend_Gdata_Spreadsheets_ListEntry</classname>. Diese Klassen
- repräsentieren Einträge die von Services empfangen oder für die Erstellung
- von Daten, die an Services geschickt werden, verwendet werden. Zusätzlich
- zur Möglichkeit die Eigenschaften eines Eintrages (wie den Zellen Wert der
- Tabellenkalkulation) zu setzen, kann das Objekt des Eintrages verwendet
- werden um Aktualisierungs- oder Löschanfragen an ein Service zu senden. Zum
- Beispiel kann <command>$entry->save()</command> aufgerufen werden um
- Änderungen die an einem Eintrage durchgeführt wurden zu einem Service zurück
- zu Speichern von welche der Eintrag initiiert wurde, oder
- <command>$entry->delete()</command> um einen Eintrag von einem Server zu
- Löschen.
- </para>
- </listitem>
- <listitem>
- <para>
- Andere Daten Modell Klassen - abgeleitet von
- <classname>Zend_Gdata_App_Extension</classname>. Diese beinhalten Klassen
- wie <classname>Zend_Gdata_App_Extension_Title</classname> (repräsentiert das
- atom:title <acronym>XML</acronym> Element),
- <classname>Zend_Gdata_Extension_When</classname> (repräsentiert das gd:when
- <acronym>XML</acronym> Element das von dem GData Event "Kind" verwendet
- wird), und <classname>Zend_Gdata_Extension_Cell</classname> (repräsentiert
- das gs:cell <acronym>XML</acronym> Element das von Google
- Tabellenkalkulation verwendet wird). Diese Klassen werden pur verwendet um
- von den Server zurückgegebene Daten zu speichern und für die Erstellung von
- Daten die an Services gesendet werden. Diese beinhalten Getter und Setter
- wie <methodname>setText()</methodname> um den Kindtext Node eines Elements
- zu setzen, <methodname>getText()</methodname> um den Text Node eines
- Elements zu erhalten, <methodname>getStartTime()</methodname> um das
- Startzeit Attribut eines When Elements oder anderen ähnlichen Methoden zu
- empfangen. Die Daten Modell Klassen beinhalten auch Methoden wie
- <methodname>getDOM()</methodname> um eine DOM Repräsentation des Elements
- und aller Kinder zu erhalten, und <methodname>transferFromDOM()</methodname>
- um eine Daten Modell Repräsentation des DOM Baumes zu erstellen.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.services">
- <title>Mit Google Services interagieren</title>
- <para>
- Google Daten Services basieren auf dem Atom Publishing Protokoll (APP) und dem Atom
- Syndication Format. Um mit APP oder den Google Services zu interagieren indem
- <classname>Zend_Gdata</classname> verwendet wird, müssen Service Klassen wie
- <classname>Zend_Gdata_App</classname>, <classname>Zend_Gdata</classname>,
- <classname>Zend_Gdata_Spreadsheets</classname>, usw. verwendet werden. Diese Service
- Klassen bieten Methoden um Daten von Services als Feeds zu empfangen, neue Einträge in
- Feeds einzufügen, Einträge zu aktuslieieren und Einträge zu löschen.
- </para>
- <para>
- Achtung: Ein komplettes Beispiel davon wie mit <classname>Zend_Gdata</classname>
- gearbeitet werden kann ist im <filename>demos/Zend/Gdata</filename> Verzeichnis
- vorhanden. Dieses Beispiel läuft von der Kommandozeile aus, aber die enthaltenen
- Methoden sind einfach in einem Web Anwendung zu portieren.
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.magicfactory">
- <title>Instanzen von Zend_Gdata Klassen erhalten</title>
- <para>
- Der Zend Framework Namensstandard erzwingt das alle Klassen nach der Verzeichnis
- Struktur benannt werden in welcher sie vorhanden sind. Zum Beispiel eine Erweiterung die
- zu Tabellenkalkulation gehört und in
- <filename>Zend/Gdata/Spreadsheets/Extension/...</filename> gespeichert ist, muß als
- Ergebnis <classname>Zend_Gdata_Spreadsheets_Extension_...</classname> benannt werden.
- Das verursacht eine Menge an Tipparbeit wenn versucht wird eine neue Instanz eines
- Zellen Elements zu erstellen!
- </para>
- <para>
- Wir haben eine magische Fabriksmethode in alle Service Klassen (wie
- <classname>Zend_Gdata_App</classname>, <classname>Zend_Gdata</classname>,
- <classname>Zend_Gdata_Spreadsheets</classname>) implementiert welche die Erstellung
- neuer Instanzen von Daten Modellen, Abfragen und anderen Klassen viel einfacher macht.
- Diese magische Fabriksmethode ist durch die Verwendung der magischen
- <methodname>__call()</methodname> Methode implementiert um auf alle Versuche
- <command>$service->newXXX(arg1, arg2, ...)</command> aufzurufen, angewendet zu werden.
- Basieren auf dem Wert von XXX, wird eine Suche in allen registrierten 'Paketen', für die
- gewünschte Klasse, durchgeführt. Hier sind einige Beispiele:
- </para>
- <programlisting language="php"><![CDATA[
- $ss = new Zend_Gdata_Spreadsheets();
- // Erstellt ein Zend_Gdata_App_Spreadsheets_CellEntry
- $entry = $ss->newCellEntry();
- // Erstellt ein Zend_Gdata_App_Spreadsheets_Extension_Cell
- $cell = $ss->newCell();
- $cell->setText('Mein Zellenwert');
- $cell->setRow('1');
- $cell->setColumn('3');
- $entry->cell = $cell;
- // ... $entry kann dann verwendet werden um eine Aktualisierung
- // an eine Google Tabellenkalkulation zu senden
- ]]></programlisting>
- <para>
- Jede Service Klasse im abgeleiteten Baum ist dafür verantwortlich das die richtigen
- 'Pakete' (Verzeichnisse) registriert werden, in welchen dann durch den Aufruf der
- matischen Fabriksmethode, gesucht wird.
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.authentication">
- <title>Google Data Client Authentifizierung</title>
- <para>
- Die meisten Google Daten Services erfordern das sich die Client Anwendung auf dem Google
- Server authentifiziert bevor auf private Daten zugegriffen, oder Daten gespeichert oder
- gelöscht werden können. Es gibt zwei Implementationen der Authentifizierung für Google
- Daten: <link linkend="zend.gdata.authsub">AuthSub</link> und <link
- linkend="zend.gdata.clientlogin">ClientLogin</link>.
- <classname>Zend_Gdata</classname> bietet Klassen Interfaces für beide dieser Methoden.
- </para>
- <para>
- Die meisten anderen Typen von Abfragen auf Google Daten Servicen benötigen keine
- Authentifizierung.
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.dependencies">
- <title>Abhängigkeiten</title>
- <para>
- <classname>Zend_Gdata</classname> verwendet <link
- linkend="zend.http.client">Zend_Http_Client</link> um Anfragen an
- google.com zu senden und Ergebnisse zu erhalten. Die Antworter der meisten Google Data
- Anfragen werden als Subklasse von <classname>Zend_Gdata_App_Feed</classname> oder
- <classname>Zend_Gdata_App_Entry</classname> Klassen zurückgegeben.
- </para>
- <para>
- <classname>Zend_Gdata</classname> nimmt an das die <acronym>PHP</acronym> Anwendung auf
- einem Host läuft der eine direkte Verbindung zum Internet hat. Der
- <classname>Zend_Gdata</classname> Client arbeitet indem er zu Google Daten Servern
- Kontakt aufnimmt.
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.creation">
- <title>Erstellen eines neuen Gdata Klienten</title>
- <para>
- Man muß ein neues Objekt der Klasse <classname>Zend_Gdata_App</classname>,
- <classname>Zend_Gdata</classname>, oder einer dessen Subklassen erstellen die Helfer
- Methoden für servicespezifische Verhaltensweisen anbieten.
- </para>
- <para>
- Der einzige optionale Parameter für den Konstruktor von
- <classname>Zend_Gdata_App</classname> ist eine Instanz von
- <link linkend="zend.http.client">Zend_Http_Client</link>. Wenn dieser Parameter nicht
- übergeben wird, erstellt <classname>Zend_Gdata</classname> ein standardmäßiges
- <classname>Zend_Http_Client</classname> Objekt, welches keine Zugangsdaten zugeordnet
- hat um auf private Feeds zugreifen zu können. Die Spezifizierung des
- <classname>Zend_Http_Client</classname> Objektes erlaubt es auch Konfigurationsoptionen
- an das Client Objekt zu übergeben.
- </para>
- <programlisting language="php"><![CDATA[
- $client = new Zend_Http_Client();
- $client->setConfig( ...options... );
- $gdata = new Zend_Gdata($client);
- ]]></programlisting>
- <para>
- Beginnend mit Zend Framework 1.7, wurde die Unterstützung für die Versionierung des
- Protkolls hinzugefügt. Das erlaut dem Client und Server neue Fesatures zu unterstützen,
- während die Rückwärts Kompatibilität gewahrt bleibt. Wärend die meisten Services das für
- dich selbst durchführen, wenn man eine <classname>Zend_Gdata</classname> Instanz direkt
- erstellt (als Gegensatz zu einer Ihrer Unterklassen), kann es sein das man die
- gewünschte Version des Protokolls spezifizieren will um auf spezielle
- Serverfunktionalitäten zugreifen zu können.
- </para>
- <programlisting language="php"><![CDATA[
- $client = new Zend_Http_Client();
- $client->setConfig( ...options... );
- $gdata = new Zend_Gdata($client);
- $gdata->setMajorProtocolVersion(2);
- $gdata->setMinorProtocolVersion(null);
- ]]></programlisting>
- <para>
- Siehe auch die Sektion über Authentifizierung für Methoden, um ein authentifiziertes
- <classname>Zend_Http_Client</classname> Objekt zu erstellen.
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.parameters">
- <title>Übliche Abfrage Parameter</title>
- <para>
- Es können Parameter spezifiziert werden um Abfragen mit
- <classname>Zend_Gdata</classname> anzupassen. Abfrageparameter werden spezifiziert indem
- Subklassen von <classname>Zend_Gdata_Query</classname> verwendet werden. Die
- <classname>Zend_Gdata_Query</classname> Klasse beinhaltet Methoden um alle
- Abfrageparameter zu setzen die von Gdata Services verwendet werden. Individuelle
- Services, wie Tabellenkalkulationen, bieten auch Abfrageklassen zu definierten
- Parametern welche an das spezielle Service und die Feeds angepasst sind.
- Tabellenkalkulationen beinhalten eine CellQuery Klasse um den Zellen Feed abzufragen und
- eine ListQuery Klasse um den Listen Feed abzufragen, da verschiedene Abfrageparameter
- für jeder dieser Feedtypen möglich sind. Die GData-weiten Parameter werden anbei
- beschrieben.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Der <property>q</property> Parameter spezifiziert eine komplette Textabfrage.
- Der Wert dieses Parameters ist ein String.
- </para>
- <para>
- Dieser Parameter kann mit der <methodname>setQuery()</methodname> Methode
- gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Der <property>alt</property> Parameter spezifiziert den Feed Typ. Der Wert
- dieses Parameters kann <property>atom</property>, <property>rss</property>,
- <property>json</property>, oder <property>json-in-script</property> sein. Wenn
- dieser Parameter nicht spezifiziert wird, ist der Standard Feedtyp
- <property>atom</property>. <classname>Zend_Http_Client</classname> könnte
- verwendet werden um Feeds in anderen Formaten zu empfangen, indem die von der
- <classname>Zend_Gdata_Query</classname> Klasse oder deren Subklassen erzeugten
- Abfrage <acronym>URL</acronym>s verwendet werden.
- </para>
- <para>
- Dieser Parameter kann mit der <methodname>setAlt()</methodname> Methode gesetzt
- werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Der <property>maxResults</property> Parameter begrenzt die Anzahl an Einträgen
- im Feed. Der Wert dieses Parameters ist ein Integer. Die zurückgegebene Anzahl
- an Einträgen im Feed wird diesen Wert nicht überschreiten.
- </para>
- <para>
- Dieser Parameter kann mit der <methodname>setMaxResults()</methodname> Methode
- gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Der <property>startIndex</property> Parameter spezifiziert die ordinale Nummer
- des ersten Eintrags der im Feed zurückgegeben wird. Einträge vor dieser Nummer
- werden übergangen.
- </para>
- <para>
- Dieser Parameter kann mit der <methodname>setStartIndex()</methodname> Methode
- gesetzt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Die Parameter <property>updatedMin</property> und
- <property>updatedMax</property> spezifizieren Grenzen für das Datum der
- Einträge. Wenn ein Wert für <property>updatedMin</property> spezifiziert wird,
- werden keine Einträge die vor dem spezifizierten Datum aktualisiert wurden, im
- Feed inkludiert. Genauso werden keine Einträge inkludiert die nach einem Datum
- aktualisiert wurden wenn <property>updatedMax</property> spezifiziert wird.
- </para>
- <para>
- Es können nummerische Zeitstempel, oder eine Variation von Datum/Zeit String
- Repräsentationen als Wert für diese Parameter verwendet werden.
- </para>
- <para>
- Diese Parameter kkönnen mit den <methodname>setUpdatedMin()</methodname> und
- <methodname>setUpdatedMax()</methodname> Methoden gesetzt werden.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Es gibt eine <methodname>get*()</methodname> Funktion für jede
- <methodname>set*()</methodname> Funktion.
- </para>
- <programlisting language="php"><![CDATA[
- $query = new Zend_Gdata_Query();
- $query->setMaxResults(10);
- echo $query->getMaxResults(); // gibt 10 zurück
- ]]></programlisting>
- <para>
- Die <classname>Zend_Gdata</classname> Klasse implementiert auch "magische" Getter und
- Setter Methoden, es kann also der Name des Parameters als virtuelles Mitglied der Klasse
- verwendet werden.
- </para>
- <programlisting language="php"><![CDATA[
- $query = new Zend_Gdata_Query();
- $query->maxResults = 10;
- echo $query->maxResults; // gibt 10 zurück
- ]]></programlisting>
- <para>
- Es können alle Parameter mit der <methodname>resetParameters()</methodname> Funktion
- gelöscht werden. Das ist nützlich wenn ein <classname>Zend_Gdata</classname> Objekt für
- mehrfache Abfragen wiederverwendet werden soll.
- </para>
- <programlisting language="php"><![CDATA[
- $query = new Zend_Gdata_Query();
- $query->maxResults = 10;
- // ...den Feed empfangen...
- $query->resetParameters(); // löscht alle Parameter
- // ...einen anderen Feed empfangen...
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.gdata.introduction.getfeed">
- <title>Einen Feed empfangen</title>
- <para>
- Die <methodname>getFeed()</methodname> Funktion kann verwendet werden um einen Feed von
- einer spezifizierten <acronym>URI</acronym> zu empfangen. Diese Funktion gibt eine
- Instanz der Klasse, die als zweites Argument an getFeed übergeben wurde, zurück, welche
- standardmäßig Zend_Gdata_Feed ist.
- </para>
- <programlisting language="php"><![CDATA[
- $gdata = new Zend_Gdata();
- $query = new Zend_Gdata_Query(
- 'http://www.blogger.com/feeds/blogID/posts/default');
- $query->setMaxResults(10);
- $feed = $gdata->getFeed($query);
- ]]></programlisting>
- <para>
- Siehe spätere Sektionen für spezielle Funktionen in jeder Helfer Klasse für Google Daten
- Services. Diese Funktionen helfen Feeds von einer <acronym>URI</acronym> zu empfangen
- die für das angeforderte Service zuständig ist.
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.paging">
- <title>Mit Mehrfach-Seiten Feeds arbeiten</title>
- <para>
- Wenn man einen Feed empfängt der eine große Anzahl an Einträgen enthält, kann dieser
- Feed in viele kleinere "Seiten" von Feeds gebrochen werden. Wenn das passiert, enthält
- jede Seite einen Link zur nächsten Seite der Serie. Auf diesen Link kann mit Hilfe von
- <methodname>getLink('next')</methodname> zugegriffen werden. Das folgende Beispiel zeigt
- wie auf die nächste Seite eines Feeds empfangen werden kann:
- </para>
- <programlisting language="php"><![CDATA[
- function getNextPage($feed) {
- $nextURL = $feed->getLink('next');
- if ($nextURL !== null) {
- return $gdata->getFeed($nextURL);
- } else {
- return null;
- }
- }
- ]]></programlisting>
- <para>
- Wenn man es vorzieht nicht mit Seiten in der eigenen Anwendung zu arbeiten, kann die
- erste Seite des Feeds an
- <methodname>Zend_Gdata_App::retrieveAllEntriesForFeed()</methodname> übergeben werden,
- welche alle Einträge von jeder Seite in einen einzelnen Feed zusammenfasst. Dieses
- Beispiel zeigt wie diese Funktion verwendet werden kann:
- </para>
- <programlisting language="php"><![CDATA[
- $gdata = new Zend_Gdata();
- $query = new Zend_Gdata_Query(
- 'http://www.blogger.com/feeds/blogID/posts/default');
- $feed = $gdata->retrieveAllEntriesForFeed($gdata->getFeed($query));
- ]]></programlisting>
- <para>
- Es gilt zu beachten das wenn diese Funktion aufgerufen wird, dies eine sehr lange Zeit
- benötigen kann im große Feeds zu komplettieren. Es kann notwendig sein
- <acronym>PHP</acronym>'s Limit der Ausführungszeit zu vergrößern mithilfe von
- <methodname>set_time_limit()</methodname> zu vergrößern.
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.usefeedentry">
- <title>Arbeiten mit Daten in Feeds und Einträgen</title>
- <para>
- Nachdem ein Feed empfangen wurde, können die Daten von dem Feed oder den Einträgen die
- in dem Feed enthalten sind, gelesen werden, indem entweder die in jeder Daten Modell
- Klasse definierten Zugriffsmethoden oder die magischen Zugriffsmethoden verwendet
- werden. Hier ist ein Beispiel:
- </para>
- <programlisting language="php"><![CDATA[
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $gdata = new Zend_Gdata($client);
- $query = new Zend_Gdata_Query(
- 'http://www.blogger.com/feeds/blogID/posts/default');
- $query->setMaxResults(10);
- $feed = $gdata->getFeed($query);
- foreach ($feed as $entry) {
- // Die magischen Zugriffsmethoden verwenden
- echo 'Titel: ' . $entry->title->text;
- // Die definierten Zugriffsmethoden verwenden
- echo 'Inhalt: ' . $entry->getContent()->getText();
- }
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.gdata.introduction.updateentry">
- <title>Einträge aktualisieren</title>
- <para>
- Nachdem ein Eintrag empfangen wurde, kann dieser Eintrag aktualisiert und die Änderungen
- an den Server zurück gespeichert werden. Hier ist ein Beispiel:
- </para>
- <programlisting language="php"><![CDATA[
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- $gdata = new Zend_Gdata($client);
- $query = new Zend_Gdata_Query(
- 'http://www.blogger.com/feeds/blogID/posts/default');
- $query->setMaxResults(10);
- $feed = $gdata->getFeed($query);
- foreach ($feed as $entry) {
- // Dem Titel 'NEU' hinzufügen
- echo 'Alter Titel: ' . $entry->title->text;
- $entry->title->text = $entry->title->text . ' NEU';
- // Den Eintrag auf dem Server aktualisieren
- $newEntry = $entry->save();
- echo 'New Title: ' . $newEntry->title->text;
- }
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.gdata.introduction.post">
- <title>Einträge an Google Server schicken</title>
- <para>
- Das <classname>Zend_Gdata</classname> Objekt hat eine
- <methodname>insertEntry()</methodname> Funktion mit der man Daten hochladen kann um
- neue Einträge in Google Data Services zu speichern.
- </para>
- <para>
- Die Daten Modell Klassen jedes Services kann verwendet werden um einen entsprechenden
- Eintrag zu erstellen und an Google's Services zu schicken. Die
- <methodname>insertEntry()</methodname> Funktion akzeptiert ein Kind von
- <classname>Zend_Gdata_App_Entry</classname> als Daten die an den Service geschickt
- werden. Die Methode gibt ein Kind von <classname>Zend_Gdata_App_Entry</classname> zurück
- welches den Status des Eintrages repräsentiert der vom Server zurückgegeben wurde.
- </para>
- <para>
- Alternativ, kann die <acronym>XML</acronym> Struktur eines Eintrages als String
- konstruiert und dieser String an die <methodname>insertEntry()</methodname> Funktion
- übergeben werden.
- </para>
- <programlisting language="php"><![CDATA[
- $gdata = new Zend_Gdata($authenticatedHttpClient);
- $entry = $gdata->newEntry();
- $entry->title = $gdata->newTitle('Füßball im Park spielen');
- $content =
- $gdata->newContent('Wir besuchen den Part und spielen Fußball');
- $content->setType('text');
- $entry->content = $content;
- $entryResult = $gdata->insertEntry($entry,
- 'http://www.blogger.com/feeds/blogID/posts/default');
- echo 'Die <id> des resultierenden Eintrages ist: ' . $entryResult->id->text;
- ]]></programlisting>
- <para>
- Um Einträge zu senden, muß ein authentifizierter <classname>Zend_Http_Client</classname>
- verwendet werden der mit Hilfe der <classname>Zend_Gdata_AuthSub</classname> oder
- <classname>Zend_Gdata_ClientLogin</classname> Klassen erstellt wurde.
- </para>
- </sect2>
- <sect2 id="zend.gdata.introduction.delete">
- <title>Einträge auf einem Google Server löschen</title>
- <para>
- Option 1: Das <classname>Zend_Gdata</classname> Objekt hat eine
- <methodname>delete()</methodname> Funktion mit der Einträge von Google Daten Services
- gelöscht werden können. Der bearbeitete <acronym>URL</acronym> Wert eines Feed Eintrages
- kann der <methodname>delete()</methodname> Methode übergeben werden.
- </para>
- <para>
- Option 2: Alternativ kann <command>$entry->delete()</command> an einem Eintrag der von
- einem Google Service empfangen wurde, aufgerufen werden.
- </para>
- <programlisting language="php"><![CDATA[
- $gdata = new Zend_Gdata($authenticatedHttpClient);
- // ein Google Daten Feed
- $feedUri = ...;
- $feed = $gdata->getFeed($feedUri);
- foreach ($feed as $feedEntry) {
- // Option 1 - den Eintrag direkt löschen
- $feedEntry->delete();
- // Option 2 - den eintrag durch Übergabe der bearbeiteten URL an
- // $gdata->delete() löschen
- // $gdata->delete($feedEntry->getEditLink()->href);
- }
- ]]></programlisting>
- <para>
- Um Einträge zu löschen, muß ein authentifizierter
- <classname>Zend_Http_Client</classname> verwendet werden der mit Hilfe der
- <classname>Zend_Gdata_AuthSub</classname> oder
- <classname>Zend_Gdata_ClientLogin</classname> Klassen erstellt wurde.
- </para>
- </sect2>
- </sect1>
|