« 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, data = pcall(mw.ext.externalData.getExternalData, {
     local success, response = pcall(mw.ext.externalData.getExternalData, {
         url = url,
         url = url,
         format = 'json'
         format = 'json'
     })
     })
      
      
     if not success or not data then
     if not success or not response then
         return nil
         return nil
     end
     end
      
      
     -- Correction: on s'assure que `data` est bien une table
     -- Traitement des différents formats possibles de réponse
    local decoded
    local data
     if type(data) == "string" then
   
         local ok, result = pcall(mw.text.jsonDecode, data)
    -- Si la réponse est une chaîne JSON, on la décode
         if not ok or type(result) ~= "table" then
     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 = result
         data = decoded
     elseif type(data) == "table" then
     elseif type(response) == "table" then
         decoded = data
         -- Si c'est déjà une table, on l'utilise directement
        data = response
     else
     else
         return nil
         return nil
     end
     end
      
      
     -- Pour l'itemKey, la réponse de l'API est directement l'objet (pas un tableau)
    -- Vérifier la structure des données
    cachedData = decoded.data
     -- 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