|
Einfacher Informationsaustausch mit RSS-Feeds I: RSS Feeds "konsumieren"
| Erscheinungsmonat |
APEX-Version |
Datenbankversion |
| Januar 2012 |
ab 4.0 |
ab 10.2 |
RSS (Really Simple Syndication) ist ein sehr einfaches, auf XML basierendes, Format
zum Austausch von
Nachrichten im Internet. Nahezu alle Informationsseiten oder Blogs
bieten RSS-Feeds an. Wird der RSS-Feed mit einer Anwendung abonniert, so ruft diese
das XML (regelmäßig) ab, liest es aus und stellt die Inhalte in übersichtlicher, lesbarer Form
dar. Einige Beispiele für RSS-Feeds sind ...
In diesem Tipp wird vorgestellt, wie Sie einen RSS-Feed in Ihrer APEX-Anwendung
abonnieren und die Inhalte auf einer der Seiten darstellen können. Grundsätzlich kann
dieser Tipp auf allen APEX-Versionen nachvollzogen werden - lediglich das am Ende
vorgestellte APEX-Plugin Simple RSS Reader erfordert mindestens APEX 4.0. Generell ist das Einbinden eines
RSS-Feeds in APEX einfacher, als man denkt - erforderlich sind nur drei Schritte:
- Zunächst muss der RSS Feed abgerufen werden - das wird mit PL/SQL erledigt. Für
einfache Fälle reicht HTTPURITYPE, ist das Aufsetzen der HTTP-Verbindung
aufwändiger, so kann auch mit dem Paket UTL_HTTP gearbeitet werden.
- Zum Extrahieren der Informationen aus dem RSS-Feed werden XML-Funktionen benötigt, denn
wie zu Beginn erwähnt, basiert das RSS-Format auf XML. Die nötigen Funktionen stehen direkt
als SQL-Funktionen bereit.
- Die Darstellung selbst erfolgt mit APEX-Bordmitteln - meist bietet sich die Verwendung eines
Berichts an.
Voraussetzungen
Das Abrufen eines RSS-Feeds ist eine Netzwerkoperation. Das bedeutet, dass zunächst
EXECUTE-Rechte am Paket UTL_HTTP bzw. an dem Objekttypen HTTPURITYPE benötigt werden. Das ist
auf den meisten Systemen standardmäßig bereits der Fall. Arbeitet man auf
einer 11g-Datenbank, so muss zusätzlich vom DBA eine Netzwerk-ACL für den Zugriff auf den
Server mit dem RSS-Feed eingerichtet werden. Mehr zu Netzwerk-ACLs können Sie
in einem Community-Tipp
nachlesen - zum Zugriff auf den RSS-Feed von www.apex-plugin.com müsste der DBA die
ACL wie folgt einrichten.
Erste Schritte
Anschließend kann man in SQL*Plus, dem SQL Developer oder dem APEX SQL Workshop
den ersten Test wagen: Die XML-Inhalte des RSS-Feeds werden in Abbildung 1
zunächst einfach nur abgerufen. Beachten Sie, dass Sie den Proxy-Server mit
UTL_HTTP.SET_PROXY setzen müssen, wenn sich der
Datenbankserver hinter einer
Firewall befindet (was ja üblicherweise der Fall ist).
Abbildung 1: Das XML des RSS-Feeds lässt sich in SQL*Plus abrufen
Mit SQL-Funktionen kann das zurückgelieferte XML nun zerlegt werden. Am einfachsten
ist das extrahieren von Titel und Link für jeden Eintrag im RSS-Feed.
Einbinden in eine APEX-Anwendung
Mit dieser SQL-Abfrage kann der RSS-Feed also abgerufen und direkt
"zerlegt" werden - stellt man sie nun als View RSS_APEXPLUGIN bereit, so
kann mit APEX-Bordmitteln ein Bericht erzeugt werden (Abbildung 2). Natürlich
lässt sich dieser auch ohne View, direkt mit der SQL-Abfrage, einrichten.
Abbildung 2: Ein APEX-Bericht auf Basis der View wird erstellt
Der mit UTL_HTTP eingestellte Proxyserver gilt
allerdings nicht für die
APEX-Applikation - daher sieht ein erster Test der Anwendungsseite wie in
Abbildung 3 aus.
Abbildung 3: Der erste Versuch schlägt fehlt - der Proxyserver ist nicht eingestellt
Navigieren Sie dazu zu den Gemeinsamen Komponenten und klicken Sie
dann auf der rechten Bildschirmseite auf Definition bearbeiten. Stellen Sie
dann den Proxyserver, wie in Abbildung 4 dargestellt, ein.
Abbildung 4: Proxyserver für die Anwendung einstellen
Das reicht jedoch noch nicht aus - denn der in APEX eingestellte Proxy-Server
ist nur für APEX-Standardkomponenten wirksam. Für den Bericht, der eine View
selektiert, die im Hintergrund tatsächlich eine Netzwerkverbindung aufbaut,
funktioniert es (noch) nicht. Allerdings steht die Angabe nun in der
Umgebungsvariablen APEX_APPLICATION.G_PROXY_SERVER bereit, so dass es ein
Einfaches ist, einen PL/SQL-Prozess einzurichten, der Beim Laden der Seite - Vor Header
ausgeführt wird (Abbildung 5) ...
Abbildung 5: PL/SQL Prozess einrichten: Beim Laden der Seite - Vor Header
... und den Proxy-Server mit folgendem Code setzt.
Das Ergebnis sieht dann wie in Abbildung 6 aus.
Abbildung 6: Der APEX-Bericht zeigt die Inhalte des RSS-Feeds an
Mit ein wenig Einrichtung und Formatierung werden die Berichtszeilen
anklickbar ...
Abbildung 7: Der Bericht ist fertig formatiert - und die Einträge können geklickt werden
Neben der reinen Darstellung sind natürlich auch andere Operationen denkbar; so
könnte ein Datenbankjob (DBMS_SCHEDULER) den RSS-Feed regelmäßig abrufen und die
Inhalte in eigene Tabellen speichern. Je nach Inhalt des RSS-Feeds wäre auch
automatisierter Mailversand oder ähnliche Aktionen denkbar. Den Möglichkeiten sind
hier keine Grenzen gesetzt.
Beschränkt man sich dagegen auf die reine Darstellung der Inhalte, so ist die
beschriebene manuelle Arbeit eigentlich nicht nötig - denn es gibt ein APEX-Plugin dafür.
Ein APEX-Plugin verwenden
Es geht natürlich auch einfacher - denn diese Arbeit kann auch von einem
APEX Plugin übernommen werden. Das Simple RSS Reader Plugin übernimmt
alle hier vorgestellten Schritte und muss "nur" noch konfiguriert werden (Abbildung 8).
Abbildung 8: Einrichtung des APEX-Plugins "Simple RSS Reader"
Wie man sehen kann, nimmt das Plugin dem Entwickler eine ganze Menge Arbeit ab;
Dinge wie "Asynchrones Refresh" werden automatisch erledigt. Mit dem Plugin ist
auch das Aufnehmen mehrerer Feeds auf eine APEX-Seite kein Problem mehr: die Seite
reagiert und kann genutzt werden, auch wenn einer der RSS-Feeds etwas langsamer arbeiten
sollte.
Abbildung 9: Das Plugin Simple RSS Reader in Aktion: Mehrere RSS-Feeds auf einer Seite
Fazit
Die Einbindung externer Informationen per RSS in eine APEX-Anwendung ist
ein Kinderspiel. Einfache Fälle erledigt das APEX-Plugin; soll es individueller
werden, so ist die technische Grundlage innerhalb weniger Minuten gelegt - mit
der SQL-Abfrage zum Extrahieren der Informationen können beliebig PL/SQL-Prozeduren,
-Funktionen oder andere Datenbankaktivitäten gestartet werden.
Zurück zur Community-Seite
|