Module:ZoteroAPI
La documentation pour ce module peut être créée à Module:ZoteroAPI/doc
local p = {}
local cachedData = nil -- 🔒 Cache unique pour la durée d'exécution de la page
-- Fonction de récupération de données via un proxy local
function p._fetchZoteroData(frame)
-- Utiliser le cache si disponible
if cachedData then
return cachedData
end
-- Obtenir l'itemKey depuis le paramètre
local itemKey = frame and frame.args[1]
-- Si aucun itemKey n'est fourni, retourner nil
if not itemKey or itemKey == "" then
return nil
end
-- Récupérer les données depuis une page locale de notre wiki
local proxyPage = "MediaWiki:ZoteroData/" .. itemKey
local proxyContent = mw.title.new(proxyPage).content
if not proxyContent or proxyContent == "" then
return nil
end
-- Décoder le JSON stocké dans la page proxy
local success, decoded = pcall(mw.text.jsonDecode, proxyContent)
if not success or not decoded then
return nil
end
-- Stocker dans le cache
cachedData = decoded
return cachedData
end
-- Fonction pour créer une page proxy (à utiliser par les administrateurs)
function p.createProxyPage(frame)
local itemKey = frame.args[1]
local jsonData = frame.args[2]
if not itemKey or not jsonData then
return "Erreur: itemKey et jsonData sont requis"
end
-- Vérifier que le JSON est valide
local success, _ = pcall(mw.text.jsonDecode, jsonData)
if not success then
return "Erreur: JSON invalide"
end
-- Afficher le contenu à copier dans une page MediaWiki:ZoteroData/<itemKey>
return "Pour créer la page proxy, copiez le JSON suivant dans la page [[MediaWiki:ZoteroData/" ..
itemKey .. "]]:\n\n<pre>" .. jsonData .. "</pre>"
end
-- Fonction de débogage pour vérifier si une page proxy existe
function p.checkProxyPage(frame)
local itemKey = frame and frame.args[1]
if not itemKey or itemKey == "" then
return "Aucun itemKey fourni"
end
local proxyPage = "MediaWiki:ZoteroData/" .. itemKey
local pageTitle = mw.title.new(proxyPage)
if not pageTitle.exists then
return "La page proxy " .. proxyPage .. " n'existe pas"
end
return "La page proxy " .. proxyPage .. " existe et contient " ..
#pageTitle.content .. " caractères"
end
-- Les autres fonctions restent identiques
function p.debugResult(frame)
local d = p._fetchZoteroData(frame)
if not d then return "Aucune donnée reçue" end
local out = {}
table.insert(out, "✔ Clé : " .. (d.key or ''))
table.insert(out, "✔ Titre : " .. (d.caseName or ''))
table.insert(out, "✔ Tribunal : " .. (d.court or ''))
table.insert(out, "✔ Date : " .. (d.dateDecided or ''))
table.insert(out, "✔ URL : " .. (d.url or ''))
table.insert(out, "✔ Auteur : " .. (d.firstName or '') .. " " .. (d.lastName or ''))
return table.concat(out, "\n")
end
-- Fonctions accessibles
function p.caseName(frame)
local d = p._fetchZoteroData(frame)
return d and d.caseName or ''
end
function p.dateDecided(frame)
local d = p._fetchZoteroData(frame)
return d and d.dateDecided or ''
end
function p.docketNumber(frame)
local d = p._fetchZoteroData(frame)
return d and d.docketNumber or ''
end
function p.history(frame)
local d = p._fetchZoteroData(frame)
return d and d.history or ''
end
function p.url(frame)
local d = p._fetchZoteroData(frame)
return d and d.url or ''
end
function p.court(frame)
local d = p._fetchZoteroData(frame)
return d and d.court or ''
end
function p.auteurPrenom(frame)
local d = p._fetchZoteroData(frame)
return d and d.firstName or ''
end
function p.auteurNom(frame)
local d = p._fetchZoteroData(frame)
return d and d.lastName or ''
end
return p