06 October 2008 Robert Muehsig

Von dem Google Zeitraffer Video war ich doch etwas angetan und habe mir gedacht, dass man sicherlich ein Teil davon automatisieren kann. Rausgekommen ist mein kleines "WebHistoryTimeline" Projekt, welches als Datenquelle das "Internet Archive" nutzt.

Dabei hole ich mir über RegEx alle Links heraus und rufe diese Links über die WebBrowser Klasse auf und speichere die gerenderte Seite im Dateisystem.

image

Die Projektstruktur:

image

Model beschreibt einfach unsere "Objektstruktur". Der Service macht hier nur ein kleine Überprüfung ob die eingegeben URLs mit "http://" beginnen - quasi etwas Validierung. Im Data passiert das eigentlich interessante:

(ich bin kein RegEx Profi, sondern eher ein blutiger Anfänger und wollte schnell zu Ergebnissen kommen) :

        public Website GetWebsite(string url)
        {
            string archiveUrl = "http://web.archive.org/web/*/" + url;
            HttpWebRequest rq = (HttpWebRequest)WebRequest.Create(archiveUrl);
            HttpWebResponse response = (HttpWebResponse)rq.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string html = reader.ReadToEnd();

            Website resultWebsite = new Website();
            resultWebsite.Url = url;

            MatchCollection matchs = Regex.Matches(html, @"<a.href=.http://web.archive.org/web/\d.*?</a>");
            foreach (Match match in matchs)
            {
                ArchiveWebsite archive = new ArchiveWebsite();
                archive.ArchiveUrl = Regex.Match(match.Value, @"http://web.archive.org/web/\d*").Value + "/" + url;
                archive.Date = DateTime.Parse(Regex.Match(match.Value, @"\w\w\w\s\d\d,\s\d\d\d\d").Value);
                resultWebsite.ArchiveWebsites.Add(archive);
            }

            return resultWebsite;
        }

Die "WinApp" und die "ConsoleApp" sind zwei Demoanwendungen, wobei die Konsolenapplikation die Bilder auf die Festplatte speichert:

image

Das ganze ist nicht besonders toll und Multithreading fehlt auch ;) - allerdings hat man hinterher folgendes Ergebnis (bei der Microsoft Seite)

image

Insgesamt sind es bei der Microsoftseite über 1300.

Da das vielleicht ein nettes Spielzeug für den einen oder anderen ist, werde ich den Sourcecode auf Codeplex veröffentlichen. Leider kann ich das gerade dort nicht einchecken, sodass ich erstmal nur die "Download-Variante" anbiete:

[ Download Source Code ]

Viel Spaß :)


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!