|
Getnews 2.5 ist ein Komandozeilen Newsreader und Newsgrabber. Das Programm selber wurde von mir in C geschrieben und ist gerade mal 100KB groß und benötigt kaum CPU Resourcen. Getnews wurde geschrieben um Newsgruppen aus dem Usenet im Hintergrund (in einem DOS Fenster) zu verarbeiten. Die Komunikation mit dem Newsserver erfolgt dabei streng nach RFC 977.
Da Getnews nur die Artikel abholt und speichert, ist zum Decodieren der Binaries ein Programm wie UUDEVIEW, UUD oder UUD32WIN erforderlich. UUDEVIEW 0.5 hat dabei den Vorteil, dass es ebenfalls ein Kommandozeilentool ist und decodierte Messages automatisch gelöscht werden können.
Besonderheiten:
- Getnews benötigt im Betrieb nur etwa 2MB Hauptspeicher und unter 2% CPU-Zeit.
- Getnews markiert gelesene Message-Ids über alle Gruppen und vermeidet so doppelte downloads.
- Getnews lädt je Durchgang eine definierbare Anzahl an Artikeln je Gruppe.
- Getnews verwendet eine Subject Filterdatei um unerwünschte Inhalte zu überspringen (z.B. Videos).
- Getnews kann Artikel einer Gruppe nach Gruppe aber auch nach Absender in einem eigenen Verzeichnissen ablegen (oder auch nach Gruppe und Absender). Dadurch erhält man einen schönen Überblick, wer was geposted hat.
- Getnews erstellt je Gruppe oder Absender eine Liste der Gruppen in die ein Artikel ebenfalls geposted wurde.
- Getnews verarbeitet auch Server mit mehr als 100.000 Gruppen.
- Getnews verarbeite auch Gruppen mit mehr als 1.000.000 Postings.
- Getnews kann auch Artikel von verschiedenen Servern abholen.
- Unerwünschte Absender können je Gruppe geblockt werden.
- Getnews wurde optimiert um in Verbindung mit REXX Newsgruppen automatisch verarbeiten zu können.
- Getnews ist eine 32Bit Windows Anwendung.
Installation: Die Zip-Datei runterladen und in einem eigenen Verzeichnis (z.B.: \getnews) entpacken.
Anwendung: getnews <parameter>
Parameter: /n=news.newsserver.com (Serveradresse) /p=119 (Serverport, optional) /l (abholen der Liste der Newsgruppen, optional) /m (abholen der Messages, optional) /u=username (Login zum Server, optional) /w=passwort (Passwort zum Server, optional) /v (verarbeiten der Filterdatei, optional) /e (skip on errors, optional) alle Parameter sind cAsEsEnSiTvE!
Beispiele:
getnews /n=your.newsserver.com /u=username /w=password /l
Diese Anweisung muss zuerst einmal aufgerufen werden, um eine Liste der Newsgruppen abzuholen. Dieser Vorgang kann beim ersten Aufruf etwas länger dauern, je nachdem, wieviele Newsgruppen am Server sind, da die Liste sortiert wird. Dabei wird eine Datei names your.newsserver.com.act angelegt. Dies Datei muss nun editiert werden (mit Notepad oder einem anderen ACSII-Editor) um Gruppen abzuholen.
----- Datei Beispiel (Ausschnitt) ----- n 0 0 0 100 0.alaskan-malamutes groups\g3 n 0 0 0 100 0.siberian-huskys groups\g4 n 0 0 0 100 0.test groups\g5 n 0 0 0 100 0.verizon.adsl groups\g6 n 0 0 0 100 0.verizon.discussion-general groups\g7 n 0 0 0 100 0.verizon.email.spam groups\g8 n 0 0 0 100 0.verizon.flame groups\g9 n 0 0 0 100 0.verizon.linux groups\g10 n 0 0 0 100 0.verizon.newsgroup.requests groups\g11 n 0 0 0 100 0.verizon.security groups\g12 n 0 0 0 100 0.verizon.test groups\g13 n 0 0 0 100 0.verizon.windowsxp groups\g14 ----- Datei Beispiel (Ausschnitt) -----
Je Gruppe existiert eine Zeile in der Datei. Die Datei ist alphabetisch sortiert. Zuerst steht ein Flag. Dieses hat folgende Bedeutung: n = neue Gruppe, nicht abholen - = alte Gruppe, nicht abholen x = Gruppe nicht abholen g = Gruppe abholen und alle Artikel in einem Gruppenverzeichnis ablegen. u = Gruppe abholen und die Artikel in je einem Verzeichnis pro Absender ablegen. b = Gruppe abholen und je Absender ein Verzeichnis in der jeweiligen Gruppe anlegen. Die nächsten 3 Zahlen sind Werte für erster Artikel, letzter Artikel, letzter gelesener Artikel (hier zunächst alle 0), die vierte Zahl (hier default 100) gibt an wie viele Artikel in dieser Gruppe abgeholt werden sollen. Danach folgt der Gruppenname und das Gruppenverzeichnis. Zum Testen am besten mal eine Gruppe auf g, b oder u ändern und die Datei speichern. Danach folgende Anweisung verwenden um die Artikel abzuholen:
getnews /n=your.newsserver.com /u=username /w=password /m
Jetzt werden die markierten Gruppen abgeholt und z.B. je 100 Artikel gelesen. Danach wird die Gruppendatei etwa so aussehen:
----- Datei Beispiel (Ausschnitt) ----- n 0 0 0 100 0.test groups\g5 n 0 0 0 100 0.verizon.adsl groups\g6 b 17456 343765 17856 100 0.verizon.discussion-general groups\g7 n 0 0 0 100 0.verizon.email.spam groups\g8 n 0 0 0 100 0.verizon.flame groups\g9 ----- Datei Beispiel (Ausschnitt) -----
Im Gruppenverzeichnis (hier groups/g7) wurde nun eine Datei Names usrid angelegt. In dieser Datei befindet sich je Absender ein Eintrag.
----- Datei Beispiel (Ausschnitt) ----- 1 From: "test1" <noname.anywhere.com> 2 From: "test2" <noname.anywhere.com> 3 From: "user3" <noname.anywhere.com> ----- Datei Beispiel (Ausschnitt) -----
Um nun einen bestimmten Absender zu blocken, muss nur dessen Nummer auf -Nummer geändert werden.
----- Datei Beispiel (Ausschnitt) ----- 1 From: "test1" <noname.anywhere.com> -2 From: "test2" <noname.anywhere.com> 3 From: "user3" <noname.anywhere.com> ----- Datei Beispiel (Ausschnitt) -----
In diesem Beispiel wird also test2 geblockt und keine weiteren Artikel mehr von ihm bezogen.
Bei Verwendung der Parameters /v wird die Subject-Filterdatei getnews.no auf jeden Artikel angewendet.
----- Datei Beispiel (Ausschnitt) ----- -<.avi> -<.flv> -<.mov> -<.mpeg> -<.mpg> -<video> -<any text> ----- Datei Beispiel (Ausschnitt) -----
Das führede - kennzeichnet aktive Einträge. Um einen Filter außer Kraft zu setzten reicht es also das - mit z.B. + zu ersetzen. Die spitzen Klammern schließen nun den Filterbegriff ein (notwendig um Leerzeichen vewenden zu können).
Nachfolgendes REXX Script zeigt, wie man das Abholen der Newsgruppenliste und Abholen der Newsgruppen automatisieren kann. Das Script beendet sich, wenn entweder kein Artikel mehr zu holen ist, oder der Speicherplatz zu niedrig wird. Getnews liefert die Anzahl der abgeholten Artikel als RC (Errorlevel) zurück. Negative Werte bedeuten dabei Laufzeit Fehler.
----- Datei Beispiel ----- /* REXX Beispiel Script */ numeric digits 15 /* Werte hier anpassen */ Username = avc23457 Password = testpass Server = news.yournewsserver.com /* */ Ret = RxFuncAdd( "SysLoadFuncs" , "RexxUtil" , "SysloadFuncs" ) Ret = SysLoadFuncs( ) Base = Directory( ) DiskDrive = SubStr( Base , 1 , 2 ) "getnews /n="Server "/l /u="Username "/w="Password k = 0 main: E = SysDriveInfo( DiskDrive ) parse var E D1 Sp2 Ge2 Rest say sp2 if Sp2 < 100000000 then do Ret = Beep( 600, 600 ) Ret = Beep( 300, 300 ) Ret = Directory( Base ) exit end if k > 2 then do k = 0 "getnews /n="Server "/m /v /e /u="Username "/w="Password end else do "getnews /n="Server "/m /v /u="Username "/w="Password end k = k + 1 say "break with ctrl-c here" k rc if rc > 0 then do ret = SysSleep( 15 ) signal main end exit ----- Datei Beispiel -----
Je nach Bedarf kann dieses Script nun um Befehle erweiter werden um z.B. uudeview auszuführen. wie z.B.: "md _deco" "uudeview -i -a -f -c -p _deco *.msg" in jedem l_ Verzeichnis
Download getnews als .zip
Have Fun!
Derzeit experimentiere ich erfolgreich mit Anpassungen um Header und Artikel in mehreren getrennten Kommandozeilen Tasks abzuholen, diese Version wird aber voraussichtlich nicht als Freeware veröffentlicht.
Für kommerzielle Anpassungen an bestimmte Aufgaben bitte bei mir anfragen.
|