1 | #!/usr/bin/perl |
---|
2 | # |
---|
3 | |
---|
4 | use strict; |
---|
5 | |
---|
6 | my %places = ( |
---|
7 | oxford => [ 51.752, -1.25794 ], |
---|
8 | charlbury => [ 51.8726, -1.481 ], |
---|
9 | ); |
---|
10 | |
---|
11 | my $place = shift; |
---|
12 | if($place && $place =~ /^\-?\d+\.\d+/) { |
---|
13 | my $long = shift; |
---|
14 | my $lat = $place; |
---|
15 | $place = $lat.",".$long; |
---|
16 | |
---|
17 | my @ll = ($lat,$long); |
---|
18 | $places{$place} = \@ll; |
---|
19 | } |
---|
20 | |
---|
21 | unless($place && $places{$place}) { |
---|
22 | print "Use:\n"; |
---|
23 | print " osm-activity.pl <place>\n"; |
---|
24 | print "\nWhere place is one of:\n"; |
---|
25 | print "\t".join(", ", keys %places)."\n"; |
---|
26 | exit 1; |
---|
27 | } |
---|
28 | |
---|
29 | # Download the feed |
---|
30 | my $url = "http://www.openstreetmap.org/feeds/nodes.rss?latitude=".$places{$place}->[0]."&longitude=".$places{$place}->[1]; |
---|
31 | print "Handling place $place:\n"; |
---|
32 | print " Fetching $url\n"; |
---|
33 | |
---|
34 | open(RSS, "wget -q -O - '$url' |"); |
---|
35 | |
---|
36 | # Read it |
---|
37 | my $rss; |
---|
38 | while(<RSS>) { $rss .= $_; } |
---|
39 | close RSS; |
---|
40 | |
---|
41 | # Process it |
---|
42 | my @items = ($rss =~ /(<item>.*?<\/item>)/sg); |
---|
43 | my @allusers = ($rss =~ /last edited by (.*?),/sg); |
---|
44 | |
---|
45 | my ($firstedit) = ($items[0] =~ /<pubDate>(.*?)<\/pubDate>/); |
---|
46 | my ($lastedit) = ($items[-1] =~ /<pubDate>(.*?)<\/pubDate>/); |
---|
47 | |
---|
48 | # Get unique users |
---|
49 | my %users; |
---|
50 | foreach my $u (@allusers) { |
---|
51 | $users{$u}++; |
---|
52 | } |
---|
53 | |
---|
54 | # Report |
---|
55 | print "\n"; |
---|
56 | print "There were ".scalar(@items)." edits in the period\n"; |
---|
57 | print "There were ".(scalar keys %users)." users active in the period\n"; |
---|
58 | print "\n"; |
---|
59 | print "The first edit was at $firstedit\n"; |
---|
60 | print "The last edit was at $lastedit\n"; |
---|
61 | print "\n"; |
---|
62 | foreach my $u (sort keys %users) { |
---|
63 | my $du = $u; |
---|
64 | while(length($du) lt 50) { $du .= " "; } |
---|
65 | print " $du - ".$users{$u}." edits\n"; |
---|
66 | } |
---|