« Module:WikidataTable » : différence entre les versions
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 = {} | ||
function p.render(frame) | function p.render(frame) | ||
local sparql = frame.args.sparql | local sparql = frame.args.sparql | ||
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 | -- ✅ 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 | if not ok or not result or result.code ~= 200 then | ||
return "⚠️ | return "⚠️ HTTP request failed. Check that LuaHttp extension is installed." | ||
end | end | ||
local data = | 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 = {} | ||
if title and title ~= "" then | if title and title ~= "" then | ||
table.insert(html, " | 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 | ||
-- | -- 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 "" | ||
-- ✅ Render entity URIs as wiki links | |||
cell = cell:gsub("http://www%.wikidata%.org/entity/(Q%d+)", "[[wikidata:%1|%1]]") | |||
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