2013-04-22 84 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