WebGraph.NET Open-Source

Freitag, 2 Dezember 2011 11:02 by Christoph

Schon etwas älter ist das Programm WebGraph, ein Dataminer der skriptgesteuert Links aus verschiedenen Webseiten extrahiert und daraus einen Verknüpfungsgraphen generiert. Das Originalprogramm basiert auf OpenGL und benutzt Googles v8-Javascript Engine.

Da man ja mit der Zeit geht und sich auf fortbilden will, habe ich die Applikation mal auf .NET in der Version 4.0 und WPF portiert. Das war erstaunlich einfach. Der Code ist im wesentlichen um ein Drittel kürzer geworden. Die grobe Architektur konnte beibehalten werden. Anstelle der v8-Engine ist Jint getreten. Sqlite wird immernoch für das Caching verwendet, allerdings in einer .NET Version. Schließlich konnte die CURL-Bibliothek für den Webzugriff komplett entsorgt werden, da das .NET Framework Standardklassen hierfür bereits mitbringt.

Klassendiagramm

Der Quelltext von WebGraph.NET ist im Github unter https://github.com/Chrisso/WebGraph.NET einzusehen. Am besten einfach mal lossurfen und durch die Source klicken.

Besonders interessant ist an dieser Stelle vielleicht, wie das Grabbing funktioniert. Der Nutzer gibt in der WPF-GUI ein Schlagwort ein. Diese fragt im Cache nach, ob diese Abfrage (evtl. auch als Sub-Abfrage) schonmal ausgeführt wurde. Gibt der Cache einen Fehler zurück (Cache-Miss) wird beim Skript ein Download-URL angefordert. Der Webloader kümnert sich dann um das herunterladen, die GUI gibt das Resultat erneut an das Skript, das dort Schlagwörter (Links, Kindknoten im Graphen) extrahiert. Das Ergebnis landet im Cache und je nach eingestellter Rekursionstiefe beginnt der Prozess mit jedem neuen Schlagwort von vorn.

Oder als Sequenzdiagramm ausgedrückt:

Sequenzdiagramm

Nach einem Port auf C# habe ich übrigens noch einen in JavaScript erstellt. Zur Anzeige des folgenden Beispiels benötigen sie einen HTML5-kompatiblen Browser, der das Canvas-Element unterstützt. Moderne Software wie Mozilla Firefox und Google Chrome können das von Haus, im Internet Explorer wird das Canvas mittels VML emuliert.

HTML5-Canvas nicht unterstützt!