#!/usr/bin/perl # dumpmsn - Pretty up MSN Messenger chat logs. # # Usage: dumpmsn *.xml # # This will create a folder named "html" and put the files there. Give it chat # logs from Windows Live Messenger 2011 or similar (no guarantees it # will work with other versions). # # --Kirsle # http://sh.kirsle.net/ use 5.14.0; use strict; use warnings; use XML::Simple; if (!-d "html") { mkdir("html") or die "Can't create folder 'html': $@"; } foreach my $file (@ARGV) { say "Dumping $file..."; my $xml = XMLin($file, ForceArray => 1); my $html = $file; $html =~ s/\.xml$//g; open (my $fh, ">:utf8", "./html/$html.html"); print {$fh} <<EOF; <!DOCTYPE html> <html> <head> <title>Conversation Log</title> <style> body { background-color: #FFFFFF; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: small; color: #000000; } </style> </head> <body> EOF if (ref($xml->{Message}) ne "ARRAY") { warn "Not an array for $file"; next; } foreach my $Message (@{$xml->{Message}}) { my $to = $Message->{To}->[0]->{User}->[0]->{FriendlyName}; my $from = $Message->{From}->[0]->{User}->[0]->{FriendlyName}; my $time = $Message->{Date} . " " . $Message->{Time}; my ($text,$style); if (ref($Message->{Text}->[0])) { $text = $Message->{Text}->[0]->{content}; $style = $Message->{Text}->[0]->{Style}; } else { $text = $Message->{Text}->[0]; } $style //= ""; $style = " style=\"$style\"" if length $style > 0; print {$fh} "<strong>$time</strong><br>\n" . "<em>$from says:</em>\n" . "<blockquote$style>$text</blockquote>\n" . "<hr>\n\n"; } print {$fh} "</body>\n</html>"; close($fh); }