MediaWiki提供了一种方式来返回'背景信息'表中的信息吗? (通常是正确的文章页面)比如我想从Radiohead的抢地:维基百科API - 抢'背景信息'表?
http://en.wikipedia.org/wiki/Radiohead
或者我需要解析HTML页面?
MediaWiki提供了一种方式来返回'背景信息'表中的信息吗? (通常是正确的文章页面)比如我想从Radiohead的抢地:维基百科API - 抢'背景信息'表?
http://en.wikipedia.org/wiki/Radiohead
或者我需要解析HTML页面?
您可以使用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]));
}
MediaWiki安装在维基百科上没有提供获取这些信息的方法(有一些扩展名为Semantic MediaWiki,这些设计用于这类事情,但它们并未安装在维基百科上)。您可以解析输出的HTML或解析页面的wiki文本,或者在某些情况下(例如出生/死亡年份),您可以通过API查看页面的类别。
这是不幸的:/这MediaWiki变得越来越令人失望:/但谢谢你的答案。 – 2011-05-06 11:06:15
这是一个陡峭的学习曲线,但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
你提供的选项看起来很有趣,所以感谢Matej和hippietrai。我想起初我会尝试Xpath方法,尽管我可能需要在Java中实现它。再次感谢Matej和嬉皮士。 – 2011-05-09 11:12:59
哦,我不知道你没有提到任何特定的语言,我很抱歉。 – 2011-05-09 13:46:42