Modul:WikidataAlder: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
Ingen redigeringsforklaring |
Problemer med en loop som gir feil svar |
||
| Linje 65: | Linje 65: | ||
local i = 0 | local i = 0 | ||
local oki = 0 | local oki = 0 | ||
-- use for i,prop in iprop(entity['claims'][pv]) | |||
while i < #prop do | while i < #prop do | ||
i = i + 1 | i = i + 1 | ||
| Linje 71: | Linje 72: | ||
return prop[i] | return prop[i] | ||
end | 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 rank == 'normal' then | ||
if oki == 0 then | if oki == 0 then | ||
| Linje 77: | Linje 80: | ||
end | end | ||
end | end | ||
-- merk tidligere kommentar | |||
if oki>0 then | if oki>0 then | ||
return prop[oki] | return prop[oki] | ||
Sideversjonen fra 27. sep. 2015 kl. 14:23
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
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')
if not deathClaim or not birthClaim then
return ''
end
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