2011-05-06 40 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