« Module:ZoteroAPI » : différence entre les versions
Aucun résumé des modifications Balise : Révoqué |
Annulation des modifications 17529 de Marc (discussion) Balise : Annulation |
||
| Ligne 3 : | Ligne 3 : | ||
-- Fonction de récupération de données Zotero par itemKey | -- Fonction de récupération de données Zotero par itemKey | ||
function p. | 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] | local itemKey = frame and frame.args[1] | ||
-- Si aucun itemKey n'est fourni, retourner nil | |||
if not itemKey or itemKey == "" then | if not itemKey or itemKey == "" then | ||
return | return nil | ||
end | end | ||
-- Construire l'URL avec l'itemKey spécifique | |||
local url = 'https://api.zotero.org/groups/4893620/items/' .. itemKey .. '?include=data&format=json' | local url = 'https://api.zotero.org/groups/4893620/items/' .. itemKey .. '?include=data&format=json' | ||
| Ligne 17 : | Ligne 25 : | ||
}) | }) | ||
if not success then | if not success or not response then | ||
return | return nil | ||
end | |||
-- Traitement des différents formats possibles de réponse | |||
local data | |||
-- Si la réponse est une chaîne JSON, on la décode | |||
if type(response) == "string" then | |||
local ok, decoded = pcall(mw.text.jsonDecode, response) | |||
if not ok or type(decoded) ~= "table" then | |||
return nil | |||
end | |||
data = decoded | |||
elseif type(response) == "table" then | |||
-- Si c'est déjà une table, on l'utilise directement | |||
data = response | |||
else | |||
return nil | |||
end | end | ||
if | -- Vérifier la structure des données | ||
-- Pour un itemKey spécifique, data peut être: | |||
-- 1. L'objet directement | |||
-- 2. Un objet avec une propriété "data" contenant les informations | |||
if data.data then | |||
-- Si la structure est { data: {...} } | |||
cachedData = data.data | |||
else | |||
-- Si la structure est l'objet directement | |||
cachedData = data | |||
end | end | ||
return cachedData | |||
return | |||
end | end | ||