2017-04-03 51 views
0

我想找出一種方法來使用mediawiki API在維基百科列表中查找相關頁面。例如,這裏是1901年所有的戰鬥名單 - 2000:Wikipedia API - 在列表中搜索而不是類別(JSON,Javascript)

https://en.wikipedia.org/wiki/List_of_battles_1901%E2%80%932000

我想這樣做的是發現,在他們的描述字符串「4月3日」出現的所有條目。然後獲取這些JSON對象,然後解析到我的HTML中。我整個下午都在努力研究這個問題,但我找不到一種方法來做到這一點。我也沒有很好的掌握維基百科的API,所以任何幫助將不勝感激。

我已經得到了最好的是這樣的查詢:

https://en.wikipedia.org/w/api.php?action=query&titles=List_of_battles_1901%E2%80%932000&prop=links

但是,這只是給了我一堆垃圾鏈接。

+1

如果你打開該鏈接(你的問題中的「迄今爲止最好的」),該頁甚至建議在URL中添加'&format = json',即https://en.wikipedia.org/w/api。 php?action = query&titles = List_of_battles_1901%E2%80%932000&prop = links&format = json - 這是否有幫助 –

+0

不,json格式不是我的問題。問題在於只選擇4月3日發生的戰鬥。這是我試圖做的一個愛好項目。我想允許用戶訪問一個網站,並在歷史當天出現隨機的歷史性戰鬥。但我找不到使用wikipedia API從列表中選擇頁面的方法。有很多關於如何查詢類別的文檔,但是這對我這些列表頁面沒有幫助。我想這可能只是簡單的不可能使用維基百科API,至少不可行。 –

回答

0

維基百科及其API不太適合這樣的語義搜索。相反,使用維基百科的結構化數據的姊妹站點Wikidata可能會有更好的運氣。

Wikidata有一個SPARQL查詢服務,您可以使用它來查找所需的信息。 (這些例子有諸如「根據女性市長的城市數量排序的國家列表」和「1921年或以後出生的大多數附加鏈接並且沒有圖像的女性」等查詢。)您可以查詢的部分數據是鏈接到相關的維基百科文章,所以你可以過濾只有戰鬥有維基百科文章的搜索。欲瞭解更多詳情,請看Wikidata's SPARQL information page

如果您對維基百科的「戰列表1901-2000」頁面上列出的結果文章很重要,那麼您可以交叉檢查從SPARQL查詢服務獲得的列表與維基百科的數據庫。您可以使用API​​來完成此操作,但最簡單的方法是使用Quarry直接使用SQL查詢副本數據庫(這次是MySQL,而不是SPARQL)。