Skip to content

de.alt.netdigest: Hinter den Kulissen

de.alt.netdigest ist eine moderierte Newsgroup; das bedeutet, dass Postings nicht direkt in der Gruppe veröffentlicht werden, sondern per E-Mail an einen Moderator versandt werden, der dann - wenn nichts gegen eine Veröffentlichung spricht - aus dieser E-Mail wieder ein Posting macht und es veröffentlicht. Das geht natürlich im Grundsatz mit einem Mail- und Newsreader, wäre aber vergleichsweise aufwendig; meistens werden daher per Mail oder über ein Webinterface betriebene Moderationssysteme (oder “Bots”) verwendet.

Für de.alt.netdigest gibt es keine so komplexen Lösungen; im Prinzip müssen ja nur die per Mail eingereichten Beiträge ausgewählt, in ein bestimmtes Format gebracht und dann veröffentlicht werden. Dabei hilft eine Reihe von Scripts, die ich von meinem Vorgänger als Moderator übernommen und an meine Bedürfnisse angepasst habe - genau genommen habe ich auf der Basis der Scripts und aus Versatzstücken daraus meine eigene Lösung erstellt.

Für erste Aufgabe, das Auswählen der per Mail eingereichten Postings für eine Veröffentlichung, lässt sich bequem in einem Mailclient lösen; ich verwende wie Holger, der bisherige Moderator von de.alt.netdigest, zu diesem Zweck Thunderbird. Holger hat die ausgewählten Postings dann in einen Unterfolder verschoben, die entsprechende Datei mit einem Script zur Konvertierung bearbeitet, dass die einzelnen Mails/Postings umformatiert und in eine neue Datei schreibt, aus der sie dann mit einem weiteren Script gepostet werden können. Die eindeutigen IDs der geposteten Einreichungen werden zur Vermeidung von Duplikaten gespeichert und die fertigen Mails archiviert und später gelöscht.

Diesen Workflow habe ich im Prinzip beibehalten, aber mit einigen Abweichungen. Zum einen nutze ich keinen Thunderbird-Folder, sondern ein Verzeichnis auf dem IMAP-Server; zum anderen (und das ist vermutlich der wesentliche Unterschied) veröffentliche ich die ausgewählten Postings nicht live, sondern schiebe sie in eine Warteschlange, aus der jeden Tag eine bestimmte Anzahl veröffentlicht wird, ganz ohne mein Zutun. Das führt zu einem gleichmäßigeren Nachschub, und vor allem vermeidet es, dass Veröffentlichungen in der Gruppe unmittelbar von meinem Zeitbudget abhängig sind. Ich kann Einreichungen “schubweise” bearbeiten, wenn ich einmal am Stück Zeit habe, und mit ihnen die Warteschlange befüllen, die dann auch mal einige Tage (während des Abbaus des von Holger übernommenen Vorrats: einige Wochen) ohne Nachschub auskommt.

Auswahl

Zum Auswählen verschiebe ich mit Thunderbird die Beiträge, die veröffentlichungswürdig sind, aus dem Posteingang der Submissionsadresse in einen IMAP-Folder namens “auswahl”. Spam und ungeeignete Beiträge oder ersichtliche Duplikate kann ich löschen oder anderweitig archivieren; auch könnte ich E-Mails direkt beantworten oder in einem anderen IMAP-Folder (auch in einem anderen IMAP-Konto) verschieben.

Konvertierung

Als Quelle für die Weiterverarbeitung dient mir nicht eine Datei, in der die einzelnen Mails (bspw. im MBOX-Format) zusammengefasst sind, sondern unmittelbar der IMAP-Folder im Maildir-Format. Das Konvertierungsscript convert.pl liest die einzelnen Mails ein und schreibt sie nach Konvertierung in ein Datenverzeichnis data/auswahl/. Zuvor werden die in einzelnen, nach Jahren geordneten Dateien gespeicherten Message-IDs der bereits veröffentlichten Postings eingelesen und die IDs der neuen, zur Veröffentlichung vorgesehenen Postings mit dieser Liste abgeglichen. Wurde das Posting bereits veröffentlicht, oder enthält die Einreichung keine Message-ID, wird die entsprechende Datei nicht kopiert und eine Fehlermeldung ausgegeben; ansonsten wird die Message-ID auf STDOUT ausgegeben. Die veröffentlichungsfähigen Beiträge im Datenverzeichnis können jetzt mit einem Texteditor eingesehen und ggf. nachbearbeitet werden.

Die Dateien, die nicht ins Datenverzeichnis kopiert wurden, können im Falle von Duplikaten einfach im IMAP-Folder verbleiben; sie sollen ja nicht noch einmal veröffentlicht werden. Fehlt ihnen eine Message-ID oder bestehen andere Probleme, kann auch die Datei im IMAP-Folder entsprechend bearbeitet und bspw. die Message-ID herausgesucht und ergänzt werden. Ist das zuviel Aufwand, kann die Datei ebenfalls schlicht dort verbleiben; sie wird dann eben später nicht veröffentlicht.

Wenn nach dem ersten Durchlauf des Konvertierungsscripts Änderungen am Inhalt des IMAP-Folders vorgenommen wurden, kann man es einfach noch einmal starten; es kopiert dann wieder alle veröffentlichungsfähigen Beiträge in das Datenverzeichnis, möglicherweise diesmal auch die nachbearbeiteten.

