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