Von OPML zu HTML (OPML2HTML)

Ich bin endlich mal wieder dazu gekommen meine gar sehr veraltete Blogroll auf den neuesten Stand zu bringen. Am Einfachsten geht das natürlich über ein Export meines Feedreaders Akregator. Aus der erzeugten OPML lässt sich mit Hilfe eines PHP-Skriptes eine HTML-Datei erzeugen, die man schnell auf einer bestehenden Seite einbauen kann.

Das Problem, welches ich heute hatte: Netcologne ließ mich heute ca. eine Stunde lang nicht ins Internet um nach dem Skript zu suchen. :/

Aber mein nettes Linux ließ mir noch die Bash, die für solche Dinge bestens geeignet ist. Folgendes Skript kann man bestimmt viel einfacher und eleganter schreiben, aber als Skript-Dilletant konnte ich mir nur folgendes aus man awk und man sort zusammenreimen:

echo "<ul>" > opml.html && cat akregator.opml | grep htmlUrl | awk -F\" '{print "<li><a href=\"" $(NF-25) "\" " "title=\"" $(NF-1) "\">" $(NF-23) "</a> <a href=\"" $(NF-7) "\">(Feed)" "</a></li>"}' | sort -t\> -bfk 3 >> opml.html && echo "</ul>" >> opml.html

Um das Chaos etwas aufzudröseln:

Da ich gerne eine Liste mit den abonnierten Feeds haben möchte, schreibe das entsprechende öffnende Listentag des HTML-Markup in eine Datei namens opml.html:

echo "<ul>" > opml.html

Dannach öffne die exportierte OPML und schreibe dessen Inhalt nach stdout:

cat akregator.opml

Suche mir dann alle Zeilen, in denen das Suchmuster htmlUrl vorkommt:

grep htmlUrl

Benutze awk, setzt den Seperator auf das Zollzeichen (”) und schreibe einen Listenpunkt als a-Link mit Title-Tag und Feedangabe und setze an die entsprechenden Stellen die korrespondierenden Werte ein, die mit dem Seperator aus der OPML-Zeile ausgelesen werden (z.B.: $(NF-1)):

awk -F\" '{print "<li><a href=\"" $(NF-25) "\" " "title=\"" $(NF-1) "\">" $(NF-23) "</a> <a href=\"" $(NF-7) "\">(Feed)" "</a></li>"}'

Jetzt sortiere das Ganze alphabetisch über den Linktext (k 3), nimm dabei das Endtag (>) als Trenner, ignoriere Leerzeichen am Anfang (b) und verhalte dich gefälligst case-insensitiv (f); ach ja: Schreib das bitte in die schon angefangene Datei opml.html ohne den bisherigen Inhalt zu löschen (nämlich den öffnenden Listentag):

sort -t\> -bfk 3 >> opml.html

Fein, und jetzt schreib den geschlossenen Listentag auch noch in die Datei:

echo "</ul>" >> opml.html

Das wars. Das kann man jetzt relativ schmerzlos in bestehende HTML-Seiten kopieren. Das heißt, wenn das Internet wieder erreichbar ist.:)

Das kleine Skript hat gegen über PHP auch den Vorteil, dass ich meine OPML nicht erst auf einen PHP-fähigen Account laden oder lokal einen Webserver anwerfen muss. Der Vorteil gilt natürlich nur für *nix-Benutzer

Wer das Skript als ausführbare Datei haben möchte der bediene sich: opml2html
Mittlerweile habe ich das Script auf die OPML angepasst, welche vom Akregator aus dem KDE4 exportiert wird.

Etwas missfällt mir aber dennoch: Wenn man meine Blogroll durschaut, sieht man, dass die Sonderzeichen nicht richtig einsortiert werden. Vielleicht hat ja jemand einen Tip für mich, warum das so ist und wie das beheben kann.

Kommentar





Textile-Hilfe