« Module:ZoteroAPI » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (10 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
local p = {} | local p = {} | ||
local cachedData = nil -- 🔒 Cache unique pour la durée | local cachedData = nil -- 🔒 Cache unique pour la durée d'exécution de la page | ||
-- Fonction | -- Fonction de récupération de données Zotero par itemKey | ||
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 | |||
-- Construire l'URL avec l'itemKey directement dans le chemin | |||
local url = 'https://api.zotero.org/groups/4893620/items/' .. itemKey | |||
-- Récupérer les données avec getExternalData en utilisant JSONPath | |||
local success, result = pcall(function() | |||
return mw.ext.externalData.getExternalData({ | |||
url = url, | |||
format = 'json', | |||
use_jsonpath = true, | |||
data = { | |||
key = '$.key', | |||
caseName = '$.data.caseName', | |||
dateDecided = '$.data.dateDecided', | |||
court = '$.data.court', | |||
url = '$.data.url', | |||
history = '$.data.history', | |||
docketNumber = '$.data.docketNumber', | |||
firstName = '$.data.creators[0].firstName', | |||
lastName = '$.data.creators[0].lastName' | |||
} | |||
}) | |||
end) | |||
if not success or not result then | |||
return nil | |||
end | |||
-- Créer un objet avec les données extraites | |||
local data = {} | |||
-- ExternalData retourne un tableau de valeurs pour chaque champ | |||
-- Nous prenons le premier élément de chaque tableau | |||
for field, values in pairs(result) do | |||
if type(values) == "table" and values[1] then | |||
data[field] = values[1] | |||
end | |||
end | |||
cachedData = data | |||
return cachedData | |||
end | end | ||
-- Fonction de | -- Fonction de débogage simple | ||
function p. | function p.debugSimple(frame) | ||
local itemKey = frame and frame.args[1] | |||
if not itemKey or itemKey == "" then | |||
return "Aucun itemKey fourni" | |||
end | |||
local url = 'https://api.zotero.org/groups/4893620/items/' .. itemKey | |||
-- Essayons une approche simplifiée | |||
local output = {"Test de récupération des données:"} | |||
-- Test 1: Récupérer juste le titre sans JSONPath | |||
local success, result1 = pcall(function() | |||
return mw.ext.externalData.getExternalData({ | |||
url = url, | |||
format = 'json' | |||
}) | |||
end) | |||
table.insert(output, "\n1. Test sans JSONPath:") | |||
if not success then | |||
table.insert(output, " Erreur: " .. tostring(result1)) | |||
elseif not result1 then | |||
table.insert(output, " Aucun résultat") | |||
else | |||
table.insert(output, " Type de résultat: " .. type(result1)) | |||
-- Afficher quelques détails si c'est une table | |||
if type(result1) == "table" then | |||
for k, v in pairs(result1) do | |||
if type(v) ~= "table" then | |||
table.insert(output, " " .. k .. ": " .. tostring(v)) | |||
else | |||
table.insert(output, " " .. k .. ": [table]") | |||
end | |||
end | |||
else | |||
table.insert(output, " Valeur: " .. tostring(result1)) | |||
end | |||
end | |||
-- Test 2: Récupérer juste le titre avec JSONPath simple | |||
local success, result2 = pcall(function() | |||
return mw.ext.externalData.getExternalData({ | |||
url = url, | |||
format = 'json', | |||
use_jsonpath = true, | |||
data = { | |||
title = '$.data.caseName' | |||
} | |||
}) | |||
end) | |||
table.insert(output, "\n2. Test avec JSONPath simple:") | |||
if not success then | |||
table.insert(output, " Erreur: " .. tostring(result2)) | |||
elseif not result2 then | |||
table.insert(output, " Aucun résultat") | |||
else | |||
table.insert(output, " Type de résultat: " .. type(result2)) | |||
-- Afficher quelques détails si c'est une table | |||
if type(result2) == "table" then | |||
for k, v in pairs(result2) do | |||
if type(v) ~= "table" then | |||
table.insert(output, " " .. k .. ": " .. tostring(v)) | |||
else | |||
table.insert(output, " " .. k .. ": [table]") | |||
if k == "title" and type(v) == "table" then | |||
for i, val in ipairs(v) do | |||
table.insert(output, " " .. i .. ": " .. tostring(val)) | |||
end | |||
end | |||
end | |||
end | |||
else | |||
table.insert(output, " Valeur: " .. tostring(result2)) | |||
end | |||
end | |||
-- Test 3: Essayer avec #get_web_data via preprocess | |||
local webDataCall = '{{#get_web_data:url=' .. url .. '|format=json|use jsonpath=true|data=title=$.data.caseName}}' | |||
local result3 = frame:preprocess(webDataCall) | |||
table.insert(output, "\n3. Test avec #get_web_data:") | |||
table.insert(output, " Résultat: " .. result3) | |||
return table.concat(output, "\n") | |||
end | end | ||
-- Fonctions de débogage | -- Fonctions de débogage | ||
function p.debugResult() | 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 | end | ||
-- Fonctions accessibles | -- Fonctions accessibles | ||
function p.caseName() | function p.caseName(frame) | ||
local d = p._fetchZoteroData(frame) | |||
return d and d.caseName or '' | |||
end | end | ||
function p.dateDecided() | function p.dateDecided(frame) | ||
local d = p._fetchZoteroData(frame) | |||
return d and d.dateDecided or '' | |||
end | end | ||
function p.docketNumber() | function p.docketNumber(frame) | ||
local d = p._fetchZoteroData(frame) | |||
return d and d.docketNumber or '' | |||
end | end | ||
function p.history() | function p.history(frame) | ||
local d = p._fetchZoteroData(frame) | |||
return d and d.history or '' | |||
end | end | ||
function p.url() | function p.url(frame) | ||
local d = p._fetchZoteroData(frame) | |||
return d and d.url or '' | |||
end | end | ||
function p.court() | function p.court(frame) | ||
local d = p._fetchZoteroData(frame) | |||
return d and d.court or '' | |||
end | end | ||
function p.auteurPrenom() | function p.auteurPrenom(frame) | ||
local d = p._fetchZoteroData(frame) | |||
return d and d.firstName or '' | |||
end | end | ||
function p.auteurNom() | function p.auteurNom(frame) | ||
local d = p._fetchZoteroData(frame) | |||
return d and d.lastName or '' | |||
end | end | ||
-- Affichage de l'URL utilisée (pour vérification) | -- Affichage de l'URL utilisée (pour vérification) | ||
function p.debugUrl() | function p.debugUrl(frame) | ||
local itemKey = frame and frame.args[1] or "" | |||
return 'https://api.zotero.org/groups/4893620/items/' .. itemKey | |||
end | end | ||
return p | return p | ||