Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Vorwort
1 Einleitung
2 Einführung in eZ Components
3 Die Applikationsbasis
4 Fehlerbehandlung und Debugging
5 Konfiguration
6 Datenbankanbindung
7 ORM mit PersistentObject
8 Template
9 Übersetzung
10 Benutzereingaben validieren
11 Authentifizierung
12 Bildverarbeitung
13 Archive und Dateien
14 Mail
15 Logging
16 Diagramme
17 Feeds und Caching
18 Setup
A Inhalt der Buch-CD
Stichwort

Download:
- ZIP, ca. 2,7 MB
Ihre Meinung?

Spacer
<< zurück
eZ Components von Tobias Schlitt, Kore Nordmann
Das Entwickler-Handbuch
Buch: eZ Components

eZ Components
geb., mit CD
454 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1073-7
Pfeil 17 Feeds und Caching
Pfeil 17.1 Feed
Pfeil 17.1.1 Feeds parsen
Pfeil 17.1.2 Feeds erzeugen
Pfeil 17.2 Die Cache-Komponente
Pfeil 17.2.1 Motivation
Pfeil 17.2.2 Architektur
Pfeil 17.2.3 Praktisches
Pfeil 17.3 Cache-Attribute
Pfeil 17.4 Fazit

Im anbrechenden Zeitalter des Semantic Web darf ein XML-Feed in einer Blog-Anwendung nicht fehlen. Die Cache-Komponente bietet eine einfache API, um Inhalte effizient zwischenzuspeichern.

17 Feeds und Caching

Caching ist eine wichtige Möglichkeit, einer Anwendung den »Performance-Hunger« zu nehmen oder ihn zumindest zu reduzieren. Da die eigentliche Aktion des Cachings sehr einfach ist, ist aus diesem Grund die Cache-Komponente von eZ Components rudimentär gehalten. Wir haben uns entschlossen, Ihnen an dieser Stelle noch eine weitere Komponente zu zeigen, die sich zum Zeitpunkt der Drucklegung dieses Buches noch im Beta-Stadium befindet. Was wäre ein Weblog ohne XML-Feed?


RSS und seine Freunde

Feeds sind zeitlich geordnete Kurzdarstellungen von Nachrichten und Änderungen. Feeds in Rohform sind ebenso wie HTML-Dokumente nicht direkt für den Benutzer geeignet, sondern bedürfen einer speziellen Software ähnlich wie ein Webbrowser. Verschiedene XML-Formate haben sich entwickelt, um Feeds darzustellen. Neben verschiedenen Versionen von RSS zählt auch Atom zu den gebräuchlichsten. Allen gemein ist, dass sie eine spezielle Menge von XML-Tags unterstützen, die Metainformationen zu Nachrichten auszeichnen. Neben dem Titel einer Nachricht und ihrem Veröffentlichungsdatum sind meist der Name des Autors, ein Link zur vollen HTML-Darstellung des Eintrags sowie eine kurze Zusammenfassung des Inhalts enthalten. Je nach Format heißen die Felder für einzelne Informationen unterschiedlich. Es werden verschiedene Formate unterstützt. Mittlerweile sind die meisten Anbieter und auch viele Client-Anbieter dazu übergegangen, so viele Feed-Formate wie möglich zu unterstützen. Es ist daher nicht abzusehen, welches Format sich durchsetzen wird. Feed-Reader verwalten Informationen aus verschiedenen Feed-Quellen und führen diese zusammen. Meistens wird eine Darstellung ähnlich einer E-Mail auf einer Internetseite präsentiert.


Die Feed-Komponente, ein Paket zur Erstellung und zum Gebrauch von Feed-Formaten, wird verwendet, um einen RSS-Feed über die Einträge des GP-Blogs bereitzustellen. Da sich dieser Feed nur ändert, wenn ein neuer Eintrag hinzugefügt wird, speichert die Beispielanwendung die XML-Ausgabe zwischenzeitlich und liefert dem Benutzer solange einen statischen Inhalt, bis ein neuer Eintrag verfasst wird.


Galileo Computing - Zum Seitenanfang

17.1 Feed Zur nächsten ÜberschriftZur vorigen Überschrift

Unter Semantic Web versteht man das Bestreben, Inhalte nicht nur für den Menschen in einer verständlichen Form aufzubereiten, sondern auch eine automatische Erkennung und Verarbeitung des Inhalts zu ermöglichen. In den Feed-Formaten präsentiert sich Semantic Web zum ersten Mal massentauglich. Öffneten früher Webnutzer mehrere Browser-Fenster, um ständig aktuelle Nachrichten zu erhalten, so erscheint heute wie von Geisterhand die Notiz eines Feed-Aggregators auf dem Desktop.

Ein Feed stellt vereinfacht gesagt eine Sammlung von beliebigen Informationen in zeitlicher Abfolge in einer durch eine Maschine interpretierbaren Form dar. Meist stellen Webanbieter aktuelle Nachrichten oder Änderungen ihres Webangebots als Feed bereit. In der »Weblog-Szene« ist es üblich, mindestens eine Feed-Darstellung der Einträge anzubieten. Nachdem Feed-Reader als Clients für Feeds weitere Verbreitung gefunden haben, stellt heute beinahe jede Webseite einen Feed mit Updates bereit.

Bekannte RSS-Feeds sind vor allem die des Heise-Verlags, dessen Nachrichten als Atom-Feed unter http://www.heise.de/newsticker/heise-atom.xml bereitstehen sowie die Golem-IT-News mit ihrem RSS-Feed unter der Adresse http://www.golem.de/rss.php?feed. Aber auch die Tagesschau (http://www.tagesschau.de/xml/rss2) sowie das Nachrichtenmagazin »Der Spiegel« (http://www.spiegel.de/schlagzeilen/rss/index.xml) verbreiten einen Feed ihrer Nachrichten. Der Screenshot zeigt einen Feed-Reader als Webseite, der neben verschiedenen Feeds (in Kategorien unterteilt) auch nützliche Widgets für den Wetterbericht, den Status eines Servers und eine Weltzeituhr bietet.

Die Feed-Komponente befindet sich zum Zeitpunkt der Drucklegung dieses Buches in der Version 1.0beta1. Sie kann somit noch nicht für den produktiven Einsatz empfohlen werden. Hauptgrund hierfür ist der Umstand, dass bisher lediglich RSS als Format unterstützt wird. Die Komponente erzeugt dieses Format bereits recht zuverlässig.

Abbildung 17.1 Feed-Reader auf einer Webseite


Galileo Computing - Zum Seitenanfang

17.1.1 Feeds parsen Zur nächsten ÜberschriftZur vorigen Überschrift

Eine Hauptanwendung der Feed-Komponente ist der Gebrauch von Feed-Formaten. Da es eine Vielzahl von Feed-Formaten gibt, folgt die Komponente der typischen Handler-Struktur. Das zur Verfügung gestellte Interface ist dabei äußerst einfach.

$feed = ezcFeed::parse(
    "/home/dotxp/news/rss2-dc-01.xml"
);
foreach ( $feed as $item )
{
    echo $item->title;
}

Listing 17.1 Einen Feed parsen

Die statische Methode parse() liefert ein verarbeitetes ezcFeed-Objekt zurück. Eine Instanz dieses Objekts implementiert das Iterator-Interface aus SPL, das bereits mehrfach im Verlauf des Buches aufgetaucht ist. So können Sie bequem über enthaltene Einträge iterieren und diese verarbeiten.

Die Verarbeitung von Feeds stellt sich also denkbar einfach dar. Interessanter ist jedoch die Erzeugung, denn diese wird im GP-Blog realisiert.


Galileo Computing - Zum Seitenanfang

17.1.2 Feeds erzeugen topZur vorigen Überschrift

Im GP-Blog soll ein Feed der Einträge im RSS-Format bereitgestellt werden. Aus der Vielzahl von RSS-Varianten haben wir Version 2.0 ausgewählt. Die Feed-Komponente soll aber auch alle weiteren Varianten von RSS ebenso wie Atom unterstützen.

Die im Folgenden vorgestellte Methode wird nicht direkt im GP-Blog aufgerufen, sondern ist lediglich ein Unteraufruf der eigentlichen Aktionsmethode. Letztere stellen wir Ihnen im nächsten Abschnitt vor. Die Methode generateFeed() hat die Aufgabe, die benötigten Daten für den Feed zusammenzustellen und die XML-Textdarstellung auszugeben. Die Methode wird in zwei Schritten vorgestellt.

