Rosetta Code/Rank languages by number of users: Difference between revisions

Content added Content deleted
m (→‎{{header|zkl}}: removed dead code)
m (→‎{{header|Perl 6}}: Style tweaks, minor enhancements, update list)
Line 33: Line 33:


<lang perl6>use HTTP::UserAgent;
<lang perl6>use HTTP::UserAgent;
use URI::Escape;
use JSON::Fast;
use JSON::Fast;


my $client = HTTP::UserAgent.new;
say "========= Generated: { DateTime.new(time) } =========";

my $url = 'http://rosettacode.org/mw';

my $start-time = now;
my $start-time = now;

say "========= Generated: { DateTime.new(time) } =========";

my $lang = 1;
my $lang = 1;
my $rank = 0;
my $rank = 0;
Line 44: Line 51:


.say for
.say for
mediawiki-query('http://rosettacode.org/mw', 'pages',
mediawiki-query(
generator => 'categorymembers',
$url, 'pages',
:generator<categorymembers>,
gcmtitle => "Category:Language users",
:gcmtitle<Category:Language users>,
prop => 'categoryinfo')\
:gcmlimit<350>,
:rawcontinue(),
:prop<categoryinfo>
)\


.map({ %( count => .<categoryinfo><pages> || 0,
.map({ %( count => .<categoryinfo><pages> || 0,
Line 65: Line 76:
sub mediawiki-query ($site, $type, *%query) {
sub mediawiki-query ($site, $type, *%query) {
my $url = "$site/api.php?" ~ uri-query-string(
my $url = "$site/api.php?" ~ uri-query-string(
:action<query>, :format<json>, :gcmlimit<350>, :rawcontinue(), |%query);
:action<query>, :format<json>, :formatversion<2>, |%query);
my $continue = '';
my $continue = '';
my $client = HTTP::UserAgent.new;


gather loop {
gather loop {
my $response = $client.get("$url&$continue");
my $response = $client.get("$url&$continue");

my $data = from-json($response.content);
my $data = from-json($response.content);
take $_ for $data.<query>.{$type}.values;
take $_ for $data.<query>.{$type}.values;

$continue = uri-query-string |($data.<query-continue>{*}».hash.hash or last);
$continue = uri-query-string |($data.<query-continue>{*}».hash.hash or last);
}
}
}
}


sub uri-query-string (*%fields) {
sub uri-query-string (*%fields) { %fields.map({ "{.key}={uri-escape .value}" }).join("&") }</lang>
%fields.map({ "{.key}={uri-encode .value}" }).join("&")
}

sub uri-encode ($str) {
$str.subst(/<[\x00..\xff]-[a..zA..Z0..9_.~-]>/, *.ord.fmt('%%%02X'), :g)
}</lang>


{{out}}
{{out}}
<pre>========= Generated: 2017-12-18T13:50:32Z =========
<pre>========= Generated: 2017-12-23T14:07:11Z =========
# 1 Rank: 1 with 373 users: C
# 1 Rank: 1 with 373 users: C
# 2 Rank: 2 with 261 users: C++
# 2 Rank: 2 with 262 users: C++
# 3 Rank: 3 with 257 users: Java
# 3 Rank: 3 with 258 users: Java
# 4 Rank: 4 with 243 users: Python
# 4 Rank: 4 with 244 users: Python
# 5 Rank: 5 with 228 users: JavaScript
# 5 Rank: 5 with 228 users: JavaScript
# 6 Rank: 6 with 163 users: PHP
# 6 Rank: 6 with 163 users: PHP
# 7 Rank: 7 with 162 users: Perl
# 7 Rank: 7 with 162 users: Perl
# 8 Rank: 8 with 131 users: SQL
# 8 Rank: 8 with 131 users: SQL
# 9 Rank: 9 with 120 users: UNIX Shell
# 9 Rank: 9 with 121 users: UNIX Shell
# 10 Rank: 10 with 118 users: BASIC
# 10 Rank: 10 with 118 users: BASIC
# 11 Rank: 11 with 113 users: C sharp
# 11 Rank: 11 with 113 users: C sharp
Line 134: Line 136:
# 44 Rank: 43 T with 27 users: Mathematica
# 44 Rank: 43 T with 27 users: Mathematica
# 45 Rank: 45 with 25 users: AutoHotkey
# 45 Rank: 45 with 25 users: AutoHotkey
========= elapsed: 1.81 seconds =========</pre>
========= elapsed: 1.89 seconds =========</pre>


=={{header|Stata}}==
=={{header|Stata}}==