维基百科API - 抓住'背景信息'表?

时间:2011-05-06 09:25:37

标签: api mediawiki wikipedia

MediaWiki是否提供了返回“背景信息”表中信息的方法? (通常在文章页面右侧)例如我想从Radiohead获取Origin:

http://en.wikipedia.org/wiki/Radiohead

或者我需要解析html页面吗?

3 个答案:

答案 0 :(得分:4)

您可以使用revisions propertyrvgeneratexml参数为文章生成解析树。然后,您可以应用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] ) );
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

您提到的“背景信息表”在维基百科的说法中称为"Infobox",DBpedia允许对它们进行非常强大的查询。不幸的是,因为它很强大,所以学习起来并不容易,而且我大部分都忘记了一两年前我学到的东西。如果我能够再次学习它,我会在这里粘贴一个查询( - :

与此同时,here is DBpedia's idea介绍了如何使用它。

此前的SO问题有助于:Getting DBPedia Infobox categories

<强>更新

这里是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结果:组织“Abingdon,   英格兰牛津郡“@en