« 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, response = pcall(mw.ext.externalData.getExternalData, {
    -- Utiliser mw.uri.fetchContent au lieu de externalData
        url = url,
     local success, response = pcall(function()
        format = 'json'
        return mw.uri.fetchContent(url)
     })
     end)
      
      
     if not success or not response then
     if not success or not response then
Ligne 29 : Ligne 29 :
     end
     end
      
      
     -- Traitement des différents formats possibles de réponse
     -- Décoder la réponse JSON
    local data
     local success, data = pcall(mw.text.jsonDecode, response)
   
    if not success or not data then
    -- 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
         return nil
     end
     end
      
      
     -- Vérifier la structure des données
     -- Extraire les données de la réponse
    -- 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
     if data.data then
        -- Si la structure est { data: {...} }
         cachedData = data.data
         cachedData = data.data
     else
     else
        -- Si la structure est l'objet directement
         cachedData = data
         cachedData = data
     end
     end
Ligne 61 : Ligne 44 :
     return cachedData
     return cachedData
end
end
-- Fonction pour déboguer la réponse brute
function p.debugRawResponse(frame)
function p.debugRawResponse(frame)
     local itemKey = frame and frame.args[1]
     local itemKey = frame and frame.args[1]
Ligne 70 : Ligne 55 :
     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, response = pcall(mw.ext.externalData.getExternalData, {
    -- Utiliser mw.uri.fetchContent
        url = url,
     local success, response = pcall(function()
        format = 'json'
        return mw.uri.fetchContent(url)
     })
     end)
      
      
     if not success then
     if not success then
Ligne 83 : Ligne 68 :
     end
     end
      
      
     -- Afficher le type et le contenu brut
     -- Limiter la taille de la réponse pour éviter de surcharger la page
     return "Type: " .. type(response) .. "\n\nContenu: " .. tostring(response)
    if #response > 1000 then
        response = response:sub(1, 1000) .. "... (tronqué)"
    end
   
     return "Type: " .. type(response) .. "\n\nContenu: " .. response
end
end
-- Fonctions de débogage
-- Fonctions de débogage
function p.debugResult(frame)
function p.debugResult(frame)