2013-04-22 85 views
1

維基百科上有很多不是文章的頁面,例如談話頁面等。如何通過URL區分他們與文章?如何通過URL區分維基百科文章?

+0

你到目前爲止嘗試過什麼?談話頁面在標題前面有「Talk:」,在頁面標題和URL中都有。 – 2013-04-22 22:18:13

+0

是的,但不僅有談話頁面。我試着只使用alpanumeric網址,但這顯然是不正確的。 – lizarisk 2013-04-22 22:20:29

回答

1

您可以通過使用其API使用以下查詢獲取百科命名空間及其別名的列表:

http://en.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=namespaces

然後,如果頁面標題的第一個冒號前的部分匹配任何的已知的命名空間,它不是一篇文章;否則,它是。

+0

上面這個名稱空間的列表是不夠的,因爲MediaWiki也使用某些東西:interwiki鏈接的東西約定。 http://en.wikipedia.org/wiki/Interwiki_links – jpatokal 2013-04-23 05:18:36

+0

@jpatokal該問題詢問關於URL。儘管像http://en.wikipedia.org/wiki/cs:Main_Page這樣的URL確實有效,但我認爲它們很少被使用。 – svick 2013-04-23 08:49:01

2

簡短的回答是,你不能只有正則表達式。

較長的答案是MediaWiki文章被命名空間分割,而命名空間反過來使用冒號作爲標記,如「Talk:Foo」中所示。文章沒有標題中的冒號因此肯定在主(=內容)名稱空間中。問題是,帶有冒號的文章可能在另一個命名空間content articles that happen to contain a colon,並且由於WP的命名空間列表很長並且不斷變化,所以您不能(或者至少不應該)在正則表達式中對此列表進行硬編碼。

因此,正確的答案是使用MediaWiki API來迭代/搜索主名稱空間中的文章。

+0

這個冒號的雙重含義正是讓我卡住的東西! – lizarisk 2013-04-22 22:25:06

+0

您不應該對命名空間列表進行硬編碼,但是如何使用API​​獲取最新列表(請參閱我的答案)? – svick 2013-04-22 22:49:11

+0

爲什麼不直接使用API​​來獲得所有保證來自主命名空間的文章的預過濾列表? http://www.mediawiki.org/wiki/API:Query#Using_list.3Dallpages_as_generator – jpatokal 2013-04-23 05:20:11