LINUX.ORG.RU

История изменений

Исправление kostyarin_, (текущая версия) :

Вот скрипт для сбора мета-статистики


#
# use
#
# ruby metalorstat.rb        - to load meta stat from LOR
# ruby metalorstat.rb -s     - to use stored CSV meta stat
#

# don't forget 'sudo gem install nokogiri' before

require 'open-uri'
require 'nokogiri'
require 'csv'

LOR_URL = "https://www.linux.org.ru"
META_PFX = LOR_URL + "/forum/development/"
CVS_FILE = "metalorstat.csv"

META_1 = 14882171
META_2 = 14914210
META_3 = 14918675
META_4 = 14952346
META_5 = 14984692
META_6 = 15014770
META_7 = 15048486
META_8 = 15077884


META_IDS = [META_1, META_2, META_3, META_4, META_5, META_6, META_7, META_8]

meta_number = 1

class User
	attr_accessor :comments, :symbols

	def initialize()
		@comments = 0
		@symbols = 0
	end

	def add_comment(symbols)
		@comments += 1
		@symbols += symbols
	end

	def to_csv_row(name)
		return [name, @comments, @symbols]
	end
end

# name -> User
users = {}

reload = true

for arg in ARGV
   if arg == "-s" || arg == "-skip" then
   	reload = false
   end
end

if reload then

	puts "RELOAD META LOR"

	META_IDS.each do |meta_id|

		head = META_PFX + "#{meta_id}"

		puts "process meta #{meta_number}"
		meta_number += 1

		while head != "" do
			puts "GET #{head}"

			# TODO (kostyarin_): add timeout to avoid unnecessary
			#                    meta-LOR-pressure

			html = open(head) do |io|
	  			io.set_encoding(Encoding.default_external)
	  			io.read
			end

			doc = Nokogiri::HTML(html)
			doc.css("article.msg").each do |msg|

				symbols = 0
				symbols += msg.css("div.msg_body > h1").text.length
				symbols += msg.css("div.msg_body > p").text.length

				name = msg.css("div.sign > a").text
				name = "anonymous" if name == ""

				user = users[name]

				if user == nil then
					user = User.new()
					users[name] = user
				end

				user.add_comment symbols
			end

			next_page = doc.css("div.nav > a:last-child").first
			if next_page == nil || next_page.next != nil then 
				head = "" # next meat-page
				break
			end

			head = LOR_URL + next_page.attr("href")
		end

	end

	puts "WRITE TO META CSV"
	CSV.open(CVS_FILE, "wb") do |csv|
		users.each do |k, v|
			csv << v.to_csv_row(k)
		end
	end

end

unless reload then
 	puts "LOAD FROM META CSV"

 	CSV.foreach(CVS_FILE) do |csv|
 		user = User.new()
 		user.comments = csv[1].to_i
 		user.symbols = csv[2].to_i
 		users[csv[0]] = user
 	end

end

puts "SORT BY META COMMENTS"

puts "name | comments | symbols"
users.sort_by { |k, v| v.comments }.reverse.each do |user|
	puts "#{user[0].ljust(20)} #{user[1].comments.to_s.ljust(10)} #{user[1].symbols}"
end

puts "SORT BY META SYMBOLS"

puts "name | symbols | comments"
users.sort_by { |k, v| v.symbols }.reverse.each do |user|
	puts "#{user[0].ljust(20)} #{user[1].symbols.to_s.ljust(10)} #{user[1].comments}"
end

Если брать топ-12, то по комментариям

metaprog             3272       532137
anonymous            2305       444082
VarfolomeyKote4ka    1473       158347
iluha16              991        199566
balsoft              488        82404
rebforce             442        112908
liksys               405        83314
hobbit               379        132429
i-rinat              173        26363
arturianec100        170        84302
vq156                126        11827
ossa                 122        21490

А по символам

metaprog             532137     3272
anonymous            444082     2305
iluha16              199566     991
VarfolomeyKote4ka    158347     1473
hobbit               132429     379
rebforce             112908     442
arturianec100        84302      170
liksys               83314      405
balsoft              82404      488
i-rinat              26363      173
cluge                25068      91
ossa                 21490      122

Откуда видно, что @metaprog переплюнет любого анонимуса по писательским способностям.

