| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.feed.importing">
- <title>Feeds importieren</title>
- <para>
- <classname>Zend_Feed</classname> ermöglicht es Entwicklern, Feeds sehr einfach abzurufen.
- Wenn Du die <acronym>URI</acronym> eines Feeds kennst, verwende einfach die
- <methodname>Zend_Feed::import()</methodname> Methode:
- </para>
- <programlisting language="php"><![CDATA[
- $feed = Zend_Feed::import('http://feeds.example.com/feedName');
- ]]></programlisting>
- <para>
- Du kannst <classname>Zend_Feed</classname> außerdem verwenden, um Inhalte eines Feeds aus
- einer Datei oder die Inhalte aus einem <acronym>PHP</acronym> String Variable zu abzurufen.
- </para>
- <programlisting language="php"><![CDATA[
- // Feeds von einer Textdatei importieren
- $feedFromFile = Zend_Feed::importFile('feed.xml');
- // Feeds von einer PHP String Variable importieren
- $feedFromPHP = Zend_Feed::importString($feedString);
- ]]></programlisting>
- <para>
- In jedem der obigen Beispiele wird bei Erfolg abhängig vom Typ des Feeds ein Objekt einer
- Klasse zurück gegeben, welche <classname>Zend_Feed_Abstract</classname> erweitert. Wird ein
- <acronym>RSS</acronym> Feed durch eine der obigen Importiermethoden abgerufen, wird eine
- <classname>Zend_Feed_Rss</classname> Objekt zurückgegeben. Auf der anderen Seite wird beim
- Importieren eines Atom Feeds ein <classname>Zend_Feed_Atom</classname> Objekt zurückgegeben.
- Bei Fehlern, wie z.B. ein unlesbarer oder nicht wohlgeformter Feed, werfen die
- Importiermethoden auch ein <classname>Zend_Feed_Exception</classname> Objekt.
- </para>
- <sect2 id="zend.feed.importing.custom">
- <title>Eigene Feeds</title>
- <para>
- <classname>Zend_Feed</classname> ermöglicht es Entwicklern Ihre eigenen Feeds sehr
- einfach zu erstellen. Man muß nur ein Array erstellen und es in
- <classname>Zend_Feed</classname> importieren, Dieses Array kann mit
- <methodname>Zend_Feed::importArray()</methodname> oder mit
- <methodname>Zend_Feed::importBuilder()</methodname> importiert werden. Im letzteren Fall
- wird das Array on the Fly durch eine eigene Datenquelle berechnet die
- <classname>Zend_Feed_Builder_Interface</classname> implementiert.
- </para>
- <sect3 id="zend.feed.importing.custom.importarray">
- <title>Importieren eines eigenen Arrays</title>
- <programlisting language="php"><![CDATA[
- // Importieren eines Feeds von einem Array
- $atomFeedFromArray = Zend_Feed::importArray($array);
- // Die folgende Zeile ist identisch mit der obigen; standardmäßig
- // wird eine Zend_Feed_Atom Instanz zurückgegeben
- $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
- // Importieren eines RSS Feeds von einem Array
- $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
- ]]></programlisting>
- <para>
- Das Format des Arrays muß dieser Struktur entsprechen:
- </para>
- <programlisting language="php"><![CDATA[
- array(
- // benötigt
- 'title' => 'Titel des Feeds',
- 'link' => 'Kanonische URL zu dem Feed',
- // optional
- 'lastUpdate' => 'Zeitstempel des Update Datums',
- 'published' => 'Zeitstempel des Veröffentlichungs Datums',
- // benötigt
- 'charset' => 'Zeichensatz der textuellen Daten',
- //optional
- 'description' => 'Kurzbeschreibung des Feeds',
- 'author' => 'Author, Veröffentlicher des Feeds',
- 'email' => 'Email des Authors',
- // optional, ignoriert wenn Atom verwendet wird
- 'webmaster' => 'Email Adresse der Person die für technische '
- . 'Belange verantwortlich ist',
- //optional
- 'copyright' => 'Copyright Notiz',
- 'image' => 'URL zu Bildern',
- 'generator' => 'Ersteller',
- 'language' => 'Sprache in welcher der Feed geschrieben ist',
- // optional, ignoriert wenn Atom verwendet wird
- 'ttl' => 'Wie lange ein Feed gecached werden kann '
- . 'bevor er erneut werden muß',
- 'rating' => 'Die PICS Rate dieses Kanals',
- // optional, ignoriert wenn Atom verwendet wird
- // eine Wolke die über Updates benachrichtigt wird
- 'cloud' => array(
- // benötigt
- 'domain' => 'Domain der Wolke, e.g. rpc.sys.com',
- // optional, Standard ist 80
- 'port' => 'Port zu dem verbunden wird',
- // benötigt
- 'path' => 'Pfad der Wolke, e.g. /RPC2',
- 'registerProcedure' => 'Prozedur die aufgerufen wird, '
- . 'z.B. myCloud.rssPleaseNotify'
- 'protocol' => 'Protokoll das verwendet wird, z.B. '
- . 'soap oder xml-rpc'
- ),
- // optional, ignoriert wenn Atom verwendet wird
- // Eine Texteingabebox die im Feed angezeigt werden kann
- 'textInput' => array(
- // benötigt
- 'title' => 'Die Überschrift des Senden Buttons im '
- . 'Texteingabefeld',
- 'description' => 'Beschreibt das Texteingabefeld',
- 'name' => 'Der Name des Text Objekts im '
- . 'Texteingabefeld',
- 'link' => 'Die URL des CGI Skripts das Texteingabe '
- . 'Anfragen bearbeitet'
- ),
- // optional, ignoriert wenn Atom verwendet wird
- // Hinweise geben welche Stunden übersprungen werden können
- 'skipHours' => array(
- // bis zu 24 Zeilen dessen Werte eine Nummer zwischen 0 und 23 ist
- // z.B. 13 (1pm)
- 'hour in 24 format'
- ),
- // optional, ignoriert wenn Atom verwendet wird
- // Hinweise geben welche Tage übersprungen werden können
- 'skipDays ' => array(
- // bis zu 7 Zeilen dessen Werte Montag, Dienstag, Mittwoch,
- // Donnerstag, Freitag, Samstag oder Sonntag sind
- // z.B. Montag
- 'a day to skip'
- ),
- // optional, ignoriert wenn Atom verwendet wird
- // Itunes Erweiterungsdaten
- 'itunes' => array(
- // optional, Standard ist der Wert der author Spalte
- 'author' => 'Musiker Spalte',
- // optional, Standard ist der Wert der author Spalte
- // Eigentümer des Podcasts
- 'owner' => array(
- 'name' => 'Name des Eigentümers',
- 'email' => 'Email des Eigentümers'
- ),
- // optional, Standard ist der image Wert
- 'image' => 'Album/Podcast Bild',
- // optional, Standard ist der description Wert
- 'subtitle' => 'Kurzbeschreibung',
- 'summary' => 'Langbeschreibung',
- // optional
- 'block' => 'Verhindern das eine Episode erscheint (ja|nein)',
- // benötigt
- // 'Kategoriespalte und iTunes Music Store Browse'
- 'category' => array(
- // bis zu 3 Zeilen
- array(
- // benötigt
- 'main' => 'Hauptkategorie',
- // optional
- 'sub' => 'Unterkategorie'
- ),
- ),
- // optional
- 'explicit' => 'Elterliche Anweisungsspalte (ja|nein|löschen)',
- 'keywords' => 'Eine kommagetrennte Liste von maximal '
- . '12 Schlüsselwörtern',
- 'new-feed-url' => 'Verwendet um iTunes über eine neue URL '
- . 'Lokation zu informieren'
- ),
- 'entries' => array(
- array(
- // benötigt
- 'title' => 'Titel des Feedeintrags',
- 'link' => 'URL zum Feedeintrag',
- // benötigt, nur Text, kein HTML
- 'description' => 'Kurzversion des Feedeintrags',
- //optional
- 'guid' => 'Id des Artikels, wenn nicht angegeben '
- . 'wird der link Wert verwendet',
- // optional, kann HTML enthalten
- 'content' => 'Langversion',
- // optional
- 'lastUpdate' => 'Zeitstempel des Veröffnetlichungsdatums',
- 'comments' => 'Kommentarseite des Feedeintrags',
- 'commentRss' => 'Die FeedURL der zugehörenden Kommentare',
- // optional, Originale Quelle des Feedeintrags
- 'source' => array(
- // benötigt
- 'title' => 'Titel der Originalen Quelle',
- 'url' => 'URL der originalen Quelle'
- ),
- // optional, Liste der zugeordneten Kategorien
- 'category' => array(
- array(
- // benötigt
- 'term' => 'Überschrift der ersten Kategorie',
- // optional
- 'scheme' => 'URL die das Kategorisierungsschema '
- . 'identifiziert'
- ),
- array(
- //Daten der zweiten Kategorie und so weiter
- )
- ),
- // optional, Liste der Anhänge des Feedeintrags
- 'enclosure' => array(
- array(
- // benötigt
- 'url' => 'URL des verlinkten Anhangs',
- // optional
- 'type' => 'Mime Typ des Anhangs',
- 'length' => 'Länge des verlinkten Inhalts oktal'
- ),
- array(
- // Daten für den zweiten Anhang und so weiter
- )
- )
- ),
- array(
- // Daten für den zweiten Eintrag und so weiter
- )
- )
- );
- ]]></programlisting>
- <para>
- Referenzen:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <acronym>RSS</acronym> 2.0 Spezifikation: <ulink
- url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- Atom Spezifikation: <ulink url="http://tools.ietf.org/html/rfc4287">RFC
- 4287</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- <acronym>WFW</acronym> Spezifikation: <ulink
- url="http://wellformedweb.org/news/wfw_namespace_elements">Gut
- geformtes Web</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- iTunes Spezifikation:
- <ulink
- url="http://www.apple.com/itunes/store/podcaststechspecs.html">iTunes
- Technische Spezifikation</ulink>
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.feed.importing.custom.importbuilder">
- <title>Importieren einer eigenen Daten Quelle</title>
- <para>
- Eine <classname>Zend_Feed</classname> Instanz kann von jeder Datenquelle erstellt
- werden die <classname>Zend_Feed_Builder_Interface</classname> implementiert. Die
- <methodname>getHeader()</methodname> und <methodname>getEntries()</methodname>
- Methoden müssen implementiert werden damit das Objekt mit
- <methodname>Zend_Feed::importBuilder()</methodname> verwendet werden kann. Als
- einfache Referenz Implementation kann <classname>Zend_Feed_Builder</classname>
- verwendet werden, welches ein Array im Contructor entgegen nimmt, einige einfache
- Prüfungen durchführt, und anschließend in der
- <methodname>importBuilder()</methodname> Methode verwendet werden kann. Die
- <methodname>getHeader()</methodname> Methode muß eine Instanz von
- <classname>Zend_Feed_Builder_Header</classname> zurückgeben, und
- <methodname>getEntries()</methodname> muß ein Array von
- <classname>Zend_Feed_Builder_Entry</classname> Instanzen zurückgeben.
- </para>
- <note>
- <para>
- <classname>Zend_Feed_Builder</classname> arbeitet als konkrete Implementation um
- die Verwendung zu demonstrieren. Benutzer sind angehlaten Ihre eigenen Klassen
- zu Erstellen um <classname>Zend_Feed_Builder_Interface</classname> zu
- implementieren.
- </para>
- </note>
- <para>
- Hier ist ein Beispiel der Verwendung von
- <methodname>Zend_Feed::importBuilder()</methodname>:
- </para>
- <programlisting language="php"><![CDATA[
- // Einen Feed von einer eigenen Erstellungsquelle importieren
- $atomFeedFromArray =
- Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
- // Die folgende Zeile ist mit der obigen äquivalent; standardmäßig
- // wird eine Zend_Feed_Atom Instanz zurückgegeben
- $atomFeedFromArray =
- Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'atom');
- // Einen RSS Feeed von einem Array von eigenen Erstellungsquellen importieren
- $rssFeedFromArray =
- Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'rss');
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.feed.importing.custom.dump">
- <title>Ausgeben des Inhalts eines Feeds</title>
- <para>
- Um den Inhalt einer <classname>Zend_Feed_Abstract</classname> Instanz auszugeben
- können die <methodname>send()</methodname> oder <methodname>saveXml()</methodname>
- Methoden verwendet werden.
- </para>
- <programlisting language="php"><![CDATA[
- assert($feed instanceof Zend_Feed_Abstract);
- // Den Feed an der Standardausgabe ausgeben
- print $feed->saveXML();
- // HTTP Header und den Feed ausgeben
- $feed->send();
- ]]></programlisting>
- </sect3>
- </sect2>
- </sect1>
|