|
|
@ -34,3 +34,65 @@ function wikidataGetLabel ($id, $lang) { |
|
|
|
return array_values($data['labels'])[0]['value']; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function wikidataGetValues ($id, $property) { |
|
|
|
$data = wikidataLoad($id); |
|
|
|
|
|
|
|
if (!array_key_exists($property, $data['claims'])) { |
|
|
|
return []; |
|
|
|
} |
|
|
|
|
|
|
|
return array_map( |
|
|
|
function ($el) { |
|
|
|
return $el['mainsnak']['datavalue']['value']; |
|
|
|
}, |
|
|
|
$data['claims'][$property] |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
function wikidataFormatDate($value, $maxPrecision = 13) { |
|
|
|
$v = new DateTime($value['time']); |
|
|
|
$p = min($maxPrecision, $value['precision']); |
|
|
|
|
|
|
|
if ($p < 9) { |
|
|
|
} else { |
|
|
|
$formats = [ |
|
|
|
9 => 'Y', |
|
|
|
10 => 'M Y', |
|
|
|
11 => 'j. M Y', |
|
|
|
12 => 'j. M Y - G:00', |
|
|
|
13 => 'j. M Y - G:i', |
|
|
|
14 => 'j. M Y - G:i:s', |
|
|
|
]; |
|
|
|
|
|
|
|
return $v->format($formats[$p]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function wikidataFormat ($id, $lang) { |
|
|
|
$ret = '<b>' . wikidataGetLabel($id, $lang) . '</b>'; |
|
|
|
|
|
|
|
$birthDate = wikidataGetValues($id, 'P569'); |
|
|
|
$deathDate = wikidataGetValues($id, 'P570'); |
|
|
|
if (sizeof($birthDate) && sizeof($deathDate)) { |
|
|
|
$ret .= ' (' . wikidataFormatDate($birthDate[0], 11) . ' — ' . wikidataFormatDate($deathDate[0], 11) . ')'; |
|
|
|
} |
|
|
|
elseif (sizeof($birthDate)) { |
|
|
|
$ret .= ' (* ' . wikidataFormatDate($birthDate[0], 11) . ')'; |
|
|
|
} |
|
|
|
elseif (sizeof($deathDate)) { |
|
|
|
$ret .= ' († ' . wikidataFormatDate($birthDate[0], 11) . ')'; |
|
|
|
} |
|
|
|
|
|
|
|
$occupation = wikidataGetValues($id, 'P106'); |
|
|
|
if (sizeof($occupation)) { |
|
|
|
$ret .= ', ' . implode(', ', array_map( |
|
|
|
function ($value) use ($lang) { |
|
|
|
return wikidataGetLabel($value['id'], $lang); |
|
|
|
}, |
|
|
|
$occupation |
|
|
|
)); |
|
|
|
} |
|
|
|
|
|
|
|
return $ret; |
|
|
|
} |