Поддерживает ли API Википедии поиск определенного шаблона?
Можно ли запросить API Википедии для статей, содержащих определенный шаблон? Документация не описывает никаких действий, которые будут фильтровать результаты поиска на страницах, содержащих шаблон. В частности, я просматриваю страницы, содержащие Template:Persondata
. После этого я надеюсь получить этот конкретный шаблон, чтобы заполнить данные генеалогии для проекта openancestry.org.
В приведенном ниже примере показано, что страница Albert Einstein содержит шаблон Persondata, но не возвращает содержимое шаблона, и я не знаю, как получить список названий страниц, содержащих шаблон.
http://en.wikipedia.org/w/api.php?action=query&prop=templates&titles=Albert%20Einstein&tlcontinue=736|10|ParmPart
Возврат:
<api>
<query>
<pages>
<page pageid="736" ns="0" title="Albert Einstein">
<templates>
...
<tl ns="10" title="Template:Persondata"/>
...
</templates>
</page>
</pages>
</query>
<query-continue>
<templates tlcontinue="736|10|Reflist"/>
</query-continue>
</api>
Я подозреваю, что я не могу получить то, что мне нужно от API, но я надеюсь, что я ошибаюсь и что кто-то уже пробил путь по этому пути.
Ответы
Ответ 1
Вы можете использовать запрос embeddedin
для поиска всех страниц, содержащих шаблон:
curl 'http://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle=Template:Persondata&eilimit=5&format=xml'
Что вам нужно:
<?xml version="1.0"?>
<api>
<query>
<embeddedin>
<ei pageid="307" ns="0" title="Abraham Lincoln" />
<ei pageid="308" ns="0" title="Aristotle" />
<ei pageid="339" ns="0" title="Ayn Rand" />
<ei pageid="340" ns="0" title="Alain Connes" />
<ei pageid="344" ns="0" title="Allan Dwan" />
</embeddedin>
</query>
<query-continue>
<embeddedin eicontinue="10|Persondata|595" />
</query-continue>
</api>
Смотрите полные документы на mediawiki.org.
Изменить Используйте embeddedin
запрос вместо backlinks
(который не включает включения шаблонов)
Ответ 2
Использование embeddedin
не позволяет вам искать конкретного человека, строка поиска становится Template:Persondata
.
Лучший способ найти только людей из Википедии - использовать list=search
и отфильтровать поиск, используя AND"Born"AND"Occupation"
:
http://en.wikipedia.org/w/api.php?action=query&list=search&srsearch="Tom Cruise"AND"Born"AND"Occupation"&format=jsonfm&srprop=snippet&srlimit=50`
Помните, что в Википедии используется поисковая система, которая еще не позволяет нам искать только заголовок, он будет искать полный текст. Вы можете воспользоваться этим, чтобы получить более точные результаты.
Ответ 3
В принятом ответе объясняется, как перечислять страницы с использованием определенного шаблона, но если вам нужно искать страницы с помощью шаблона, вы можете с помощью ключевого слова hastemplate:
: https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=hastemplate:NPOV%20physics