Awesome! works like a charm :)<br><br>Jose<br><br><br><div class="gmail_quote">On 19 January 2011 03:56, Dan Bolser <span dir="ltr"><<a href="mailto:dan.bolser@gmail.com">dan.bolser@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi guys, I couldn't sleep so I wrote this (quite fun!):<br>
<br>
<br>
<br>
#!/usr/bin/perl -w<br>
<br>
## Prototype script to collect and summarise a months worth of edits<br>
## from a given MW.<br>
<br>
## For information, see:<br>
## <a href="http://search.cpan.org/dist/MediaWiki-API/lib/MediaWiki/API.pm" target="_blank">http://search.cpan.org/dist/MediaWiki-API/lib/MediaWiki/API.pm</a><br>
## <a href="http://www.mediawiki.org/wiki/API:Query_-_Lists#recentchanges_.2F_rc" target="_blank">http://www.mediawiki.org/wiki/API:Query_-_Lists#recentchanges_.2F_rc</a><br>
<br>
use strict;<br>
<br>
use Data::Dumper;<br>
<br>
use DateTime;<br>
<br>
use MediaWiki::API;<br>
<br>
<br>
<br>
## CONNECT TO AN API<br>
<br>
#my $api_url = '<a href="http://en.wikipedia.org/w/api.php" target="_blank">http://en.wikipedia.org/w/api.php</a>';<br>
#my $api_url = '<a href="http://seqanswers.com/w/api.php" target="_blank">http://seqanswers.com/w/api.php</a>';<br>
my $api_url = '<a href="http://pdbwiki.org/api.php" target="_blank">http://pdbwiki.org/api.php</a>';<br>
<br>
<br>
<br>
## Get API object for the given URL<br>
my $mw = MediaWiki::API-><br>
  new({ api_url => $api_url });<br>
<br>
<br>
<br>
## Configure a default error function (saves us checking for errors)<br>
$mw->{config}->{on_error} = \&on_error;<br>
<br>
## The error function<br>
sub on_error {<br>
  print "Error code: ", $mw->{error}->{code}, "\n";<br>
  print $mw->{error}->{details}, "\n";<br>
  print $mw->{error}->{stacktrace}, "\n";<br>
  die "err\n";<br>
}<br>
<br>
<br>
<br>
## Print the site name<br>
my $ref = $mw->api( { action => 'query', meta => 'siteinfo' } );<br>
print "Sitename: '", $ref->{query}->{general}->{sitename}, "'\n";<br>
<br>
<br>
<br>
## Grab the recent changes list<br>
<br>
my $rcstart =<br>
  DateTime->now->subtract(months => 1)->epoch;<br>
<br>
## Debugging<br>
#my $rcstart =<br>
#  DateTime->now->subtract(hours => 7)->epoch;<br>
<br>
warn "collecting changes since $rcstart\n";<br>
my $rc_array = $mw-><br>
  list ({<br>
         action  => 'query',<br>
         list    => 'recentchanges',<br>
<br>
         ## Get changes since:<br>
         rcdir   => 'newer',<br>
         rcstart => $rcstart,<br>
<br>
         ## Number of revisions to collect in each batch of results<br>
         ## returned by the API<br>
         rclimit => '500',<br>
<br>
         ## Filters<br>
         rcshow  => '!minor',<br>
         rcshow  => '!bot',<br>
<br>
         #rcexcludeuser => '',<br>
         #rctype => edit / new / log,<br>
<br>
         ## Properties<br>
         rcprop =><br>
           'user|comment|timestamp|title|sizes|flags'<br>
<br>
        },<br>
        {<br>
         ## Config<br>
<br>
         ## Process result as they come in with this function<br>
         ## (responsible for returning something useful).<br>
         #hook => \&look_hook,<br>
<br>
         ## Max number of batches to collect (for debugging)<br>
         max => 1<br>
<br>
        }<br>
       );<br>
<br>
#sub look_hook{<br>
#  print "hi\n";<br>
#}<br>
<br>
warn 'found ', scalar(@$rc_array), " revisions\n";<br>
<br>
## Debugging<br>
#print Dumper $rc_array;<br>
<br>
<br>
<br>
## Compile edit statistics for the month<br>
<br>
my(%users,<br>
   %pages);<br>
<br>
foreach my $rc (@$rc_array){<br>
<br>
  ## Debugging<br>
  #print Dumper $rc;<br>
<br>
  $users{$rc->{ user}}++;<br>
  $pages{$rc->{title}}++;<br>
}<br>
<br>
warn "OK\n";<br>
<br>
<br>
<br>
print "users:\n";<br>
print "$_\t$users{$_}\n" for sort u keys %users;<br>
<br>
print "pages:\n";<br>
print "$_\t$pages{$_}\n" for sort p keys %pages;<br>
<br>
sub u { $users{$b} <=> $users{$a} }<br>
sub p { $pages{$b} <=> $pages{$a} }<br>
<br>
<br>
<br>
__END__<br>
<br>
# 20:06 -!- dbolser [~<a href="mailto:dmb@bioinformatics.org">dmb@bioinformatics.org</a>] has joined #perl<br>
# 20:06 < dbolser> how can I get the current date, minus one month,<br>
# formatted like this "2011-01-18T21:31:02Z"?<br>
# 20:07  * GumbyPAN CPAN Upload: SDL-Tutorial-3DWorld-0.33 by ADAMK<br>
# 20:07 < tm604> dbolser: DateTime->now->subtract(months =><br>
# 1)->iso8601<br>
# 20:07 < dbolser> tm604: You are better than Google<br>
# 20:07 < ology> dbolser: perldoc POSIX search for strftime<br>
# 20:08 < dbolser> tys<br>
# 20:08 < tm604> might also need to specify the timezone directly to<br>
# get the trailing Z.<br>
<br>
_______________________________________________<br>
Pdbwiki-devel mailing list<br>
<a href="mailto:Pdbwiki-devel@bioinformatics.org">Pdbwiki-devel@bioinformatics.org</a><br>
<a href="http://www.bioinformatics.org/mailman/listinfo/pdbwiki-devel" target="_blank">http://www.bioinformatics.org/mailman/listinfo/pdbwiki-devel</a><br>
<a href="http://www.pdbwiki.org" target="_blank">http://www.pdbwiki.org</a><br>
</blockquote></div><br>