Как использовать API Википедии для поиска конкретного человека в списках страниц о людях с таким же именем - PullRequest
3 голосов
/ 23 сентября 2019

Допустим, у меня есть список астронавтов, и я хочу отобразить их биографии с помощью API Википедии.
Пока я пробовал это:

https://en.wikipedia.org/w/api.php?action=parse&prop=wikitext&page=Nick%20Hague

Работает, как ожидалось.Но взгляните на этот пример:

https://en.wikipedia.org/w/api.php?action=parse&prop=wikitext&page=Andrew%20Morgan

Как видите, существует более одного "Эндрю Моргана", и в этом проблема.Как мне получить доступ к информации "Эндрю Р. Морган", на случай, если он астронавт НАСА.
Обратите внимание, что "Эндрю Морган" является лишь примером и может измениться. Эти имена будут отправлены мне из другого API.поэтому я не могу каждый раз менять их имя вручную.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Все страницы неоднозначности классифицированы как «Все страницы неоднозначности», поэтому вы можете проверить, находится ли эта категория на странице неоднозначности.

Таким образом, вы можете проверить, существует ли «All_disambiguation_pages» каккатегория, чтобы определить, если вы находитесь на странице неоднозначности.Используя запрос https://en.wikipedia.org/w/api.php?action=parse&prop=categories&page=Andrew%20Morgan:

for (category of r.parse.categories) {
    if (Object.values(category).includes("All_disambiguation_pages")) {
        // we know it's a disambiguation page
    }
}

В качестве альтернативы, вы также можете проверить свойство «Устранение неоднозначности», используя запрос:

https://en.wikipedia.org/w/api.php?action=query&prop=pageprops&ppprop=disambiguation&redirects&format=xml&titles=Andrew%20Morgan

Конечно,они только сообщают вам, является ли страница страницей для устранения неоднозначности.В конечном итоге вам нужно знать, что вы ищете.В случае с «Эндрю Морганом» космонавт находится под «Эндрю Р. Морганом».Но некоторые статьи могут использовать «Джон Доу (астронавт)» или другое название.Для этого нет никакой реальной стандартизации.

Например, для примера "астронавт", вы можете найти на странице неоднозначности ключевое слово "астронавт", а затем перейти к этой статье:

fetch('https://en.wikipedia.org/w/api.php?action=opensearch&search=andrew%20morgan&format=json&origin=*')
  .then(function(response) {
    response.json().then(function(data) {
      // data[1] is the array of titles, [2] is the array of descriptions, [3] is the array of links
      let articleUrl = data[3][data[2].findIndex(element => element.includes("astronaut"))];
      if (articleUrl !== -1) { // -1 would be not found
        console.log(articleUrl); //the url
      }
    });
  });
0 голосов
/ 23 сентября 2019

Вы можете получить доступ к информации " Эндрю Р. Моргана " следующим образом:

https://en.wikipedia.org/w/api.php?action=parse&prop=wikitext&page=Andrew%20R.%20Morgan

Пробел представлен %20

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...