Umbaumassnahmen

Grund

Der Umbau der Funktion, welche die offiziellen Seiten abgrast und nach Neuigkeiten durchsucht - die Crawler-Funktion - erwies sich als fehlerhaft.

Fehlfunktionen

Das war zum Einen, dass unter bestimmten Umständen Aktualisierungen nicht erkannt wurden und zum Anderen, dass beim Versuch dies zu korrigieren, alte Meldungen als Aktualisierungen gewertet und leider erneut gepostet wurden.

Grund der Fehlfunktionen

Am Anfang dachte ich, der Bot müsse sich nur die letzte gepostete Nachricht aus der Einstiegsseite - basierend auf der Seitenadresse (URL) der jeweiligen Detailbeschreibung - merken, um dann irgendwann zu posten, was zwischenzeitlich dazukam.

Nur werden zwar bei Aktualisierungen die Inhalte der Detailbeschreibung modifiziert, die Adresse blieb jedoch unverändert. Zwar gibt es dabei auch geringfügige Änderungen an der Einstiegssseite, aber spätestens bei der zweiten Aktualisierung einer Warnung am selben Tag, kann man diese in der Übersicht nicht mehr als neu erkennen.

Das ist insofern schade, als das bisher in regelmässigen Abständen einzig die Einstiegsseite abgefragt werden musste.

Neuer Ansatz

Da anscheinend der einzige zuverlässige Indikator für eine Aktualisierung der Inhalt der Detailseite ist, muss ich also schon im Crawler für alle aufgeführten Einträge die Detailseite abrufen, um sie später auf Aktualisierungen prüfen zu können.

Hierbei wird allerdings nicht der Inhalt der Detailseite gespeichert, sondern eine daraus erzeugte Prüfsumme.

Eine weitere Verbesserung wurde durch die Verwendung einer anderen Übersichtsseite erreicht. Statt alle Einträge der Einstiegsseite auf Aktualität zu prüfen, verwende ich jetzt die Seite, die nur Meldungen der letzten 24h listet. Für alle dort gelisteten Meldungen werden dann die oben erwähnten Prüfsummen ermittelt und gespeichert. Handelt es sich um eine Meldung die noch nie gepostet wurde, sieht der Crawler sie zum Post vor. Wurde sie bereits gepostet, entscheiden die Prüfsummen. Ist die aktuelle Prüfsumme identisch mit der des Posts, geschieht nichts. Ist sie das nicht, wurde die Meldung aktualisiert und wird zum Posten vorgesehen (und die neue Prüfsumme wird gespeichert).

Beim nächsten Durchlauf ist dann nichts mehr zu posten. Kommt eine neue Warnung, läuft es wie bereits beschrieben. Kommt eine Aktualisierung stellt der Bot zunächst fest, dass diese Meldung bereits gepostet ist. Er lädt sie dennoch um über den aktuellen Inhalt eine Prüfsumme zu bilden. Ist diese nicht identisch mit der vorherigen, wird die Meldung gepostet.

Auf diese Art entgeht einem nichts Neues und Aktualisierungen werden zuverlässig erkannt.

Der Preis dafür ist, dass man zur reinen Prüfung der Aktualität, nicht nur eine Übersichtsseite laden muss, sondern auch alle darin aufgeführten Detailseiten.

Das ist auch der Grund für den Wechsel der Übersichtsseite. In den letzten 24h werden meist keine oder nur wenige Detailseiten gelistet. Im Gegensatz dazu stünden auch der Einstiegseite immer die letzten 25 Meldungen (inkl. Aktualisierungen). Funktionieren würde die Programmlogik damit genauso, aber es würden eben bei jeder Prüfung 26 Seiten geladen. Auf der 24h-Seite, sind jedoch wesentlich weniger Artikel (im günstigsten Fall manchmal gar keine) gelistet, das erspart Abfragen der Detailseiten zur Prüfsummenberechnung.

Am zweiten Teil, dem Posten, war kaum etwas zu ändern. Die zusätzliche Information, dass ein Update vorliegt, wird nun durch Voranstellen des Symbols “🔄” angezeigt.

Ergebnis

Im Zuge der Umstellung konnte ich noch den ein oder anderen “alten Zopf” abschneiden, also überflüssig gewordenen Code entfernen und ein paar Dinge optimieren. Noch während der Erprobung hat die Software Meldungen erkannt und gepostet.

Ich hoffe, dass die Arbeiten nun abgeschlossen sind.