История изменений
Исправление
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 переплюнет любого анонимуса по писательским способностям.