2011-10-08 156 views
0

我想在bash中按順序在同一頁上提交兩個表單。 http://en.wikipedia.org/w/index.php?title=Special:Export包含兩種形式:一種填充給定Wikipedia類別的頁面列表,另一種填充該列表的XML數據。bash/curl:兩步式web表單提交

使用在bash捲曲,我可以獨立提交的第一種形式,返回與填充頁面場HTML文件(雖然我不能使用它,因爲它是當地的,而不是維基百科的服務器上):

curl -d "addcat=1&catname=Works_by_Leonardo_da_Vinci&curonly=1&action=submit" http://en.wikipedia.org/w/index.php?title=Special:Export -o "somefile.html" 

而且我可以提交第二形式,而指定一個頁面,以獲取XML:

curl -d "pages=Mona_Lisa&curonly=1&action=submit" http://en.wikipedia.org/w/index.php?title=Special:Export -o "output.xml" 

...但我無法弄清楚如何將兩個步驟合併,或管道一進其他方面,返回一個類別中的所有頁面的XML,就像我在執行兩個步驟manu時得到的那樣盟友。 http://www.mediawiki.org/wiki/Manual:Parameters_to_Special:Export似乎表明這是可能的;有任何想法嗎?我不必使用捲曲或bash。

回答

1

Special:Export並不意味着完全自動檢索The API是例如,要獲得所有頁面的當前文本中分類:可以通過達芬奇在XML工程格式,你可以使用這個網址:

http://en.wikipedia.org/w/api.php?format=xml&action=query&generator=categorymembers&gcmtitle=Category:Works_by_Leonardo_da_Vinci&prop=revisions&rvprop=content&gcmlimit=max

這不會返回子類的網頁,並僅限於第500頁(雖然這不是在這種情況下,問題並沒有訪問的方式休息)。

+0

美麗!正是我需要的。 – meetar

0

假設你可以解析從第一個HTML文件的輸出,並生成的頁面(例如

Mona Lisa 
The Last Supper 

列表可以通過管道輸出到使用read一個bash循環作爲一個簡單的例子:

$ seq 1 5 | while read x; do echo "I read $x"; done 
I read 1 
I read 2 
I read 3 
I read 4 
I read 5 
+0

有趣,謝謝! – meetar