Donnerstag, 21.10.2004
Achtung: Neuer RSS-Feed
Ich habe ein bisschen am RSS-Feed gebastelt: Nun gibt es Content Syndication nach RSS 1.0 statt 0.91. Grund für die Umstellung: Im alten Feed wurde für jeden Eintrag das selbe falsche Datum angezeigt. Dem alten Feed konnt ich kein richtiges Datum beibringen, denn in RSS 0.91 haben alle Einträge eines »Channels« das selbe Datum. Also ein anderer RSS-Standard: Es erschien einfach, ein 1.0-Plugin zu installieren, zumindest anfangs.Geek-Speak: Es war nicht ganz so einfach, das RSS-1.0-Plugin einzubinden. Zunächst habe ich mir das rss10-Plugin von Rael runtergeladen und installiert. Problem: Out of the Box kann es keinen validen Feed generieren, wenn nicht einige Entities escaped werden – beispielsweise das Ampersand, das ich für meine Guillemets »« brauche: Als Entity werden die » und « geschrieben, und das kaufmännische Und – Ampersand – muss in einer XML-Datei korrekt codiert werden.
Ein bisschen googeln brachte mich auf das vrss10-Plugin von Matthias Eberl, das dieses Problem löst.
Doch keine Problemlösung ohne neues Problem: Aus irgendeinem Grund wurden nicht die Daten zu Autor, Mail-Adresse und Generator im Feed mitgeschickt, obwohl ich sie in die Variablen im Plugin eingetragen hatte. Die Lösung hierfür lag in der Flavour-Datei head.vrss10: Dort habe ich die Variablen rausgeschmissen und die entsprechenden Werte »hart« eincodiert.
Valide Feeds!
Allerdings noch mit einem Schönheitsfehler: Die Zeile mit dem Datum stand nun im Feed innerhalb des Eintragstextes: meta-creation_date: 2004/10/21 10:30
Gefahr erkannt: Ich verwendete noch das Plugin entries_index_tagged – das filtert zwar die Meta-Zeilen aus dem Original-RSS-Feed, aber es zickt etwas im Zusammenhang mit rss10.
Gefahr gebannt: Die Lösung für dieses Problem bestand darin, von entries_index_tagged auf den Nachfolger entries_cache umzusteigen.
Soweit, so gut: Die Meta-Zeilen wurden wieder zuverlässig aus dem RSS-Feed getilgt, der Feed validierte und er hatte auch das korrekte Datum bei jedem Eintrag. Aaaaber entries_cache wirbelte meine Postings durcheinander: Plötzlich standen auf der Startseite Einträge mit der Jahresangabe 2031 oder 2003.
Grund: entries_cache kann nur mit zwei Zeitformaten umgehen, die man per Variable umschaltet: mm/dd/yy (US, Default) und dd/mm/yy (UK). Meine Postings enthalten in der meta-creation_date-Zeile die Datumsangabe in der Form yyyy/mm/dd. Ich musste also noch die Meta-Zeilen in 1.770 Textdateien ändern. Zum Glück gibt es BBEdit mit seiner unschlagbaren Search/Replace-Funktion. Mit einem normalen Suchen-Ersetzen war es hier natürlich nicht getan, schließlich gibt es für yyyy/mm/dd zig denkbare Kombinationen.
Es war an der Zeit, eine Welt zu betreten, um die ich bislang einen großen Bogen gemacht habe: Regular Expressions. Im Suchen/Ersetzen-Dialog von BBEdit kann man Grep verwenden, und das BBEdit-handbuch widmet sich in Kapitel 8 auf exakt 30 Seiten dem Thema. Mit den Beispiel dort, auch wenn ich mir mehr gewünscht hätte, konnte ich folgende »Search for«-Anfrage schreiben:
meta-creation_date: (\d{4})\/(\d{2})\/(\d{2})
Dazu gesellt sich dieser »Replace with«-Ausdruck:
meta-creation_date: \3/\2/\1
Sieht wild aus, weil es ein bisschen komplizierter ist als »ersetze A durch B«, aber RegExp-Profis lachen sich bestimmt kaputt! :-)
Wie funktioniert das? Das (\d{4}) sucht nach »any digit (0-9)« (das bewirkt das \d), und zwar genau vier Zeichen lang (dafür ist das {4} da). Weil das ein »Pattern« ist, den ich nachher wieder brauche, muss ich das in runde Klammern schreiben, also (\d{4}). Der Schrägstrich danach ist »normaler« Text, allerdings muss der »escaped« werden, als \/. Es folgt der nächste Pattern, (\d{2}). Dann wieder ein escapter Schrägstrich und erneut (\d{2}). Zusammengefasst suche ich also nach meta-creation_date: xxxx/xx/xx.
Grep merkt sich die Pattern, die er gefundet hat – so eine Art Variable –, deswegen kann ich die Zahlen im »Ersetzen«-Feld jetzt umgruppieren: meta-creation_date: wird wieder hingeschrieben, dann kommt zunächst das dritte Pattern an erster Stelle (der Tag, dd), gefolgt von einem Schrägstrich, dem zweiten Pattern (Monat, mm), noch einem Schrägstrich und am Schluss das Jahr. So einfach ist das. Am Schluss das Ganze in BBEdit als Text Factory gespeichert, und die hat mir das in den 1.770 Dateien ersetzt.
[Die Schrägstriche haben nichts mit Grep zu tun, sondern sind wie gesagt »normaler Text«. Die brauche ich, um für das Blosxom-Plugin die einzelnen Datumsbestandteile voneinander zu trennen.]
Ich bin stolz auf mich.
Nachtrag: Hmm, auf einmal wird die Meta-Zeile doch wieder im Feed angezeigt. Habe ich versehentlich den alten Feed getestet und entriescache bringt doch nichts, oder habe ich irgendwas geändert? Egal: Geschwind das RSS-Plugin angepasst, um die Meta-Zeile definitiv rauszuschmeißen. Ok, ganz so firm bin ich in Perl und RegExp noch nicht, deswegen musste ich googeln. Ich bin auf einer japanischen Website fündig geworden:
$body =~ s/meta-creation_date : [0-9:\/ ]*//g;
Ich weiß nicht genau, wie es funktioniert, auf jeden Fall wird der String mit meta… und nachfolgenden Ziffern und Schrägstrichen aus der Variable $body getilgt. Jetzt passt alles mit dem Feed!
Dank an Volker Barth für’s Beta-Testen!
Nachtrag 2: Öhm, es kann zuweilen vorkommen, dass der Feed nicht valide ist. Das liegt daran, dass im Moment in der description noch keine Ampersands codiert werden (im content schon). Muss ich bei Gelegenheit mal angehen.
Nachtrag 3: So, der Feed validiert jetzt, auch wenn in der description Umlaute vorkommen. Im foreshortened-Plugin war noch eine Zeile notwendig:
$body =~ s/&/&/g;
Erschienen am Donnerstag, 21.10.2004 @ 7:24
| Kommentare deaktiviert
Tags: Interna
