2010-12-08 56 views
1

我對維基百科API非常陌生,但我最近遇到了一個建立在維基媒體之上的中文網站,而我想用它來幫助我將各種頁面解析爲可用的格式,以便最終用XPATH進行處理。閱讀了一下後,我發現action = parse參數就是我正在尋找的東西。例如,下面的查詢負載毫無困難:(維基百科)MediaWiki API action = parse failed with「頁面參數不能與文本和標題參數一起使用」

api.php?action=parse&page=Main_Page&format=xml 

它提出的文本,其次是語言鏈接,然後鏈接。我對鏈接部分特別感興趣,因爲我將使用這些數據來抓取這個基於維基百科的網站來創建頁面層次結構。

試圖複製這些結果,我上漲查詢到我的網站頁面的末尾:

http://www.youbianku.com/api.php?action=parse&page=%E5%8C%97%E4%BA%AC&format=xml 

%E5%8C%97%E4%BA%AC解析到北京中國文字,順便說一句。無論如何,我得到以下結果:

<api> 
<error code="params" info="The page parameter cannot be used together with the text and title parameters"/> 
</api> 

我所做的是複製維基百科查詢和替換頁面的名稱。我不清楚爲什麼這突然出現了錯誤。有運行此頁面上的其他API查詢,如下所示沒有問題:

api.php?action=query&format=xml&titles=%E5%8C%97%E4%BA%AC&rvprop=content&prop=revisions 

最近我看到,這可能是由於htaccess的重寫規則添加默認標題。鑑於我是本網站的客戶,有沒有辦法繞過這些?

回答

3

如您所示,此問題可能是由URL重寫規則損壞引起的。

可以解決此問題通過使用text參數和transcluding你想要的頁面,就像這樣:

/api.php?action=parse&text={{:Page_title}} 

(領導:,以防止有Template:被預先考慮到系統默認的頁面標題。 )

Trying this with the example page in your question返回一些—可能無關—原因PHP錯誤,但it works fine with other pages on that wiki.

這個技巧的一個缺點是它繞過了解析器緩存,使它比使用page更慢,更耗費資源。另外,依賴頁面標題的頁面上使用的任何variables都可能會產生意想不到的結果,並且任何取決於頁面或修訂版元數據的變量都可能完全失敗。幸運的是,這些變量在實踐中並不經常使用。


另一個,甚至更好的解決方案可能是簡單地使用

/index.php?action=render&title=Page_title 

將返回頁面解析HTML源代碼沒有任何周圍的皮膚,like this。這種方法並不像API那樣通用,但它沒有上述問題。

相關問題