#!/usr/bin/env ruby # -*- coding: utf-8 -*- load 'mwapi.rb' require 'yaml' require 'pp' mw = MWApi.new('https://wiki.parabolagnulinux.org/api.php') credentials = YAML.load_file('credentials.yml') mw.login(credentials['username'], credentials['password']) userqueue = [] aufrom = '' while not aufrom.nil? do audata = mw.query( :list => :allusers, :auprop => 'blockinfo|editcount|registration', :aulimit => 5000, :aufrom => aufrom) for user in audata['query']['allusers'] if user['blockid'].nil? if user['editcount'] == 0 # optimize 0 edits means we don't need to count how many aren't deleted print "name: #{user['name']}\tregistration: #{user['registration']}\ttotal_editcount: 0\texisting_editcount: 0\n" else # queue this user for counting how many live edits they have userqueue.push(user) end else print "name: #{user['name']}\tregistration: #{user['registration']}\tblockreason: #{user['blockreason']}\n" end end aufrom = (audata['query-continue'].nil?) ? nil : audata['query-continue']['allusers']['aufrom'] end userqueue.each_slice(5000) do |userlist| contribcount = {} uccontinue = '' while not uccontinue.nil? query = { :list => :usercontribs, :ucuser => (userlist.map{|u| u['name']}).join('|'), :uclimit => 5000, } if uccontinue.length > 0 query.merge!({:uccontinue => uccontinue}) end ucdata = mw.query(query) ucdata['query']['usercontribs'].each do |contrib| contribcount[contrib['user']] ||= 0 contribcount[contrib['user']] += 1 end uccontinue = (ucdata['query-continue'].nil?) ? nil : ucdata['query-continue']['usercontribs']['uccontinue'] end userlist.each do |user| print "name: #{user['name']}\tregistration: #{user['registration']}\ttotal_editcount: #{user['editcount']}\texisting_editcount: #{contribcount[user['name']]}\n" end end