Как надежно получить изображение, используемое в инфобоксе Википедии?

Как (надежно) получить основные изображения, используемые в информационном окне Википедии, из API?

Этот вопрос уже задавался, и принятый ответ признает, что это всего лишь предположение. Последующие ответы в лучшем случае кажутся взломом и не возвращают правильное изображение.

Например, запись Википедии о Джими Хендриксе использует "File:Jimi Hendrix 1967.png" в качестве основного изображения в InfoBox.

В обновленных ответах предлагается использовать этот URL но для Джими Хендрикса (и других тем) он часто возвращает неправильное изображение.

Если я вытащу все изображения невозможно определить, какое изображение используется в Infobox.


person Community    schedule 23.04.2016    source источник


Ответы (1)


Каждая страница Википедии (например, Джими Хендрикс) связана с элементом Викиданных (Q5928). Основное изображение для каждой статьи Википедии (обычно это в шаблоне Infobox) сохраняется изображение (P18) в Викиданных. Поскольку все параметры шаблонов Википедии очень скоро будут перемещены в Викиданные, я предлагаю вам начать использовать API Wikidata MediaWiki:

https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&sites=enwiki&props=claims&titles=Jimi Hendrix

С помощью этого запроса вы также получите много другой информации, а также название основного изображения статьи:

{
    ...
    "claims":{
        ...
        "P18":[{
            "mainsnak":{
                "datavalue":{
                    "value":"Jimi Hendrix 1967.png",
                },
            },
        }],
        ...
    }
}

И здесь я объясняю, как получить URL-адрес изображения также.

person Termininja    schedule 23.04.2016
comment
Я думаю, что это сработает ... спасибо! Можно ли как-то вернуть первый абзац статьи с этим запросом или мне нужно сделать 2 запроса? Я хотел бы делать меньше вызовов API, если это возможно. - person ; 23.04.2016
comment
WikiData — это хранилище фактов, так что нет, для этого вам придется запросить Википедию. - person leo; 25.04.2016
comment
@kristen, в этом случае лучше использовать stackoverflow.com/questions/35663229/ - person Termininja; 11.10.2017