From 2f3bc5f2fa3bc912f5419dd134b7fa2fecd1352c Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Thu, 13 Feb 2025 21:38:13 +0100 Subject: [PATCH] Prefer wikipedia page titles over wikidata labels Close #28 --- src/NodaWikidataFetcher.php | 6 ++++-- tests/NodaWikidataFetcherTest.php | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/NodaWikidataFetcher.php b/src/NodaWikidataFetcher.php index f87b0e1..f898fd3 100644 --- a/src/NodaWikidataFetcher.php +++ b/src/NodaWikidataFetcher.php @@ -800,7 +800,9 @@ final class NodaWikidataFetcher { $wikilink = $wikilinks[$lang]; if (!empty($contents[$lang])) { - $descFromWiki = json_decode($contents[$lang], true)['parse']['text']['*']; + $fromWikipedia = json_decode($contents[$lang], true)['parse']; + $titleFromWikipedia = $fromWikipedia['title']; + $descFromWiki = $fromWikipedia['text']['*']; # Process data retrieved from wikipedia @@ -815,7 +817,7 @@ final class NodaWikidataFetcher { if ($tDescription !== '' && !empty($desc_cleaned = self::_cleanWikidataInput($tDescription))) { # $descs[$lang] = $tDescription; $output[$lang] = [ - 'label' => self::_cleanWikidataInput((string)$data['labels'][$lang]['value']), + 'label' => $titleFromWikipedia, 'description' => '"' . $desc_cleaned . '" - (' . $data['labels'][$lang]['language'] . '.wikipedia.org ' . date('d.m.Y') . ')', 'link' => $wikilink, ]; diff --git a/tests/NodaWikidataFetcherTest.php b/tests/NodaWikidataFetcherTest.php index ad9e5fc..525b7fb 100644 --- a/tests/NodaWikidataFetcherTest.php +++ b/tests/NodaWikidataFetcherTest.php @@ -471,4 +471,21 @@ Transclusion expansion time report (%,ms,calls,template) $mysqli->close(); } + + /** + * Test that fetching translation from Wikidata returns the title of the wikipedia page, + * not the wikidata title. + * + * @return void + */ + public function testListTranslationsFromWikidataWikipediaReturnsWikipediaTitle():void { + + $data = NodaWikidataFetcher::getWikidataEntity("Q33550"); + + $output = NodaWikidataFetcher::listTranslationsFromWikidataWikipedia(["de"], $data); + self::assertNotEmpty($output['de']); + + self::assertEquals("Friedrich II. (Preußen)", $output['de']['label']); + + } }