| 

.NET C# Java Javascript Exception

3
Letzte Woche habe ich ja den neuen RSS Reader selfoss als Beta Version veröffentlicht. Ein Vorteil von dem Reader ist die Erweiterbarkeit hinsichtlich der Quellen. So können nicht nur RSS Feeds verarbeitet, sondern auch beliebige Quellen angezapft werden (z.B. Logfiles, Email Accounts, Webseiten ohne RSS Feed, Facebook OpenGraph). Manchmal möchte man aber auch nur einzelne Einträge [...]

Letzte Woche habe ich ja den neuen RSS Reader selfoss als Beta Version veröffentlicht. Ein Vorteil von dem Reader ist die Erweiterbarkeit hinsichtlich der Quellen. So können nicht nur RSS Feeds verarbeitet, sondern auch beliebige Quellen angezapft werden (z.B. Logfiles, Email Accounts, Webseiten ohne RSS Feed, Facebook OpenGraph).

Manchmal möchte man aber auch nur einzelne Einträge von RSS Feeds um zusätzliche Informationen anreichern. Ich mache das beim RSS Feed von heise, wo der Inhalt des News Beitrages nicht mitgeliefert wird. Diesen lade ich dann einfach in einer speziellen Datenquelle, die sich um diese Funktion von einem gewöhnlichen RSS Feed unterscheidet, nach.

Nun gibt es eine Schritt-für-Schritt Anleitung, wie so eine Datenquelle erstellt werden kann.

Eine Datenquelle, eine Klasse

selfoss stellt ein kleines Framework zur Verfügung, das es erlaubt recht einfach neue Datenquellen hinzuzufügen. Dazu muss nur eine einzelne PHP Datei unter
/spouts/your_spouts/your_spout.php
abgelegt werden (your_spouts und your_spout kann frei durch einen anderen Namen ersetzt werden). Diese PHP Datei muss eine einzelne Klasse enthalten, welche von der abstrakten Klasse \spouts\spout abgeleitet ist (man beachte, dass selfoss PHP 5.3 voraussetzt und \spouts der Namespace für alle Datenquellen ist).

Datenelemente der Klasse

Die eigene Klasse muss drei Datenelemente definieren:

  • name: der Name der Datenquelle
  • description: eine Beschreibung
  • params: hier werden die Optionen der Datenquelle festgelegt. Soll z.B. ein Benutzername eingegeben werden, so kann dies hier vorgegeben werden.

Folgend gleich ein Beispiel für so eine Klasse. Natürlich fehlen hier noch die Methode, auf die ich gleich eingehe. Es wird eine Datenquelle für einen Email Account via IMAP definiert. Der Benutzer muss, wenn er eine solche neue Email IMAP Quelle definiert, die Email Adresse, das Passwort und den Server eintragen. $params beschreibt diese drei Parameter, legt fest, was für ein Typ diese darstellen und wie die Eingabe des Benutzers validiert wird.

<?PHP
namespace spouts\mail;
class imap extends \spouts\spout {
 public $name = 'Email';
 public $description = 'email imap account as source';
 public $params = array(
 "email" => array(
 "title" => "Email",
 "type" => "text",
 "default" => "",
 "required" => true,
 "validation" => array("email")
 ),
 "password" => array(
 "title" => "Password",
 "type" => "password",
 "default" => "",
 "required" => true,
 "validation" => array("notempty")
 ),
 "host" => array(
 "title" => "URL",
 "type" => "text",
 "default" => "",
 "required" => true,
 "validation" => array("notempty")
 )
 );
}

Methoden der Klasse

Durch die abstrakte Elternklasse \spouts\spout muss die Datenquelle einige Funktionen implementieren. Diese werden dann im laufenden Betrieb von selfoss aufgerufen. Folgendes UML Diagramm gibt einen Überblick über die Struktur:

