Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local acc, name, data = ...
- local list_topic_id = 13152151
- local function get_list_from_top()
- local t = acc.discussion().get_topic(list_topic_id)
- if not t then return end
- local list, index = {}, {}
- for c in acc.discussion().comments(t) do
- if not c.deleted and type(c.removed) ~= "number" then
- local id = c.user.id
- if id and not index[id] then
- table.insert(list, id)
- index[id] = true
- end
- end
- end
- return list
- end
- local function vocabulary_size(usr)
- local hres = acc.http_get_data("/vocabularies/size", { user_id = usr.id() })
- if not hres.error then
- local v_list = hres.data.vocab_size and hres.data.vocab_size.languages or {}
- local lgstr = usr.get("learning_language_string")
- for i = 1, #v_list do
- local vl = v_list[i]
- if vl.language_string == lgstr then
- return type(vl.count) == "number" and vl.count or nil
- end
- end
- end
- end
- if not data then
- acc.output().printf("Getting the list from post %d...", list_topic_id)
- local list = get_list_from_top()
- if not list then
- acc.output().print("Error!")
- return {}
- end
- data = {}
- data.ulist = list
- data.pos = 1
- data.keep = true
- data.vlist = {}
- data.users = 0
- end
- local size = #data.ulist
- while data.pos <= size do
- local usr = acc.user(data.ulist[data.pos])
- if usr then
- local from, to = usr.get("fromLanguage"), usr.get("learningLanguage")
- acc.output().printf("[%3d/%3d] %-20s | %s -> %s", data.pos, size, usr.get("username"), from, to)
- if from == "en" then -- from English only
- -- Getting vocab data
- local uvocab = vocabulary_size(usr)
- if not uvocab then acc.output().print("Failed to get vocabulary size") end
- --
- local v = data.vlist[to]
- if not v then
- data.vlist[to] = { count = uvocab, language_string = usr.get("learning_language_string") }
- elseif v.count < uvocab then
- v.count = uvocab
- end
- data.users = data.users + 1
- end
- end
- data.pos = data.pos + 1
- if (data.pos - 1) % 100 == 0 then
- break
- end
- end
- if data.pos <= size then
- acc.output().print("Went to bed")
- data.timeout = 2 * 60
- return data
- end
- local print_list = {}
- for lg, d in pairs(data.vlist) do
- table.insert(print_list, { lang = lg, language_string = d.language_string, count = d.count })
- end
- table.sort(print_list, function(a, b) return a.count > b.count end)
- acc.output().print("--------------------")
- for i = 1, #print_list do
- local v = print_list[i]
- acc.output().printf("%s(%s): %d", v.language_string, v.lang, v.count)
- end
- acc.output().printf("The list size: %d", #print_list)
- acc.output().printf("Number of users: %d", data.users)
- return {}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement