Module:LearnsetsTestingData

From Pokemon Revolution Online Wiki
Revision as of 12:06, 5 March 2026 by Cae (talk | contribs) (Created page with "local p = {} local TARGET_URL = "https://wiki.pokemonrevolution.net/data/Learnsets.json" local function tryExternalDataJson() local ok, data, errors = pcall(function() return mw.ext.externalData.getExternalData{ url = TARGET_URL, format = "json" } end) if not ok then return { method = "ExternalData (format=json)", success = false, message = "Lua error: " .. tostring(data)...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Documentation for this module may be created at Module:LearnsetsTestingData/doc

local p = {}

local TARGET_URL = "https://wiki.pokemonrevolution.net/data/Learnsets.json"

local function tryExternalDataJson()
    local ok, data, errors = pcall(function()
        return mw.ext.externalData.getExternalData{
            url = TARGET_URL,
            format = "json"
        }
    end)

    if not ok then
        return {
            method = "ExternalData (format=json)",
            success = false,
            message = "Lua error: " .. tostring(data)
        }
    end

    if errors then
        return {
            method = "ExternalData (format=json)",
            success = false,
            message = "ExternalData errors: " .. table.concat(errors, " | ")
        }
    end

    if data and data.__json then
        return {
            method = "ExternalData (format=json)",
            success = true,
            message = "__json received"
        }
    end

    return {
        method = "ExternalData (format=json)",
        success = false,
        message = "No __json returned (likely HTML instead of JSON)"
    }
end


local function tryExternalDataRaw()
    local ok, data, errors = pcall(function()
        return mw.ext.externalData.getExternalData{
            url = TARGET_URL
        }
    end)

    if not ok then
        return {
            method = "ExternalData (auto-detect)",
            success = false,
            message = "Lua error: " .. tostring(data)
        }
    end

    if errors then
        return {
            method = "ExternalData (auto-detect)",
            success = false,
            message = "ExternalData errors: " .. table.concat(errors, " | ")
        }
    end

    if data then
        return {
            method = "ExternalData (auto-detect)",
            success = true,
            message = "Some data returned"
        }
    end

    return {
        method = "ExternalData (auto-detect)",
        success = false,
        message = "No data returned"
    }
end


local function tryApiFetch()
    local apiUrl =
        "https://wiki.pokemonrevolution.net/api.php?action=query&meta=siteinfo&format=json"

    local ok, data, errors = pcall(function()
        return mw.ext.externalData.getExternalData{
            url = apiUrl,
            format = "json"
        }
    end)

    if not ok then
        return {
            method = "API test (control test)",
            success = false,
            message = "Lua error: " .. tostring(data)
        }
    end

    if errors then
        return {
            method = "API test (control test)",
            success = false,
            message = "ExternalData errors: " .. table.concat(errors, " | ")
        }
    end

    if data and data.__json then
        return {
            method = "API test (control test)",
            success = true,
            message = "API works (server allows HTTP requests)"
        }
    end

    return {
        method = "API test (control test)",
        success = false,
        message = "API returned no JSON"
    }
end


local function render(results)
    local out = {}
    table.insert(out, "== Learnsets.json Access Test ==")
    table.insert(out, "")
    table.insert(out, "Target URL: " .. TARGET_URL)
    table.insert(out, "")

    for _, r in ipairs(results) do
        table.insert(out, "=== " .. r.method .. " ===")
        table.insert(out, "* Success: " .. tostring(r.success))
        table.insert(out, "* Message: " .. r.message)
        table.insert(out, "")
    end

    return table.concat(out, "\n")
end


function p.run()
    local results = {
        tryExternalDataJson(),
        tryExternalDataRaw(),
        tryApiFetch()
    }

    return render(results)
end

return p