24. September 2003

[ Diverses ]

OPML2HTML - Blogroll bauen mit SharpReader und XSLT

Hier ist eine kleine Anleitung, wie man mit dem OPML-Export aus SharpReader eine HTML-Ausgabe bauen kann, die man dann z.B. als Blogroll in eine Website einbauen kann.

[Update 10.10.2004: Inzwischen verwendet die verlinkte Seite ein anderes Prinzip.]

Wir verwenden dafür eine XSLT, mit dem das OPML-File in HTML gewandelt wird. Die HTML-Ausgabe wird dann in eine HTML-Seite eingebunden.

So geht's:

  1. Liste der Abonnements aus Sharpreader exportieren ("File" - "Export Subscriptions") und auf den Webserver hochladen.
  2. Ein XSL-File erstellen. Das XSL ist eine Art Template: In ihm stehen der HTML-Code der erzeugt werden soll und die Platzhalter für Elemente aus dem OPML-File, die wir einbinden wollen.

    Mein XSL-File sieht so aus:

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">

    <table id="blogroll">
    <xsl:for-each select="opml/body/outline">
    <tr>
    <td>
    <b><a href="{@htmlUrl}"><xsl:value-of select="@title"/> </a></b><br/>
    <xsl:value-of select="@description"/>
    </td>
    <td>
    <a
    href="{@xmlUrl}" target="_blank"><img
    src="http://www.roell.net/xml.gif" width="36" height="14"
    alt="XML" border="0" /></a>
    </td>
    </tr>
    </xsl:for-each>

    </table>
    </xsl:template>

    </xsl:stylesheet>


    Das XSL-File kommt auch auf den Webserver.

  3. Jetzt können wir den ersten Test fahren und die XSL Transformation durchführen: Wir verwenden den W3C XSLT Service und schicken unser OPML durch das XSL. Das geht mit dem Formular auf der Website oder direkt über eine URL à la http://www.w3.org/2000/06/webdata/xslt?xslfile=http://www.roell.net/opml2html.xsl&xmlfile=http://www.roell.net/subscriptions.opml.
  4. Jetzt muss diese Ausgabe nur noch in die eigene Website eingebaut werden. Ich nehme dafür ein kleines PHP-Script, das so aussieht:

    <?php

    $file = fopen ("http://www.w3.org/2000/06/webdata/xslt?xslfile=http://www.roell.net/opml2html.xsl&xmlfile=http://www.roell.net/subscriptions.opml", "r");

    if (!$file) {
    echo "<p>Unable to open remote file.\n";
    exit;
    }

    while (!feof($file)) {
    $buffer = fgets($file, 4096);
    echo $buffer;
    }

    fclose ($file);
    ?>

    Auch das PHP-Skript wandert auf den Webserver. Seine Ausgabe wird bei mir über ein SSI eingebunden:

    <!--#INCLUDE VIRTUAL="/weblog/feedlist.php" -->


Fertig.

Disclaimer:

  • Mit OPML-Files, die Hierarchien beinhalten, die z.B. entstehen wenn in SharpReader "Ordner" angelegt sind, ist das Ganze nicht getestet. Ebenfalls nicht getestet ist das Ganze mit OPML-Files die von anderen Programmen erzeugt wurden.

  • Die PHP-Parserei kann man sich mit readfile auch einfacher machen. Meine kompliziertere Variante entspannt noch einer früheren Version des Skripts, in dem ich PHP noch dazu verwendete, das transformierte HTML nachzubearbeiten.

  • Der PHP-Code kann natürlich auch direkt in die Seite eingebunden werden, ohne den Umweg über ein eigenes File. Bei mir machte das mit dem SSI zur Wiederverwendbarkeit Sinn.

  • Ich verstehe überhaupt nichts von PHP und sehr wenig von XSLT. Das hier ist nicht schön, gut, performant oder sonst irgendwas. Es funktioniert nur. (Für mich.) Verwendung auf eigene Gefahr. Seid nett zu mir, wenn ihr meinen Code zerreißt. ;-)

Weitere Hinweise:


  1. Nach dem Export aus SharpReader schicke ich das OPML-File erst noch durch die OpenOffice-Tabellenkalkulation um die Zeilen alphabetisch zu sortieren. Macht die Liste hübscher und man kriegt keinen Ärger mit dem Lesern: "Warum steht mein Blog so weit unten?"
    • [Nachtrag] Das Sortieren geht natürlich auch per XSLT, wenn man will: <xsl:sort select="@description" lang="de" order="ascending"/>. Danke an Marcus Geiger für den Hinweis.

  2. Blumen, Huldigungen, Verbesserungsvorschläge bitte an martin@roell.net.

Danke an Rainer Wasserfuhr, der mir den XSLT Service gezeigt und mein erstes XSL-File geschrieben hat und an Martin "chrono" Ringehahn, der diesen Eintrag korrekturgelesen hat, was zu einer starken Vereinfachung meiner ursprünglichen XSLT geführt hat.

[03.02.04] Eine andere Möglichkeit, so eine Blogroll aus OPML zu bauen steht bei Ralf Graf.

Trackbacks sind Links von anderen Weblogs auf diesen Eintrag.

OPML2HTML - Blogroll bauen mit SharpReader und XSLT...

PapaScott's Quick Links: OPML2HTML - Blogroll bauen mit SharpReader und XSLT (25.09.03 08:15)

 

An dieser Stelle sei auch noch mal hingewiesen auf das bei Kalsey vorgeschlagene Blogroll autodiscovery.

Rainer am 24.09.03 20:24 #
 

Hallo, ich hatte vor kurzem auch sowas ähnliches gemacht (hier zu sehen). Das Ergebnis sieht dann so aus wie hier. Für den XML-Button braucht's da dann auch keine Grafik :)

Die XSL-Datei sieht bei mir folgendermaßen aus ... das ganze funktioniert auch (noch) nicht mit hierarchischen OPML-Dateien und deinem Disclaimer kann ich mich auch sonst nur anschließen :)

Stefan am 24.09.03 20:40 #