« Module:ZoteroAPI » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 20 : | Ligne 20 : | ||
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' | ||
local success, | local success, response = pcall(mw.ext.externalData.getExternalData, { | ||
url = url, | url = url, | ||
format = 'json' | format = 'json' | ||
}) | }) | ||
if not success or not | if not success or not response then | ||
return nil | return nil | ||
end | end | ||
-- | -- Traitement des différents formats possibles de réponse | ||
local data | |||
if type( | |||
local ok, | -- Si la réponse est une chaîne JSON, on la décode | ||
if not ok or type( | if type(response) == "string" then | ||
local ok, decoded = pcall(mw.text.jsonDecode, response) | |||
if not ok or type(decoded) ~= "table" then | |||
return nil | return nil | ||
end | end | ||
decoded | data = decoded | ||
elseif type( | elseif type(response) == "table" then | ||
-- Si c'est déjà une table, on l'utilise directement | |||
data = response | |||
else | else | ||
return nil | return nil | ||
end | end | ||
-- Pour | -- 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 | |||
return cachedData | return cachedData | ||
end | end | ||