|
use lib ‘data/all-modules/github/sergot/datetime-parse/lib’; |
|
use lib ‘data/all-modules/github/perl6/Perl6-MIME-Base64/lib’; |
|
use lib ‘data/all-modules/github/perl6-community-modules/uri/lib’; |
|
use lib ‘data/all-modules/github/supernovus/perl6-http-status/lib’; |
|
use lib ‘data/all-modules/github/sergot/http-useragent/lib’; |
|
use lib ‘data/all-modules/github/sergot/perl6-encode/lib’; |
|
use lib ‘data/all-modules/github/perlpilot/p6-File-Temp/lib’; |
|
use lib ‘data/all-modules/github/labster/p6-file-directory-tree/lib’; |
|
use lib ‘data/all-modules/cpan/TIMOTIMO/JSON-Fast/lib’; |
|
use lib ‘data/all-modules/github/perl6-community-modules/uri/lib’; |
|
|
|
|
|
use HTTP::UserAgent; |
|
use URI::Escape; |
|
use JSON::Fast; |
|
|
|
# Friendlier descriptions for task categories |
|
my %cat = ( |
|
'Programming_Tasks' => 'Task: ', |
|
'Draft_Programming_Tasks' => 'Draft:' |
|
); |
|
|
|
my $client = HTTP::UserAgent.new; |
|
|
|
my $url = 'http://rosettacode.org/mw'; |
|
|
|
my $hashfile = './RC_Authors.json'; |
|
|
|
my %tasks; |
|
|
|
# clear screen |
|
#run('clear'); |
|
|
|
#=begin update |
|
|
|
note 'Retreiving task information...'; |
|
|
|
for %cat.keys -> $category { |
|
mediawiki-query( |
|
$url, 'pages', |
|
:generator<categorymembers>, |
|
:gcmtitle("Category:$category"), |
|
:gcmlimit<350>, |
|
:rawcontinue(), |
|
:prop<title> |
|
).map({ |
|
mediawiki-query( |
|
$url, 'pages', |
|
:titles(.<title>), |
|
:prop<revisions>, |
|
:rvprop<user|timestamp>, |
|
:rvstart<2000-01-01T01:01:01Z>, |
|
:rvdir<newer>, |
|
:rvlimit<1> |
|
)} |
|
).map({ |
|
say 1 + $++, ' ', %cat{$category}, ' ', .[0]<title>; |
|
%tasks{.[0]<title>}<category> = %cat{$category}; |
|
%tasks{.[0]<title>}<author> = .[0]<revisions>[0]<user>; |
|
%tasks{.[0]<title>}<date> = .[0]<revisions>[0]<timestamp>.subst(/'T'.+$/, '') |
|
} |
|
) |
|
} |
|
|
|
# Save information to a local file |
|
note "\nTask information saved to local file: {$hashfile.IO.absolute}"; |
|
$hashfile.IO.spurt(%tasks.&to-json); |
|
|
|
#=end update |
|
|
|
sub mediawiki-query ($site, $type, *%query) { |
|
my $url = "$site/api.php?" ~ uri-query-string( |
|
:action<query>, :format<json>, :formatversion<2>, |%query); |
|
my $continue = ''; |
|
|
|
gather loop { |
|
my $response = $client.get("$url&$continue"); |
|
my $data = from-json($response.content); |
|
take $_ for $data.<query>.{$type}.values; |
|
$continue = uri-query-string |($data.<query-continue>{*}».hash.hash or last); |
|
} |
|
} |
|
|
|
sub uri-query-string (*%fields) { %fields.map({ "{.key}={uri-escape .value}" }).join("&") } |