#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple qw /$ua get getprint/;
my @years = (2000 .. 2004);
my @months = qw /January/;
my @langs = qw /Perl Python Java C C++ Ruby PHP Cobol BASIC FORTRAN Forth
UNIX Lisp Scheme Haskell shell .NET Pascal Ada Eiffel/;
my %info;
$ua -> proxy (http => "http://XXXX:XXXX/");
$ua -> agent ("Mozilla/8.0");
foreach my $lang (@langs) {
my $l = $lang;
$l =~ s/(\W)/sprintf "%%%02x" => ord $1/eg;
foreach my $year (@years) {
foreach my $month (@months) {
sleep 2;
my $query = lc "q=$l+programming+%22$month+$year%22";
my $url = "http://www.google.nl/search?$query&hl=en";
my $text = get ($url) or do {
warn "Failed to get $lang/$month/$year\n";
next;
};
print STDERR ".";
unless ($text =~ m!Results \s+ \d+\s*-\s*\d+ \s+
of \s+ about \s+ ([\d,]+)!x) {
warn "Failed to parse $lang/$month/$year\n";
next;
}
my $count = $1;
$count =~ s/,//g;
$info {$lang} {$year} {$month} [0] = $count;
$info {$lang} {$year} {$month} [1] =
$info {$lang} {$years [0]} {$months [0]} [0] ?
100 * $info {$lang} {$year} {$month} [0] /
$info {$lang} {$years [0]} {$months [0]} [0] : -1;
}
}
print STDERR "\n";
}
print " " x 9;
foreach my $year (@years) {
foreach my $month (@months) {
printf " %3s %4d " => substr ($month, 0, 3), $year
}
}
print "\n";
foreach my $lang (sort {$info {$b} {$years [-1]} {$months [-1]} [1] <=>
$info {$a} {$years [-1]} {$months [-1]} [1]} @langs) {
printf "%7s ", $lang;
foreach my $year (@years) {
my $w = $year >= 2004 ? 4 : 3;
foreach my $month (@months) {
printf "%7d (%${w}d)" => @{$info {$lang} {$year} {$month}};
}
}
print "\n";
}
__END__