Batch-Fetch-Recursive 類似ツールの機能比較 ## Last modified: Sun Nov 3 14:25:08 1996 JST ## 伊藤一光 kaz@maczuka.hitachi.ibaraki.jp Batch-Fetch-Recursive と同じような機能を持つツールとしていろいろな ものが知られています. ここでは, それらのツールを比較してみます. 略号 ツール バージョン 入手先 [B] Batch-Fetch-Recursive 1.60 http://www.jsdi.or.jp/~maczuka/programs/ [L] lwp-rget (libwww-perl 5.02 に含まれる) CPAN (日本では ftp://ftp.lab.kdd.co.jp/lang/perl/CPAN/) [H] httpdown 2.2 http://mechatro1.mech.tohoku.ac.jp/~kumagai/bins/kuma/kumabins.html [P] potato 1.5 http://www.on.rim.or.jp/~ryo2/fsw.html [W] webcopy ftp://ftp.inf.utfsm.cl/pub/utfsm/perl/webcopy.tgz FreeBSD の場合は, このほかに http://www.jp.FreeBSD.org/www.freebsd.org/ports/www.html または http://www.freebsd.org/ports/www.html から port を入手するとよい. 私は今のところ [B] を常用しています. [L], [P], [W] は私の環境でも動きます ので試用してみました. [H] は私の環境ではコンパイルできませんでしたので, ドキュメントに基づいて比較の対象とします. 試用といっても使い込んでいる わけではなく, ドキュメントの読み方も不十分なので, 以下の比較表には誤りが 含まれている可能性があります. [H], [P] については, 作者のくまがいさん, 荒井さんに最初の原稿をお読み いただき, 訂正すべきところは訂正しましたが, その後追加した記述もあります. 誤りの指摘や御意見・御質問は kaz@maczuka.hitachi.ibaraki.jp まで お寄せください. 1. 言語 [B]: Perl5 [L]: Perl5 [H]: C++ [P]: Perl4/5 [W]: Perl4/5 2. http の実装 [B]: 外部プログラム (lynx, fetch など) にお任せ [L]: libwww-perl で GET [H]: C++ のコーディングで GET [P]: perl のコーディングで GET [W]: perl のコーディングで GET と POST を使う. 3. 取得したファイルの格納方式 protocol://server/directory/ という URL を起点としてファイルの 取得を始めた場合, protocol://server/directory/subdir/file という URL から取得したファイルをどう格納するか? [B]: protocol/server/directory/subdir/file に格納する. [L]: カレントディレクトリの file に格納する. file が既存であれば, 001, 002, ... という番号がファイル名に付加される. [H]: server/directory/subdir/file に格納する. [P]: subdir/file に格納する. [W]: subdir/file に格納する. -d オプションで directory/subdir/file に することもできる. 4. 取得した HTML ファイルの中のリンク情報をローカルな参照が正しく できるよう修正するか [B]: 修正するオプションがある. [L]: 修正する. [H]: 修正しない. [P]: 修正しない. [W]: 修正しない. 5. ディレクトリの参照結果を何というファイルに格納するか [B]: index.html 固定 [L]: index.html 固定 [H]: _default 固定 [P]: デフォルトで index.html, オプションで変更可能 [W]: デフォルトで index.html, オプションで変更可能 6. ファイルを取得する範囲 protocol://server/directory/ という URL を起点としてファイルの 取得を始めた場合, 取得した HTML ファイルの中で参照されている URL のうち, どの範囲までを取得するか? [B]: デフォルトでは protocol://server/directory/ の下のファイルのみ. $prefix 変数で指定された文字列で始まる URL を取得の対象にする ことができる. [L]: デフォルトでは protocol://server/directory/ の下のファイルのみ. --prefix で指定された文字列で始まる URL を取得の対象にする ことができる. [H]: デフォルトでは、href="file" のように, http://server が頭につかない ローカルなリンクのみをたどる. a オプションで明示的に許可パターンを 指定することで, サーバー間リンクをたどることも可能. a オプションは 複数指定できる. [P]: protocol://server/directory/ の下のファイルのみ. [W]: デフォルトでは protocol://server/directory/ の下のファイルのみ. 別のパス, 絶対パス, full URL参照に関しては, オプションで 取得是非を決められる. ただし同一サーバ同一ポートからの取得に 限られる. 7. 取得対象ファイルの制限 [B]: Ver 1.5x までは -i オプションでイメージファイルの取得を抑止できる 程度であったが, Ver 1.60 からは, 取捨選択ルールを perl で記述 できるようにした. [L]: 特に機能なし. [H]: 定義ファイルの r オプションで取得不要の URL を指定. 画像ファイルなどを正常に取得できた場合は, プログラムが 自動的に r オプションを定義ファイルに追加. [P]: デフォルトでは次のファイルは除かれる. オプションで含める ことができる. ・アーカイブ, 圧縮ファイル ・CGI プログラムの出力 ・イメージファイル [W]: デフォルトでは HTMLのみ。 image, CGI出力, imagemap 取得については, オプションで決められる. MS-IE, Netscapeの拡張タグに対応 (FRAME,AREA,BGSOUND等). 8. 入手対象ファイルが既存の場合の処置 [B]: Ver 1.5x までは何も考えずに再度取得していたが, Ver 1.60 からは [P] の -g 4 相当のことはオプションでできるようにした. しかし, http を外部プログラムに一任しているために, [P] の -g 1 または -g 2 に相当することはできない. [L]: 何も考えずに再度取得すると思われる. [H]: 定義ファイルに r オプションがあれば取得しない. [P]: -g オプションで細かく制御できるローカルファイルキャッシュ機能を 持っている(これは便利そうだ) . ローカルファイルキャッシュ機能とは (potato.txt より引用) --- * --- * --- セーブすべきファイルが存在する場合、WWWサーバからの読み込みを 中止し、HTMLファイルの場合はローカルファイルを参照、データファ イルの場合はそのまま読み飛ばします。(デフォルト -g 1) N: 0=ローカルファイルキャッシュを行なわない 1=WWWサーバ上の最終変更時刻とローカルファイルのタイムスタン プ(modified time)を比較し、サーバ上のファイルが新しい場合 のみファイルを更新する。 2=WWWサーバ上のファイルとローカルファイルのサイズを比較し、 異なる場合のみファイルを更新する。 4=同名のローカルファイルがあれば、変更時刻、サイズにかかわ らず、読み込みを中止しローカルファイルキャッシュを行なう。 --- * --- * --- [W]: デフォルトでは, ローカルファイルの情報をサーバに送り, 最終 更新日がサーバ側で新しくなっていれば取得する. -g オプションで ローカルファイルを無視して常に最新のものを取得することができる. 9. サーバの負荷に対する配慮 [B]: サーバの負荷には何の配慮もしないばかりか, GET するプロセスを 複数同時並行処理させることのできる貪欲なプログラム. [L]: --sleep オプションで, ファイル転送の間に休みを入れることができる. [H]: ソースを見ると, ファイル転送の間に sleep(1) が入っていたが, コメントアウトされている. [P]: 特になし. [W]: -t でファイル転送の間に入れる休みの時間を指定する. デフォルトは 15 秒. [B] は, 細い回線を目一杯使う目的で, 上のような仕様としているが, よく考えると, 同一ホストに対する要求を集中的に出すよりも, ひとつの ホストへの要求は 1回 1件に絞りながら, 複数のホストへの要求を並行 処理したほうが有効な場合が多いような気がしてきた. 以上