Исходная версия kostyarin_, :

Вот скрипт для сбора-мета статистики


#
# use
#
# ruby metalorstat.rb        - to load meta stat from LOR
# ruby metalorstat.rb -s     - to use stored CSV meta stat
#

# don't forget 'sudo gem install nokogiri' before

require 'open-uri'
require 'nokogiri'
require 'csv'

LOR_URL = "https://www.linux.org.ru"
META_PFX = LOR_URL + "/forum/development/"
CVS_FILE = "metalorstat.csv"

META_1 = 14882171
META_2 = 14914210
META_3 = 14918675
META_4 = 14952346
META_5 = 14984692
META_6 = 15014770
META_7 = 15048486
META_8 = 15077884


META_IDS = [META_1, META_2, META_3, META_4, META_5, META_6, META_7, META_8]

meta_number = 1

class User
	attr_accessor :comments, :symbols

	def initialize()
		@comments = 0
		@symbols = 0
	end

	def add_comment(symbols)
		@comments += 1
		@symbols += symbols
	end

	def to_csv_row(name)
		return [name, @comments, @symbols]
	end
end

# name -> User
users = {}

reload = true

for arg in ARGV
   if arg == "-s" || arg == "-skip" then
   	reload = false
   end
end

if reload then

	puts "RELOAD META LOR"

	META_IDS.each do |meta_id|

		head = META_PFX + "#{meta_id}"

		puts "process meta #{meta_number}"
		meta_number += 1

		while head != "" do
			puts "GET #{head}"

			# TODO (kostyarin_): add timeout to avoid unnecessary
			#                    meta-LOR-pressure

			html = open(head) do |io|
	  			io.set_encoding(Encoding.default_external)
	  			io.read
			end

			doc = Nokogiri::HTML(html)
			doc.css("article.msg").each do |msg|

				symbols = 0
				symbols += msg.css("div.msg_body > h1").text.length
				symbols += msg.css("div.msg_body > p").text.length

				name = msg.css("div.sign > a").text
				name = "anonymous" if name == ""

				user = users[name]

				if user == nil then
					user = User.new()
					users[name] = user
				end

				user.add_comment symbols
			end

			next_page = doc.css("div.nav > a:last-child").first
			if next_page == nil || next_page.next != nil then 
				head = "" # next meat-page
				break
			end

			head = LOR_URL + next_page.attr("href")
		end

	end

	puts "WRITE TO META CSV"
	CSV.open(CVS_FILE, "wb") do |csv|
		users.each do |k, v|
			csv << v.to_csv_row(k)
		end
	end

end

unless reload then
 	puts "LOAD FROM META CSV"

 	CSV.foreach(CVS_FILE) do |csv|
 		user = User.new()
 		user.comments = csv[1].to_i
 		user.symbols = csv[2].to_i
 		users[csv[0]] = user
 	end

end

puts "SORT BY META COMMENTS"

puts "name | comments | symbols"
users.sort_by { |k, v| v.comments }.reverse.each do |user|
	puts "#{user[0].ljust(20)} #{user[1].comments.to_s.ljust(10)} #{user[1].symbols}"
end

puts "SORT BY META SYMBOLS"

puts "name | symbols | comments"
users.sort_by { |k, v| v.symbols }.reverse.each do |user|
	puts "#{user[0].ljust(20)} #{user[1].symbols.to_s.ljust(10)} #{user[1].comments}"
end

Если брать топ-12, то по комментариям

metaprog             3272       532137
anonymous            2305       444082
VarfolomeyKote4ka    1473       158347
iluha16              991        199566
balsoft              488        82404
rebforce             442        112908
liksys               405        83314
hobbit               379        132429
i-rinat              173        26363
arturianec100        170        84302
vq156                126        11827
ossa                 122        21490

А по символам

metaprog             532137     3272
anonymous            444082     2305
iluha16              199566     991
VarfolomeyKote4ka    158347     1473
hobbit               132429     379
rebforce             112908     442
arturianec100        84302      170
liksys               83314      405
balsoft              82404      488
i-rinat              26363      173
cluge                25068      91
ossa                 21490      122

Откуда видно, что @metaprog переплюнет любого анонимуса по писательским способностям.