0

同じページに2つのフォームをbashのcurlで順番に送信したいと思います。http://en.wikipedia.org/w/index.php?title=Special:Exportには、2つのフォームが含まれています。1つはウィキペディアのカテゴリが指定されたページのリストに入力するためのもので、もう1つはそのリストのXMLデータをフェッチするためのものです。

bashでcurlを使用すると、最初のフォームを個別に送信して、ページフィールドが入力された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"

そして、ページを指定しながら2番目のフォームを送信して、XMLを取得できます。

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

...しかし、2つのステップを手動で実行した場合のように、2つのステップを組み合わせる方法、または一方を他方にパイプして、カテゴリ内のすべてのページのXMLを返す方法を理解できません。http://www.mediawiki.org/wiki/Manual:Parameters_to_Special:Exportは、これが可能であることを示唆しているようです。何か案は?curlやbashを使用する必要はありません。

4

2 に答える 2

1

Special:Export完全自動検索を目的としたものではありません。APIはです。たとえば、Category:Works by Leonardo da Vinciのすべてのページの現在のテキストをXML形式で取得するには、次のURLを使用できます。

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ページにのみ制限されます(ただし、この場合は問題なく、残りのページにアクセスする方法があります)。

于 2011-10-09T00:09:09.530 に答える
0

最初のhtmlファイルからの出力を解析して、ページのリストを生成できると仮定します(例:

Mona Lisa
The Last Supper

を使用して、出力をbashループにパイプできますread。簡単な例として:

$ 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
于 2011-10-09T00:09:04.320 に答える