From 531192a7be24d479a5f0d41dee1d8837507e37a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= Date: Tue, 19 Apr 2022 21:30:34 +0200 Subject: [PATCH] wikidata/wikipedia: create formatted entry from wikidata --- src/wikidata.php | 62 +++++++++++++++++++++++++++++++++++++++++++++++ src/wikipedia.php | 2 +- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/wikidata.php b/src/wikidata.php index 52c74d19..4d1c3a25 100644 --- a/src/wikidata.php +++ b/src/wikidata.php @@ -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 = '' . wikidataGetLabel($id, $lang) . ''; + + $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; +} diff --git a/src/wikipedia.php b/src/wikipedia.php index 3f42dcdc..e34eed56 100644 --- a/src/wikipedia.php +++ b/src/wikipedia.php @@ -27,7 +27,7 @@ function ajax_wikipedia ($param) { $wp_url = $data['sitelinks'][$id]['url']; } else { - $content = "

" . wikidataGetLabel($param['page'], $param['lang']) . "

"; + $content = "

" . wikidataFormat($param['page'], $param['lang']) . "

"; $url = "https://wikidata.org/wiki/{$param['page']}"; if (array_key_exists('commonswiki', $data['sitelinks'])) { $url = $data['sitelinks']['commonswiki']['url'];