2011-05-06 41 views

回答

4

您可以使用revisions property以及rvgeneratexml参数为文章生成解析树。然后,您可以应用XPath或遍历它并查找所需的信息。

下面是一个例子代码:

$page = 'Radiohead'; 
$api_call_url = 'http://en.wikipedia.org/w/api.php?action=query&titles=' . 
    urlencode($page) . '&prop=revisions&rvprop=content&rvgeneratexml=1&format=json'; 

你必须确定自己的API,看到更多的Meta Wiki

$user_agent = 'Your name <your email>'; 

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_USERAGENT => $user_agent, 
    CURLOPT_URL => $api_call_url, 
)); 
$response = json_decode(curl_exec($curl), true); 
curl_close($curl); 

foreach($response['query']['pages'] as $page) { 
    $parsetree = simplexml_load_string($page['revisions'][0]['parsetree']); 

在这里,我们使用XPath,以便找到Infobox musical artist的参数Origin和它的价值。有关语法等,请参见XPath specification。您可以遍历树并手动查找节点。随意调查分析树来更好地掌握它。

$infobox_origin = $parsetree->xpath('//template[contains(string(title),' . 
     '"Infobox musical artist")]/part[contains(string(name),"Origin")]/value'); 

    echo trim(strval($infobox_origin[0])); 
} 
+0

你提供的选项看起来很有趣,所以感谢Matej和hippietrai。我想起初我会尝试Xpath方法,尽管我可能需要在Java中实现它。再次感谢Matej和嬉皮士。 – 2011-05-09 11:12:59

+0

哦,我不知道你没有提到任何特定的语言,我很抱歉。 – 2011-05-09 13:46:42

1

MediaWiki安装在维基百科上没有提供获取这些信息的方法(有一些扩展名为Semantic MediaWiki,这些设计用于这类事情,但它们并未安装在维基百科上)。您可以解析输出的HTML或解析页面的wiki文本,或者在某些情况下(例如出生/死亡年份),您可以通过API查看页面的类别。

+0

这是不幸的:/这MediaWiki变得越来越令人失望:/但谢谢你的答案。 – 2011-05-06 11:06:15

1

这是一个陡峭的学习曲线,但DBpedia做你想做的。

您提到的“背景信息表”在维基百科中被称为"Infobox",DBpedia允许对它们进行非常强大的查询。不幸的是,因为它功能强大,所以学习起来并不容易,而且我几乎忘记了一两年前我所了解的情况。我会在这里粘贴查询但如果我设法重新学习它( - :

同时,在如何使用它的引进here is DBpedia's idea

此之前的SO问题将有所帮助:Getting DBPedia Infobox categories

UPDATE

这里确定是SPARQL查询:

SELECT ?org 
WHERE { 
    <http://dbpedia.org/resource/Radiohead> dbpprop:origin ?org 
} 

Here is a URL where you can see it working and play with it.

这里是页面上的输出:(您可以在各种格式获取输出太)

SPARQL结果:组织 “阿宾登, 英格兰牛津郡” @en