Как получить свойство URL изображения из элемента Wikidata через API?

Я создал приложение для Android, которое использует API поиска изображений JSON Google для предоставления изображений, но я заметил, что Google прекратил его поддерживать. Я также обнаружил, что Wikidata иногда предоставляет свойство изображения для некоторых элементов, однако я не могу получить URL-адрес изображения с помощью API Wikidata.

Есть ли способ получить свойство URL изображения из элементов в Викиданных?

4 ответа

Решение

Если какой-то элемент Wikidata (с идентификатором: Qxxx) имеет свойство image (P18), вы можете получить к нему доступ через API MediaWiki:

https://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Qxxx&property=P18

Ответ будет включать в себя:

"claims": {
        "P18": [{ "mainsnak": { "datavalue": { "value": "img_name.ext" }}}]
}

где img_name.ext - имя искомого изображения (все пробелы должны быть заменены на _).

Окончательный URL изображения будет: https://upload.wikimedia.org/wikipedia/commons/a/ab/img_name.ext где a и b - первый и второй символы md5sum из img_name.ext.

Например, для элемента jaguar (Q35694) API вернет имя изображения " Junior-Jaguar-Belize-Zoo.jpg ", которое имеет md5sum: 21 3b31ec141dafebe457e49bcd7f9329, поэтому a = 2 и b = 1, или URL окончательного изображения будет: https://upload.wikimedia.org/wikipedia/commons/2/21/Junior-Jaguar-Belize-Zoo.jpg

Вы можете создавать URL-адреса из свойства изображения ( Sample.pngв следующем примере):

      https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/Sample.png&width=300

Дополнительные сведения см. в документации Wikimedia Commons «Повторное использование контента вне Викимедиа» .

Мне потребовалось время, чтобы понять это. Хеш-сумма, о которой идет речь, не является значением в P18[0].mainsnak.hash.

Вам нужен хешсум ("Junior-Jaguar-Belize-Zoo.jpg"). Строка, являющаяся именем (после замены пробелов на "_". Это даст вам хэш-сумму 213B31EC141DAFEBE457E49BCD7F9329, которую вы можете использовать для определения URL-адреса.

Я использую эту функцию PHP для преобразования заданного имени файла изображения в URL-адрес для википедии:

      function getWikimediaImageURL($aFilename) {
     #-- Example:  $aURLString = getWikimediaImageURL('Fortuna Düsseldorf.svg');    
     $aFilename = str_replace( ' ', '_', $aFilename);
     $md5 = md5($aFilename); 

     return "https://upload.wikimedia.org/wikipedia/commons/" .
            substr($md5,0,1) . 
            "/" .
            substr($md5,0,2). 
            "/" . 
            urlencode($aFilename);
 }    

Commons немного придирчив к заголовку пользовательского агента. Поэтому предоставьте его при загрузке (измените строку User-Agent в соответствии с https://meta.wikimedia.org/wiki/User-Agent_policy):

      $opts = [
    "https" => [
        "method" => "GET",
        "header" => "User-Agent: oolBot/0.0 (https://example.org/coolbot/; coolbot@example.org) generic-library/0.0\r\n" 
    ]
];            
$context = stream_context_create($opts);            
$content = file_get_contents( $pfad , false, $context ); 
Другие вопросы по тегам