Modul:WikidataAlder

Fra wikisida.no
Sideversjon per 26. sep. 2015 kl. 22:18 av nb>Profoss
Hopp til navigering Hopp til søk

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)
	local aar = tonumber(string.sub(timestamp, 2, 5))
	local maande = tonumber(string.sub(timestamp, 7, 8))
	local dag = tonumber(string.sub(timestamp, 10, 11))
        if string.sub(timestamp, 1, 1) == '-' then
		aar = 0 - aar
 	end
	return dag,maande,aar
end

function presisjon(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 or 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
	while i < #prop do
		i = i + 1
		local rank = prop[i]["rank"]
		if rank == 'preferred' then
			return prop[i]
		end
		if rank == 'normal' then
			if oki == 0 then
				oki = i
			end
		end
	end
	if oki>0 then
		return prop[oki]
	end
end

function p.frawikidata(frame)
        local qv,pv = frameargs(frame)
        local birth_claim = p.finnBesteProperty(qv, 'P569')
        local death_claim = p.finnBesteProperty(qv, 'P570')
	if not death_claim or not birth_claim then
		return ""
	end
        if birth_claim['mainsnak']['snaktype'] ~= 'value' or death_claim['mainsnak']['snaktype'] ~= 'value' then
        	return ""
        end

        local birthtimestamp = birth_claim['mainsnak']["datavalue"]["value"]["time"]
	local birthprecision = birth_claim['mainsnak']["datavalue"]["value"]["precision"]
        local deathtimestamp = death_claim['mainsnak']["datavalue"]["value"]["time"]
	local deathprecision = death_claim['mainsnak']["datavalue"]["value"]["precision"]
	return presisjon(birthtimestamp, birthprecision, deathtimestamp, deathprecision)
end

return p