fix: some wikipedia images do not have a LicenseUrl eg for Branta canadensis, a public domain image. Set the licence url to the external link in that case

This commit is contained in:
frederik
2025-09-13 11:09:27 +02:00
parent 0c884de88d
commit 9c515340aa
+18 -10
View File
@@ -408,8 +408,8 @@ class Wikipedia extends ImageProvider {
protected $db_path = __ROOT__ . '/scripts/wikipedia.db';
protected function get_from_source($sci_name) {
$title = str_replace(' ', '_', $sci_name);
$data = $this->get_json("https://en.wikipedia.org/api/rest_v1/page/summary/$title");
$page_title = str_replace(' ', '_', $sci_name);
$data = $this->get_json("https://en.wikipedia.org/api/rest_v1/page/summary/$page_title");
if ($data == false or !isset($data['originalimage']))
return;
@@ -418,6 +418,9 @@ class Wikipedia extends ImageProvider {
if ($metadata == false or !isset($metadata['query']['pages']))
return;
$image_url = $data['originalimage']['source'];
$title = $data['title'];
foreach ($metadata['query']['pages'] as $page) {
$details = $page['imageinfo']['0']['extmetadata'];
$author = $details['Artist']['value'];
@@ -427,13 +430,14 @@ class Wikipedia extends ImageProvider {
} else {
$author_url = "https://en.wikipedia.org/wiki/File:$image_name";
}
$license_url = $details['LicenseUrl']['value'];
if (isset($details['LicenseUrl'])) {
$license_url = $details['LicenseUrl']['value'];
} else {
$license_url = $this->get_external_link($image_url);
}
}
$engname = get_com_en_name($sci_name);
$image_url = $data['originalimage']['source'];
$title = $data['title'];
// $sci_name, $com_en_name, $image_url, $title, $id, $author_url, $license_url
$this->set_image_in_db($sci_name, $engname, $image_url, $title, $sci_name, $author_url, $license_url);
@@ -443,12 +447,16 @@ class Wikipedia extends ImageProvider {
$image = parent::get_image($sci_name);
if ($image === false)
return false;
$image_name = substr($image['image_url'], strrpos($image['image_url'], '/') + 1);
// external link to photo
$photos_url = "https://en.wikipedia.org/wiki/File:$image_name";
$image['photos_url'] = $photos_url;
$image['photos_url'] = $this->get_external_link($image['image_url']);
return $image;
}
private function get_external_link($image_url) {
$image_name = substr($image_url, strrpos($image_url, '/') + 1);
$photo_url = "https://en.wikipedia.org/wiki/File:$image_name";
return $photo_url;
}
}
function get_info_url($sciname){