Modul:WikidataAlder: Forskjell mellom sideversjoner

Fra wikisida.no
Hopp til navigering Hopp til søk
Feiltilstand påvist som ikke håndteres
manglende feilmeldinger
Linje 92: Linje 92:
     local birthClaim = p.finnBesteProperty(qv, 'P569')
     local birthClaim = p.finnBesteProperty(qv, 'P569')
     local deathClaim = p.finnBesteProperty(qv, 'P570')
     local deathClaim = p.finnBesteProperty(qv, 'P570')
    -- @todo gi en forklarende tekst når utsagn finnes, men prosessering av dem feiler
     if not deathClaim or not birthClaim then
     if not deathClaim or not birthClaim then
         return ''
         return ''
     end
     end
    -- @todo gi en forklarende tekst når snaktype er noe annet
     if birthClaim['mainsnak']['snaktype'] ~= 'value' or deathClaim['mainsnak']['snaktype'] ~= 'value' then
     if birthClaim['mainsnak']['snaktype'] ~= 'value' or deathClaim['mainsnak']['snaktype'] ~= 'value' then
         return ''
         return ''

Sideversjonen fra 27. sep. 2015 kl. 14:44

Formål

Å presentere datoer fra Wikidata.

Bruk

Modulen brukes ved å legge inn en av:

