Модуль:FetchData2: відмінності між версіями

нема опису редагування
Немає опису редагування
Немає опису редагування
Рядок 205: Рядок 205:
function p.foty_rating(frame)
function p.foty_rating(frame)
     local name = frame.args.player
     local name = frame.args.player
    local raw = fetch_from_table("Період", name, 3)
      
      
     if type(raw) == "string" and mw.ustring.find(raw, "Error") then  
     if not name or name == "" then
         return "0"
         return "0"
     end
     end
      
      
     if not raw or raw == "" or raw == "-" then
     local title = mw.title.new("Період")
    if not title or not title.exists then  
         return "0"
         return "0"
     end
     end
      
      
     -- Видаляємо всі HTML теги (типу <span style="color:yellow;">)
    local content = title:getContent()
     raw = mw.ustring.gsub(raw, "<[^>]+>", "")
    if not content then
     raw = mw.ustring.gsub(raw, "</[^>]+>", "")
        return "0"
    end
   
     -- Шукаємо секцію "Фінал Року"
    local section_start = mw.ustring.find(content, "== Фінал Року ==")
    if not section_start then
        return "0"
     end
   
    -- Знаходимо таблицю після секції
    local table_start = mw.ustring.find(content, "{|", section_start)
    if not table_start then
        return "0"
     end
   
    local table_end = mw.ustring.find(content, "|}", table_start)
    if not table_end then
        return "0"
    end
      
      
     -- Видаляємо всі нецифрові символи окрім мінуса
    local table_content = mw.ustring.sub(content, table_start, table_end + 1)
    raw = mw.ustring.gsub(raw, "[^%d%-]", "")
   
    raw = mw.text.trim(raw)
    -- Екрануємо спеціальні символи в імені гравця
    local escaped = mw.ustring.gsub(name, "([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1")
    local player_pattern = "%[%[" .. escaped .. "%]%]"
   
    -- Збираємо всі рядки
    local rows = {}
    for row in mw.ustring.gmatch(table_content, "|-\n(.-)\n|-") do
        table.insert(rows, row)
    end
   
    local last_row = mw.ustring.match(table_content, "|-\n(.-)%s*|}")
    if last_row then
        table.insert(rows, last_row)
    end
   
     -- Обробляємо кожен рядок
    for _, row in ipairs(rows) do
        if mw.ustring.find(row, player_pattern) then
            local cells = {}
            row = mw.ustring.gsub(row, "^%s*|%s*", "")
           
            for cell in mw.ustring.gmatch(row, "([^|]+)") do
                local trimmed = mw.text.trim(cell)
                if trimmed ~= "" then
                    table.insert(cells, trimmed)
                end
            end
           
            -- Колонка 3 - це рейтинг (Σ)
            if #cells >= 3 then
                local rating = cells[3]
               
                -- Видаляємо HTML теги
                rating = mw.ustring.gsub(rating, "<span[^>]*>", "")
                rating = mw.ustring.gsub(rating, "</span>", "")
               
                -- Видаляємо всі нецифрові символи окрім мінуса
                rating = mw.ustring.gsub(rating, "[^%d%-]", "")
                rating = mw.text.trim(rating)
               
                if rating and rating ~= "" then
                    return rating
                end
            end
           
            return "0"
        end
    end
      
      
     return raw or "0"
     return "0"
end
end