public static function generateFeed()
{
   $session = ezcPersistentSessionInstance::get();
   $query = $session->createFindQuery( 'gpBlogEntry' );
   $query->orderBy( 'date DESC' )->limit( 20 );
   $entries =  $session->findIterator( $query, 'gpBlogEntry' );
   $feed = new ezcFeed( 'rss2' );
   $cfg = ezcConfigurationManager::getInstance();
   $feed->title = $cfg->getSetting(
        'site', 'general', 'title'
    );
    $feed->link = 'http://' .
        ( $cfg->hasSetting( 'site', 'installation', 'host' )
            ? $cfg->getSetting( 'site', 'installation', 'host' )
            : $_SERVER['SERVER_NAME']
        ) .
        $cfg->getSetting( 'site', 'installation', 'basedir' );
    $feed->description = $feed->title;
    $feed->author = $cfg->getSetting(
        'site', 'general', 'name'
    );
    // ...

Listing 17.2 Den Feed vorbereiten

Zunächst benutzt die Methode die globale Instanz von ezcPersistentSession, bekannt aus Kapitel 7, »ORM mit PersistentObject«, um die zehn aktuellsten Einträge zu laden. Dabei ist das Resultat von findIterator() ein Objekt, welches das Iterator-Interface implementiert und mittels foreach nach und nach Modellobjekte des angeforderten Typs zurückgibt. Der Feed wird dem Datum nach absteigend sortiert insgesamt 20 Einträge enthalten. Nachdem diese in $entries gespeichert sind, erfolgt die eigentliche Initialisierung des Feed-Objekts. Von Beginn an ist festgelegt, dass es sich um einen RSS-2.0-Feed handelt, was der Handler-Name 'rss2' ausdrückt.

Das Feed-Format beschreibt unter anderem eine globale Metainformation zum Feed selbst, der in diesem Zusammenhang auch als Informationskanal bezeichnet wird. So besitzt ein Feed einen Namen, eine kurze Beschreibung seines Inhalts, Informationen zum Autor sowie weitere Angaben. Der zweite Teil des Feeds stellt diejenigen Einträge bereit, die später im zweiten Codeabschnitt behandelt werden.

Hier sehen Sie zunächst, wie über das globale Konfigurationsobjekt des GP-Blogs der Titel des Blogs als Titel des Feeds definiert wird. Anschließend wird die Basis-URL des Blogs als globaler Link des Feeds eingetragen. Die einzelnen Einträge besitzen jeweils einen Link. Als Inhaltsbeschreibung verwenden wir der Einfachheit halber ebenfalls den Titel des Blogs. Der Autor wird am Ende aus der Konfiguration gesetzt.

Damit ist die Konfiguration des Feed-Objekts abgeschlossen. Als Nächstes lernen Sie die Erzeugung von Feed-Einträgen kennen. Die Feed-Komponente ist auch für die Unterstützung von Erweiterungsmodulen ausgerichtet. Beispielsweise für Dublin-Core, das vorrangig in RSS Verwendung findet.

    // ...
    foreach ( $entries as $entry )
    {
        $item = $feed->newItem();

        $item->title = $entry->title;
        $item->link = $feed->link . 'show_entry/' . $entry->id;
        $item->description = $entry->body;
        $item->published = $entry->date;
        $item->guid = $item->link;
    }
    return $feed->generate();
}

Listing 17.3 Feed füllen und generieren

Der zuvor erzeugte Iterator von Eintragsobjekten wird nun mit einer foreach-Schleife durchlaufen. Für jeden Blog-Eintrag wird im Feed ein neues Item, also ein Feed-Eintrag, erzeugt. Die Methode newItem() erzeugt eine passende Darstellung für einen RSS2-Feed.

Das Feed-Item-Objekt, das durch die Methode bereits im Feed registriert ist, wird mit den benötigten Informationen ausgestattet. Das Format erlaubt dabei die Angabe eines Titels, eines Links, einer Beschreibung, eines Veröffentlichungsdatums sowie einer eindeutigen ID. Das Datum, welches in der XML-Ausgabe später ein bestimmtes Format erfüllen muss, kann hier einfach aus dem Modellobjekt übernommen werden, ist also ein Unix-Zeitstempel als Ganzzahl. Die Formatierung übernimmt das Feed-Objekt selbst. Die ID des Eintrags wird ebenfalls mit dem Link zum Eintrag versehen. Es soll sich dabei um einen eindeutigen und permanenten Identifizierer handeln, was durch den permanenten Link im GP-Blog an dieser Stelle gewährleistet ist.

Der letzte Aufruf generateFeed() erzeugt aus den so zusammengestellten Daten die XML-Repräsentation des Feeds, welche hier einfach an den Aufrufer zurückgegeben wird. Damit ist die Betrachtung der Feed-Komponente auch schon abgeschlossen.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: PHP 5.3 und MySQL 5.1






 PHP 5.3 und
 MySQL 5.1


Zum Katalog: Besser PHP programmieren






 Besser PHP
 programmieren


Zum Katalog: Webshops mit Magento






 Webshops mit
 Magento


Zum Katalog: Sichere Webanwendungen






 Sichere
 Webanwendungen


Zum Katalog: PHP 5.3 und MySQL 5.1 - Videotraining






 PHP 5.3 und
 MySQL 5.1 -
 Videotraining


Zum Katalog: Apache 2






 Apache 2


Zum Katalog: Suchmaschinen-Optimierung für Webentwickler






 Suchmaschinen-
 Optimierung
 für Webentwickler


Zum Katalog: Joomla! 1.5






 Joomla! 1.5


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de