« Module:ZoteroAPI » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 2 : | Ligne 2 : | ||
local cachedData = nil -- 🔒 Cache unique pour la durée d'exécution de la page | 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 | |||
-- Fonction de récupération de données | |||
function p._fetchZoteroData(frame) | function p._fetchZoteroData(frame) | ||
-- Utiliser le cache si disponible | -- Utiliser le cache si disponible | ||
| Ligne 24 : | Ligne 17 : | ||
end | end | ||
-- | -- Récupérer les données depuis une page locale de notre wiki | ||
local | local proxyPage = "MediaWiki:ZoteroData/" .. itemKey | ||
local proxyContent = mw.title.new(proxyPage).content | |||
if not proxyContent or proxyContent == "" then | |||
if not | |||
return nil | return nil | ||
end | end | ||
-- Décoder le JSON | -- Décoder le JSON stocké dans la page proxy | ||
local success, decoded = pcall(mw.text.jsonDecode, | local success, decoded = pcall(mw.text.jsonDecode, proxyContent) | ||
if not success or not decoded then | if not success or not decoded then | ||
| Ligne 42 : | Ligne 32 : | ||
end | end | ||
-- | -- Stocker dans le cache | ||
if | 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 | end | ||
return | -- 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 | end | ||
-- Fonction de débogage pour | -- Fonction de débogage pour vérifier si une page proxy existe | ||
function p. | function p.checkProxyPage(frame) | ||
local itemKey = frame and frame.args[1] | local itemKey = frame and frame.args[1] | ||
| Ligne 60 : | Ligne 65 : | ||
end | end | ||
local | local proxyPage = "MediaWiki:ZoteroData/" .. itemKey | ||
local pageTitle = mw.title.new(proxyPage) | |||
local | |||
if not | if not pageTitle.exists then | ||
return " | return "La page proxy " .. proxyPage .. " n'existe pas" | ||
end | end | ||
return "La page proxy " .. proxyPage .. " existe et contient " .. | |||
#pageTitle.content .. " caractères" | |||
end | end | ||
-- | -- Les autres fonctions restent identiques | ||
function p.debugResult(frame) | function p.debugResult(frame) | ||
local d = p._fetchZoteroData(frame) | local d = p._fetchZoteroData(frame) | ||
| Ligne 89 : | Ligne 88 : | ||
table.insert(out, "✔ Auteur : " .. (d.firstName or '') .. " " .. (d.lastName or '')) | table.insert(out, "✔ Auteur : " .. (d.firstName or '') .. " " .. (d.lastName or '')) | ||
return table.concat(out, "\n") | return table.concat(out, "\n") | ||
end | end | ||
| Ligne 167 : | Ligne 129 : | ||
local d = p._fetchZoteroData(frame) | local d = p._fetchZoteroData(frame) | ||
return d and d.lastName or '' | return d and d.lastName or '' | ||
end | end | ||
return p | return p | ||
Version du 12 juin 2025 à 16:25
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