Zur Bearbeitung gehört:

  • Das Verwerfen aller Mail-Header außer dem Absender (“From:” und ggf. “Reply-To:”), der den Einreicher wiedergibt.
  • Das Erstellen eines Betreffs (“Subject:”) aus dem Betreff des eingereichten Postings und der in eckigen Klammern vorweggestellten Newsgroup, aus der die Einreichung stammt, samt korrekter Kodierung (MIME encoded words).
  • Das Konvertieren des Inhalts (Body) des eingereichten Postings nach UTF-8 ohne quoted-printable-Kodierung.
  • Das Entfernen von Leerzeilen am Ende des eingereichten Postings.
  • Das Herausschreiben eines veröffentlichungsfähigen Postings, das so 1:1 eingespeist werden kann.

Das Konvertierungsscript kann auch statt aller nur eine bestimmte Mail aus dem IMAP-Folder lesen oder - statt die Mails aus dem IMAP-Folder zu lesen - die bereits ins Datenverzeichnis kopierten Beiträge neu einlesen und nochmal konvertieren; das macht zum Beispiel Sinn, wenn nach dem ersten Durchlauf noch Änderungen vorgenommen wurden (oder im Script nachgebessert werden musste :-)). Außerdem kann die Prüfung auf Duplikate unterdrückt werden, und es kann auch nur die Message-IDs der veröffentlichungsfähigen Beiträge ausgeben, ohne sie zu (kopieren und zu) konvertieren.

Sind die Beiträge im Datenverzeichnis veröffentlichungsreif, kann man sie in die Warteschlange - ein anderes Datenverzeichnis - verschieben. Sinnigerweise sollten dann die Message-IDs der nun zur Veröffentlichung bereitstehenden Beiträge in die Liste für den Duplikatcheck aufgenommen werden.

Veröffentlichung

Die Veröffentlichung ist vergleichsweise einfach - vor allem deshalb, weil ich dafür keinen eigenen Code geschrieben habe, sondern schlicht das Allzweckwerkzeug tinews.pl verwende, das sich auch um das Anhängen der Signatur und die GPG-Headersignatur kümmert.

Das Postingscript post.pl kann daher auch nur zwei Dinge:

  • Eine zufällig ausgewählte Datei aus der Warteschlange (oder eine als Parameter übergebene bestimmte Datei) vermittels tinews.pl posten.
  • Optional vorher Datum und Message-ID neu setzen (denn die wurden ja ursprünglich bei der Konvertierung neu erzeugt, die zu diesem Zeitpunkt Tage, im Extremfall auch Wochen zurückliegen kann).

Workflow

Aus diesen Bausteinen entsteht folgender Workflow:

  • Auswählen der zur Veröffentlichung vorgesehenen Einreichungen im Posteingang und Verschieben in den Auswahl-IMAP-Ordner.
  • Starten von convert.pl.
  • Ggf. Nachbearbeiten fehlerhafter Einreichungen (im IMAP-Folder) und erneuter Konvertierungslauf, bis alle Beiträge ohne Fehlermeldung kopiert werden bzw. Fehlermeldungen nur noch Duplikate betreffen.
  • Durchsicht aller Postings im Datenverzeichnis im Texteditor (vim auf der Shell, alternativ auch Sublime Edit oder ein anderes Tool via SCP): Stimmen Umlaute und Sonderzeichen, passt der Zeilenumbruch, sieht alles richtig aus? Wurde der Betreff richtig erzeugt?
  • Verschieben aller Beiträge in die Warteschlange, speichern der Message-IDs für den Duplikatcheck.

Für den letzten Schritt verwende ich ein simples Shellscript:

#!/bin/bash
~/bin/convert.pl -rm >> ~/data/mid-2021.txt
mv ~/data/auswahl/* ~/data/fertig/
mv ~/mail/.INBOX.auswahl/cur/* ~/mail/.INBOX.fertig/cur/

Der erste Befehl gibt alle Message-IDs der in den veröffentlichungsfähigen Beiträgen enthaltenen Postings aus, ohne sonst irgendeine Konvertierung vorzunehmen; diese werden an die Datei für das laufende Jahr angehängt. Die zweite Zeile verschiebt die Beiträge aus dem Auswahl-Datenverzeichnis in die Warteschlange. Die dritte Zeile kopiert die Mails aus dem IMAP-Folder “auswahl” in einen anderen für die erledigten Beiträge.

Die eigentliche Veröffentlichung erfolgt dann mehrmals täglich über einen Cronjob, der das Postingscript aufruft; solange die Warteschlamge immer nachgefüllt wird, bedarf die eigentliche Veröffentlichung dann keiner Interaktion mehr. Ist die Warteschlange zu voll, können aber natürlich auch durch einen manuellen Aufruf des Postingscripts zusätzliche Beiträge veröffentlicht werden.

[Nachträglich veröffentlicht im Oktober 2021.]

Trackbacks

Netz - Rettung - Recht am : Base64 ist schlecht zu lesen

Vorschau anzeigen
Bereits im vergangenen Juli hatte ich berichtet, dass ich die Moderation der Newsgroup de.alt.netdigest übernommen hatte, und auch ein wenig den von mir verwendeten Workflow vorgestellt. Das Konversions-Script, das aus einer EInreichung per E-Mail ein Po

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

HTML-Tags werden in ihre Entities umgewandelt.
Markdown-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
Gravatar, Identicon/Ycon Autoren-Bilder werden unterstützt.
Formular-Optionen