06 März 2011

Guttenwatch


Mit großem Misstrauen habe auch ich auf die Facebook-Gruppe Wir wollen Guttenberg zurück gesehen und fand dann auch, dass verdächtig viele - sagen wir mal freundlich - Unbedarfte herumrennen. Aufgefallen ist mir dann auch auf der Seite medienstratege.de der Beitrag Neue Indizien auf gefälschte Guttenberg-Fans:
Noch unglaubwürdiger wird die Geschichte, wenn man den Zustrom an Fans betrachtet. Der Derivatehändler Kristjan Schmidt, geübt in langen Zahlenreihen, beobachtete aus Interesse die Fan-Entwicklung. Und stolperte über ein interessantes Phänomen – über einen nahezu konstanten Strom von tagsüber 150 bis 180 neuen Fans pro Minute. Keine Ausschläge nach oben, keine Ausschläge nach unten. Das ist mehr als ungewöhnlich, denn im Web sind die Nutzerzahlen extrem mit der Tageszeit verbunden.

Auch nachts stoppte der Strom nicht. Insgesamt sank die Zahl zwar und pendelte sich bei 40 neuen Freunden pro Minute ein. Allerdings wieder ohne Schwankungen. Benötigen die Fans von Herrn Guttenberg keinen Schlaf? Oder hat er viele Freunde im anderen Teil der Welt …
Das wollte ich dann doch genauer wissen. Zuerst greift man da zum Suisse Army Knife, nachdem man sich die Facebook-Seite genauer angesehen hat und eine Regular Expression für die Anzahl der Likes für die Seite gefunden hat (bin/guttenwatch.pl):


#!/usr/bin/perl -w

require LWP::UserAgent;
use POSIX qw(strftime);

my $ua = LWP::UserAgent->new(agent=>'Mozilla/5.0');
$ua->timeout(10);
$ua->env_proxy;

my $response = $ua->get('http://www.facebook.com/pages/Wir-wollen-Guttenberg-zur%C3%BCck/136786223053705');

if ($response->is_success) {
foreach ($response->decoded_content) {
if (/class=\\"uiNumberGiant fsxxl fwb\\">(\d{1,3}(?:\.\d{3})*)\\u003c\\\/span>\\u003c\\\/div> Personen gef\\u00e4llt/) {
my $num=$1;
$num =~ s/\.//;
print strftime("%Y-%m-%d %H:%M:%S", localtime) ."\t$num\n";
}
}
}
else {
die $response->status_line;
}


Schon mal nicht schlecht, das Script findet immerhin die Anzahl der Likes auf der Seite. Das sollte es jetzt aber regelmäßig tun, und hier kommt mein Freund, der Cron-Dämon zum Einsatz, mit dem Befehl crontab -e kann man eine Benutzercrontab anlegen (oder editieren):
*/5 * * * * bin/guttenwatch.pl >> .guttenwatch

Ab sofort legt das Script alle 5 Minuten die Besucherzahl ab.

Um das ganze zu visualisieren, ist gnuplot das richtige Werkzeug - leider kann das nun keine erste Ableitung, also brauche ich noch was, um die neuen Benutzer pro Minute auszurechnen, da ist wieder perl richtig (bin/guttendiff.pl):

#!/usr/bin/perl -w
use Time::Local;
$last=0;
$lastt=0;
while (<>) {
chomp;
if (/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})\t(\d{4,})$/) {
my $time=timelocal($6, $5, $4, $3, $2-1, $1-1900);
if ($last) {
printf "%s\t%0.1f\n", $_, ($7 - $last)*60/($time-$lastt);
}
$lastt=$time;
$last=$7
}
}


Jetzt noch kurz durch die kryptische Syntax von gnuplot kämpfen (guttenplot.gp):

set terminal png size 1200, 800
set output "guttenplot.png"
set multiplot layout 1,2 title"Neue Benutzer in 'Wir wollen Guttenberg zurück'"

set title "Benutzer absolut"
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set style line 1 lt 1
set xdata time
set xtics border format "%d.%m. %H:%m" rotate
plot 'guttennumbers' using 1:3 title "Benutzer" with lines

set title "Neue Benutzer pro Minute"
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set style line 1 lt 1
set yrange [0:]
set xdata time
set xtics border format "%d.%m. %H:%m" rotate
plot 'guttennumbers' using 1:4 title "Neue Benutzer/min" with lines
unset multiplot


So, und nun hab' ich alle Werkzeuge für bunte Bildchen: Nach dem Aufruf von
guttendiff .guttennumbers > guttennumbers; gnuplot guttenplot.gp
habe ich eine hüschbe neue Grafik, die mir zeigt, dass inzwischen alles mit rechten Dingen zuzugehen scheint. Viel Arbeit für gar nix.