{{#invoke:WikidataAlder|alderInfoboks|qv=Qxxx}}

i en mal.

Feilmelding

Om du ser en feilmelding i en infoboks angående fødsels- eller dødsdato, dobbeltsjekk at fødsels- eller dødsdato er riktig på Wikidata. Dette kan forekomme bl.a. av ikke-eksisterende datoer som ved skuddår.

Eksempler

Artikkel Manuell bruk av maler
{{Fødselsdato og alder}} / {{Dødsdato og alder}}
Modul:WikidataAlder
({{ #invoke:WikidataAlder | alderInfoboks }}
Kommentar
Sverige (Q34) (har ikke, siden dette ikke er en person) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke. Har ikke fødsels- eller dødsdatoer, så da prøver vi ikke å regne ut alder
Bjørn Ousland (Q4919913) 14. mai 1959 (66 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Zdeněk Grygera (Q168997) 14. mai 1980 (45 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Synnøve Solemdal (Q257682) 15. mai 1989 (36 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Veronica Campbell-Brown (Q5796) 15. mai 1982 (43 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Jens Stoltenberg (Q57665) 16. mars 1959 (67 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Susann Goksør Bjerkrheim (Q2153171) 7. juli 1970 (55 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Lady Gaga (Q19848) 28. mars 1986 (40 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Arve Opsahl (Q716993) 29. april 2007 (85 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
B.B. King (Q188969) 14. mai 2015 (89 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Einar Gerhardsen (Q164346) 19. september 1987 (90 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Marie Curie (Q7186) 4. juli 1934 (66 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Isaac Newton (Q935) 31. mars 1727 (84 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Karl III Johan (Q52927) 8. mars 1844 (81 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Karl XII av Sverige (Q52934) (ikke brukt i artikkel) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Elisabeth I (Q7207) 24. mars 1603 (69 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Vladimir Lenin (Q1394) 21. januar 1924 (53 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Arthur Townsend (Q4800483) (ikke brukt) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke. Wikidata har ukjent verdi for dødsdato, så da skal vi ikke regne ut alder.
Julius Cæsar (Q1048) (ikke brukt, men manuelt oppgitt til 55 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke. Wikidata har ikke nøyaktige dager, så da prøver vi ikke å regne ut alder
Aleksander den store (Q8409) (ikke brukt, men manuelt oppgitt til 32 år) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke.
Pythagoras (Q10261) (ikke brukt i artikkel) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke. Wikidata har ikke nøyaktige dager, så da prøver vi ikke å regne ut alder
Ramses II (Q1523) (ikke brukt i artikkel) Skriptfeil: Funksjonen «alderInfoboks» eksisterer ikke. Wikidata har ikke nøyaktige dager, så da prøver vi ikke å regne ut alder

local p = {}

local function frameargs(frame)
    local args = frame.args
    if args[1] == nil then
        local pFrame = frame:getParent();
        args = pFrame.args;
        for k,v in pairs( frame.args ) do
            args[k] = v;
        end
     end
     return args['qv'],args['pv']
end

function splitTimestamp(timestamp)
	-- tonumber can return nil, what happens then?
    local aar = tonumber(string.sub(timestamp, 2, 5))
	-- tonumber can return nil, what happens then?
    local maaned = tonumber(string.sub(timestamp, 7, 8))
	-- tonumber can return nil, what happens then?
    local dag = tonumber(string.sub(timestamp, 10, 11))
        if string.sub(timestamp, 1, 1) == '-' then
        aar = 0 - aar
    end
    return dag,maaned,aar
end

function ageFromBirthAndDeathDates(birthtimestamp, birthprecision, deathtimestamp, deathprecision)
    local birthday, birthmonth, birthyear = splitTimestamp(birthtimestamp)
    local deathday, deathmonth, deathyear = splitTimestamp(deathtimestamp)
    if birthprecision == 11 and deathprecision == 11 then
        local age = deathyear - birthyear
        if deathmonth < birthmonth then
            age = age - 1
        end
        if deathmonth == birthmonth and deathday < birthday then
            age = age - 1
        end
        return '('..age..' år)'
    end
    if birthprecision >= 10 and deathprecision >= 10 then
        local age = deathyear - birthyear
        if deathmonth < birthmonth then
            age = age - 1
        end
        return '('..age..' år)'
    end
    if birthprecision >= 9 and deathprecision >= 9 then
        local age = deathyear - birthyear
        local age1 = age - 1
        return '('..age1..'–'..age..' år)'
    end
    return ''
end

function p.finnBesteProperty(qv,pv)
    local entity = mw.wikibase.getEntity(qv)
    if not entity then
        return
    end
    if not entity['claims'] or not entity['claims'][pv] then
        return
    end
    local prop = entity['claims'][pv]
    local i = 0
    local oki = 0
    -- use for i,prop in iprop(entity['claims'][pv])
    while i < #prop do
        i = i + 1
        -- her mangler det en test på snaktype som isteden blir gjort i p.frawikidata,
        -- dermed kan et utsagn bli satt til normal og novalue, og blokkere et ennet som er normal og somevalue
        local rank = prop[i]['rank']
        if rank == 'preferred' then
            return prop[i]
        end
        -- dette gir siste med normal rank, det er ikke gitt at hverken første eller siste er riktig
        -- alle oppføringer er riktige i dette tilfellet
        if rank == 'normal' then
            if oki == 0 then
                oki = i
            end
        end
    end
    -- merk tidligere kommentar 
    if oki>0 then
        return prop[oki]
    end
end

function p.frawikidata(frame)
    local qv,pv = frameargs(frame)
    local birthClaim = p.finnBesteProperty(qv, 'P569')
    local deathClaim = p.finnBesteProperty(qv, 'P570')
    -- @todo gi en forklarende tekst når utsagn finnes, men prosessering av dem feiler
    if not deathClaim or not birthClaim then
        return ''
    end
    -- @todo gi en forklarende tekst når snaktype er noe annet
    if birthClaim['mainsnak']['snaktype'] ~= 'value' or deathClaim['mainsnak']['snaktype'] ~= 'value' then
        return ''
    end

    local birthValue = birthClaim['mainsnak']['datavalue']['value']
    local deathValue = deathClaim['mainsnak']['datavalue']['value']
    return ageFromBirthAndDeathDates(
        birthValue['time'], birthValue['precision'],
        deathValue['time'], deathValue['precision']
    )
end

return p