« Module:WikidataTable » : différence entre les versions

De Wikiromandie.org
Aller à la navigation Aller à la recherche
Page créée avec « local p = {} local http = mw.http local json = mw.text.jsonDecode function p.render(frame) local sparql = frame.args.sparql local columns = frame.args.columns or "itemLabel" local title = frame.args.title if not sparql or sparql == "" then return "⚠️ No SPARQL query provided." end local url = "https://query.wikidata.org/sparql?format=json&query=" .. mw.uri.encode(sparql) local response = http.get(url) if... »
 
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
local p = {}
local p = {}
local http = mw.http
local json = mw.text.jsonDecode


function p.render(frame)
function p.render(frame)
     local sparql = frame.args.sparql
     local sparql = frame.args.sparql
    local columns = frame.args.columns or "itemLabel"
     local title   = frame.args.title
     local title = frame.args.title


     if not sparql or sparql == "" then
     if not sparql or sparql == "" then
Ligne 13 : Ligne 9 :
     end
     end


     local url = "https://query.wikidata.org/sparql?format=json&query="  
    -- ✅ Correct HTTP module for MediaWiki Lua
    local http = require("http")  -- Only works if the Http extension is enabled
 
    -- Better: use mw.ext.externalData if available
    -- Best on Wikimedia wikis: use the built-in method below
     local url = "https://query.wikidata.org/sparql?format=json&query="
         .. mw.uri.encode(sparql)
         .. mw.uri.encode(sparql)


     local response = http.get(url)
    -- ✅ Use mw.ext.LuaHttp if installed
     local ok, result = pcall(function()
        return mw.ext.LuaHttp.request({
            url = url,
            method = "GET",
            headers = {
                ["Accept"] = "application/json",
                ["User-Agent"] = "MediaWiki Lua Module/1.0"
            }
        })
    end)


     if response.status ~= 200 then
     if not ok or not result or result.code ~= 200 then
         return "⚠️ Error fetching Wikidata."
         return "⚠️ HTTP request failed. Check that LuaHttp extension is installed."
     end
     end


     local data = json(response.body)
     local data = mw.text.jsonDecode(result.body)
     local vars = data.head.vars
     local vars = data.head.vars
     local rows = data.results.bindings
     local rows = data.results.bindings
Ligne 28 : Ligne 39 :
     local html = {}
     local html = {}


    -- Title
     if title and title ~= "" then
     if title and title ~= "" then
         table.insert(html, "<h3>" .. title .. "</h3>")
         table.insert(html, "=== " .. title .. " ===")
     end
     end


     table.insert(html, '{| class="wikitable sortable"')
     table.insert(html, '{| class="wikitable sortable"')


     -- Header
     -- Header row
     table.insert(html, "|-")
     table.insert(html, "|-")
     for _, var in ipairs(vars) do
     for _, var in ipairs(vars) do
Ligne 41 : Ligne 51 :
     end
     end


     -- Rows
     -- Data rows
     for _, row in ipairs(rows) do
     for _, row in ipairs(rows) do
         table.insert(html, "|-")
         table.insert(html, "|-")
         for _, var in ipairs(vars) do
         for _, var in ipairs(vars) do
             local cell = ""
             local cell = (row[var] and row[var].value) or ""
            if row[var] then
            -- ✅ Render entity URIs as wiki links
                cell = row[var].value
             cell = cell:gsub("http://www%.wikidata%.org/entity/(Q%d+)", "[[wikidata:%1|%1]]")
             end
             table.insert(html, "| " .. cell)
             table.insert(html, "| " .. cell)
         end
         end

Version du 12 avril 2026 à 15:46

La documentation pour ce module peut être créée à Module:WikidataTable/doc

local p = {}

function p.render(frame)
    local sparql = frame.args.sparql
    local title   = frame.args.title

    if not sparql or sparql == "" then
        return "⚠️ No SPARQL query provided."
    end

    -- ✅ Correct HTTP module for MediaWiki Lua
    local http = require("http")  -- Only works if the Http extension is enabled

    -- Better: use mw.ext.externalData if available
    -- Best on Wikimedia wikis: use the built-in method below
    local url = "https://query.wikidata.org/sparql?format=json&query="
        .. mw.uri.encode(sparql)

    -- ✅ Use mw.ext.LuaHttp if installed
    local ok, result = pcall(function()
        return mw.ext.LuaHttp.request({
            url = url,
            method = "GET",
            headers = {
                ["Accept"] = "application/json",
                ["User-Agent"] = "MediaWiki Lua Module/1.0"
            }
        })
    end)

    if not ok or not result or result.code ~= 200 then
        return "⚠️ HTTP request failed. Check that LuaHttp extension is installed."
    end

    local data = mw.text.jsonDecode(result.body)
    local vars = data.head.vars
    local rows = data.results.bindings

    local html = {}

    if title and title ~= "" then
        table.insert(html, "=== " .. title .. " ===")
    end

    table.insert(html, '{| class="wikitable sortable"')

    -- Header row
    table.insert(html, "|-")
    for _, var in ipairs(vars) do
        table.insert(html, "! " .. var)
    end

    -- Data rows
    for _, row in ipairs(rows) do
        table.insert(html, "|-")
        for _, var in ipairs(vars) do
            local cell = (row[var] and row[var].value) or ""
            -- ✅ Render entity URIs as wiki links
            cell = cell:gsub("http://www%.wikidata%.org/entity/(Q%d+)", "[[wikidata:%1|%1]]")
            table.insert(html, "| " .. cell)
        end
    end

    table.insert(html, "|}")

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

return p