Die Klasse muss drei Dinge implementieren:

  • Sie muss eine Funktion load($params) für das Laden der Informationen zur Verfügung stellen. Diese wird während der Aktualisierung einmal aufgerufen und erhält als Parameter die aktuellen Einstellungen. load($params) muss von der Datenquelle implementiert werden und holt die Daten von der entfernten Quelle (z.B. führt einen IMAP Zugriff aus und lädt aktuelle Emails).
  • Sie muss das Interface Iterable implementieren. selfoss iteriert, nachdem load() ausgeführt wurde, dann über die einzelnen Einträge (mit Hilfe der Funktionen, die das Interface Iterable vorgibt: rewind, current, key, next, valid). Die einzelnen Einträge könnten z.B. neue Emails sein.
  • Während selfoss über die einzelnen Einträge iteriert, werden dann die Informationen dieser einzelnen Einträge abgerufen. Dies geschieht über Funktionen, welche durch die abstrakte Klasse \spouts\spout vorgegeben werden. Informationen sind z.B. Betreff einer Email, Email Body usw.

Der Ablauf ist dann folgender:

  1. Im Beispiel würde load($params) von selfoss mit der vom Benutzer eingegebenen Email, Passwort und Host aufgerufen.
  2. Diese Methode würde dann die Emails vom IMAP Account herunterladen und zwischenspeichern.
  3. selfoss iteriert über die einzelnen Emails (mit rewind, current, key, next, valid).
  4. Bei jedem einzelnen Iterationsschritt (also für jede Email) werden die Email-Informationen abgerufen (Inhalt, Betreff, Datum usw.) und zwar mit Hilfe der Funktionen: getId(), getTitle(), getContent(), getIcon(), getLink(), getDate().
  5. Um den Rest kümmert sich selfoss (prüfen ob es den Eintrag schon gibt, alte Einträge löschen usw.)

Eine Implementierung für diese Funktionen liegt natürlich völlig in der Hand des Entwicklers einer Datenquelle. Daher verweise ich an dieser Stelle auf die vorhandenen Datenquellen. \spouts\spout\feed (\spouts\rss\feed.php) stellt ein gutes Beispiel dar. Wer diese als Vorlage nimmt, kommt recht schnell sehr weit, denn dort werden alle Funktionen genutzt. Soll nur ein Standard RSS Feed um Funktionen erweitert oder angepasst werden, dann verweise ich auch die Klasse \spouts\spout\heise (\spouts\rss\heise.php). Hier wird lediglich die getContent() überschrieben und ansonsten verhält sich die Datenquelle wie ein gewöhnliches RSS Feed.

Thumbnails

Soll anstelle eines Textes ein Vorschaubild angezeigt werden, so muss die Methode getThumbnail() implementiert werden. Diese liefert für einen einzelnen Eintrag das Vorschaubildchen (die URL auf das Bild). \spouts\spout\images (\spouts\rss\images.php) ist ein Beispiel dafür. Diese Datenquelle geht von einem gewöhnlichen RSS Feed aus, durchsucht es nach Bilder (entweder ausgezeichnete Thumbnails im XML des Beitrages, oder das erste Bild im Content des Beitrages) und liefert die URL an selfoss. Das Laden, Verkleinern, Speichern und Aufräumen der Bilder übernimmt selfoss.

Los gehts…

Das war sie, die kurze und knackige Einführung, wie Datenquellen für selfoss entwickelt werden können. Gerne könnt ihr mir dazu Fragen stellen und bei Problemen schreiben (am besten hier im Blog, so dass auch andere von den Antworten profitieren können). Sehr freue ich mich auch über fertige Datenquellen. Gerne nehme ich neue in selfoss auf.

php webentwicklung projekte selfoss spouts datenquellen
Weitere News:
Schreibe einen Kommentar:
Themen:
datenquellen spouts selfoss projekte webentwicklung php
Entweder einloggen... ...oder ohne Wartezeit registrieren
Benutzername
Passwort
Passwort wiederholen
E-Mail