Also, ich hab' hier mal was vorbereitet:
- Eine NNTP-Client-Verbindung zum Eternal September herstellen
- Alle Gruppennamen laden (in eine "global.db" SQLite-Datei)
- Für jede Gruppe alle (partiellen) Header laden -> damit kann man
bereits die Baumstruktur aufbauen. Gespeichert in einer jeweiligen
<group-name>.db SQLite-Datei.
- Anschließend für jeden Header die korrekten Header+Body laden.
Um Speicherplatz zu sparen:
- Bekannte/häufig verwendete Header-Namen werden abgekürzt
- Die gesamte Nachricht wird komprimiert (XZ-Kompression bzw. LZMA) -
falls die Kompression jedoch größer als das Original ist, wird das
Original verwendet.
- Die Nachrichten werden als Append-only nacheinander in einer riesigen
Binärdatei gespeichert. Pro Nachricht werden ein paar Flags (z.B.
Kompression ja/nein), Datenlänge, Datenprüfsumme und eine Referenz zum
partiellen Header gespeichert.
- Der Offset in der Binärdatei und die Datei-"Id" werden pro Header in
der SQLite <group-name>.db abgelegt.
Die Idee besteht darin, dass das Ganze als Langzeit-Archiv möglichst
wenig Speicherplatz benötigt und die Nachrichten dennoch schnell
einlesbar sind.
Grafisches Webfrontend folgt später.
Das Projekt ist öffentlich auf GitHub verfügbar und definitiv ein Work
in Progress (Prototyp, nur gucken, nicht anfassen :-) ):
https://github.com/unflow-group/unflow
Mithilfe ist gern erwünscht - und sei es nur in Feedback, Meinungen und
vor allem Antworten auf Fragestellungen:
1) Google Groups hat scheinbar keine NNTP-Server, d.h. man kann den
Inhalt anscheinend nur online scrapen - leider wohl auch ohne die
originalen Header. Erschwerend finde ich nicht mal eine MessageId (also
die originale), sodass ich später auch keine Beständigkeit von original
Archiven deduplizieren kann.
2) Angeblich soll man Google Groups auch nach der Abschaltung zumindest
noch lesen können?
3) Gibt es einen Bulk-Download Befehl im NNTP-Protokoll? Ich lade
derzeit alle Artikel einzeln herunter über den Befehl "ARTICLE
<message-id>|<article number>".
4) Die Message-ID, bleibt diese immer gleich? Gehen wir mal davon aus,
es gibt verschiedene NNTP-Provider mit überschneidenden Gruppen (was ja
im Sinne des Erfinders ist), ist garantiert, dass die Message-ID
konstant über alle Provider ist? Alternativ könnte man einen Fingerprint
über die Header+Body abbilden und damit ein Matching machen - Glaskugel
lässt grüßen...
Natürlich würde ich mich auch auf Coding-Support freuen, träumen darf
man ja... :_)