2014-04-05 75 views
0

我正試圖解析維基上的頁面以獲取頁面上的Infobox Book模板的其他信息。問題是我只能獲取模板的源代碼,而不是頁面上已轉換的模板。從MediaWiki API獲取頁面中的模板調用輸出

我使用以下網址作爲基礎: http://starwars.wikia.com/api.php?format=xml&action=expandtemplates&text={{Infobox%20Book}}&generatexml=1

的文檔並沒有真正告訴我怎麼把它指向一個特定的頁面並解析頁面的轉化模板。這甚至是可能的,還是我需要自己解析它?

+1

我不明白,你試圖做什麼?上面給出的API調用對我來說工作得很好。你想解析一個完整的頁面,而不是一段維基文本?然後,您應該使用'/index.php?action=remote&title = Page_title'(或者,如果您確實需要使用API​​入口點,請使用變通辦法'/api.php?action=parse&text={{NS:頁}})' – leo

+0

我想要一個完全填充的模板。這包括相關頁面的數據。以上僅給出了模板的原始文本,而不是包含源數據的渲染模板。在目標上使用這個URL:'http://starwars.wikia.com/wiki/Lost_Tribe_of_the_Sith:_Skyborn'我期望下面的api調用給我提供所有書籍信息的模板。 'http://starwars.wikia.com/api.php?format=xml&action=expandtemplates&text= {{信息框%20Book}}&generatexml = 1&頁= Lost_Tribe_of_the_Sith:_Skyborn'。這只是給出了原始模板文本。 – Justin

+2

我想你誤解了MediaWiki模板如何在這裏工作。在這種情況下,添加'&page = Lost_Tribe_of_the_Sith:_Skyborn'並沒有什麼區別,因爲模板{{Infobox Book}}不會根據它所處的頁面而改變。它只隨着參數的變化而變化,例如['{{Infobox Book |書名= Sith的Lost部落:Skyborn}}'](http://starwars.wikia.com/api.php?format=xml&action=expandtemplates&text= {{Infobox%20Book | book% 20name =丟失%20Tribe%20of%第二十條%20Sith:%20Skyborn}}&generatexml = 1&頁= Lost_Tribe_of_the_Sith:_Skyborn)。 – leo

回答

1

要使用給定頁面的參數展開模板,您必須提供這些參數。 API無法知道模板在不同頁面中的使用方式(甚至可以使用兩次!)。

這工作:

action=expandtemplates&text={{Infobox Book|book name=Lost Tribe of the Sith: Skyborn}}

你會的,當然要保持將所有要分析的參數(在有你的例子是14)。

如果您的模板根據它們是哪個頁面(這裏不是這種情況)而自動更改,例如,通過利用魔法的話,如{{PAGENAME}},您可以添加&page=Lost_Tribe_of_the_Sith:_Skyborn到您的API調用,設置上下文的模板應在擴大

如果你不知道的參數給出,您可以:

  1. index.php?action=render&title=Lost_Tribe_of_the_Sith:_Skyborn渲染整個頁面,並解析返回的HTML,開拓出實際的信息框

  2. 取(action=query&prop=revisions)和解析wikicode得到的參數模板,並將其提供給expandtemplates call

  3. 開始使用像Semantic MediaWiki的擴展,它允許你把你的維基更像是一個數據庫

1和2可以去錯在任意數量的方式,當然,與維基你根據定義,沒有辦法知道內容始終以一致的方式輸入。

+0

如果可以的話,我會給你更多的讚揚。修訂API呼叫給了我正是我需要的,謝謝! – Justin

+0

@Justin很高興工作! – leo

相關問題