如何使用 Wikipedia API 在页面列表中查找特定的人关于同名的人
How to use Wikipedia API to find specific person in the page lists about people with the same name
假设我有一份宇航员名单,我想使用维基百科显示他们的传记 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
如您所见,有多个 "Andrew Morgan",这就是问题所在。如果他是 NASA 宇航员,我该如何访问 "Andrew R. Morgan" 信息。
请注意,"Andrew Morgan" 只是一个示例,它可能 change.These 名称将从另一个 API 发送给我。所以我不能每次都手动更改他们的名字。
您可以通过以下方式访问“Andrew R. Morgan”的信息:
https://en.wikipedia.org/w/api.php?action=parse&prop=wikitext&page=Andrew%20R.%20Morgan
一个space表示为%20
消歧义页面都归类为 "All disambiguation pages",因此您可以检查该类别以查看您是否在消歧义页面上。
因此,您可以检查 "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
}
}
或者,您也可以使用以下查询检查 "Disambiguation" 属性:
当然,这些只是告诉你页面是否是消歧页面。最终,您需要知道自己在寻找什么。在"Andrew Morgan"的情况下,宇航员在"Andrew R. Morgan"之下。但有些文章可能会使用 "John Doe (Astronaut)" 或其他一些标题。这没有真正的标准化。
对于"astronaut"的例子,您或许可以在消歧页面搜索关键字"astronaut",然后转到那篇文章:
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
}
});
});
假设我有一份宇航员名单,我想使用维基百科显示他们的传记 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
如您所见,有多个 "Andrew Morgan",这就是问题所在。如果他是 NASA 宇航员,我该如何访问 "Andrew R. Morgan" 信息。
请注意,"Andrew Morgan" 只是一个示例,它可能 change.These 名称将从另一个 API 发送给我。所以我不能每次都手动更改他们的名字。
您可以通过以下方式访问“Andrew R. Morgan”的信息:
https://en.wikipedia.org/w/api.php?action=parse&prop=wikitext&page=Andrew%20R.%20Morgan
一个space表示为%20
消歧义页面都归类为 "All disambiguation pages",因此您可以检查该类别以查看您是否在消歧义页面上。
因此,您可以检查 "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
}
}
或者,您也可以使用以下查询检查 "Disambiguation" 属性:
当然,这些只是告诉你页面是否是消歧页面。最终,您需要知道自己在寻找什么。在"Andrew Morgan"的情况下,宇航员在"Andrew R. Morgan"之下。但有些文章可能会使用 "John Doe (Astronaut)" 或其他一些标题。这没有真正的标准化。
对于"astronaut"的例子,您或许可以在消歧页面搜索关键字"astronaut",然后转到那篇文章:
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
}
});
});