require 'socket' # less than this much inhabitants are not shown min = (ARGV.shift || 4000).to_i (0..21).map { |i| # send all requests s = TCPSocket.new 'www.miniville.fr', 80 s.write "GET /ranking?region=#{i} HTTP/1.1\r\nHost: www.miniville.fr\r\n\r\n" s }.inject([]) { |ans, sock| # read all responses ans.concat sock.read.scan(/(.*?/m).flatten.map { |st| # parse html st.gsub(/<.*?>/, ' ').gsub(/\s+/, ' ').scan(/^ \d+ (.*) (\d+) \d+ ... $/).flatten.reverse }.map { |num, name| [num.to_i, name] } }.sort.reverse.each_with_index { |(num, name), i| # display puts "%3d %5d %s" % [i+1, num, name] if num >= min }