30 lines
909 B
Ruby
30 lines
909 B
Ruby
require 'rosettacode'
|
|
|
|
langs = []
|
|
RosettaCode.category_members("Programming Languages") {|lang| langs << lang}
|
|
|
|
# API has trouble with long titles= values.
|
|
# To prevent skipping languages, use short slices of 20 titles.
|
|
langcount = {}
|
|
langs.each_slice(20) do |sublist|
|
|
url = RosettaCode.get_api_url({
|
|
"action" => "query",
|
|
"prop" => "categoryinfo",
|
|
"format" => "xml",
|
|
"titles" => sublist.join("|"),
|
|
})
|
|
|
|
doc = REXML::Document.new open(url)
|
|
REXML::XPath.each(doc, "//page") do |page|
|
|
lang = page.attribute("title").value
|
|
info = REXML::XPath.first(page, "categoryinfo")
|
|
langcount[lang] = info.nil? ? 0 : info.attribute("pages").value.to_i
|
|
end
|
|
end
|
|
|
|
puts Time.now
|
|
puts "There are #{langcount.length} languages"
|
|
puts "the top 25:"
|
|
langcount.sort_by {|key,val| val}.reverse[0,25].each_with_index do |(lang, count), i|
|
|
puts "#{i+1}. #{count} - #{lang.sub(/Category:/, '')}"
|
|
end
|