ulist.c

ネットスケープから ftp サイトに入ると、ファイルの一覧が出てきます。この一覧を保存しておいて後でゆっくり見ようとしても、この一覧はネットスケープから保存できません。ftp サイトの一覧を HTML ファイルで保存するには、wget コマンドを使います。たとえばthemes.org にある Window Maker のテーマ一覧を見たい時は、

wget ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm
とします。すると、次のように /pub/mirrors/themes.org/wm のファイルリストを含んだ index.html が作成されます。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>/pub/mirrors/themes.org/wm (download.sourceforge.net:21 上)の見出し(index)です</title>
</head>
<body>
<h1>/pub/mirrors/themes.org/wm (download.sourceforge.net:21 上)の見出し(index)です</h1>
<hr>
<pre>
  2000 Mar 01        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/-0.60.0.tar.gz">-0.60.0.tar.gz</a>  (143,517 バイト)
  2000 Jan 19        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/0Gengar v1.0-0.51.2.tar.gz">0Gengar v1.0-0.51.2.tar.gz</a>  (42,952 バイト)
  2000 Jan 19        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/0Gengar v1.0-0.52.0.tar.gz">0Gengar v1.0-0.52.0.tar.gz</a>  (42,952 バイト)
  2000 Jan 19        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/0Gengar v1.0-0.53.0.tar.gz">0Gengar v1.0-0.53.0.tar.gz</a>  (42,952 バイト)
  2000 Jan 19        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/0Gengar v1.0-0.60.0.tar.gz">0Gengar v1.0-0.60.0.tar.gz</a>  (42,952 バイト)
  2000 Oct 10        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/10 Jahre-0.60.0.tar.gz">10 Jahre-0.60.0.tar.gz</a>  (394,998 バイト)
  1999 Nov 28        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/1136-0.52.tar.gz">1136-0.52.tar.gz</a>  (463,486 バイト)
  1999 Nov 28        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/12Monkeys-0.52.tar.gz">12Monkeys-0.52.tar.gz</a>  (57,316 バイト)
  2001 Feb 08 12:31  ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/17C3-0.60.0.tar.gz">17C3-0.60.0.tar.gz</a>  (29,919 バイト)
  1999 Nov 28        ファイル        <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/1900-0.52.tar.gz">1900-0.52.tar.gz</a>  (262,554 バイト)

以下略
ネットスケープで index.html を表示して、欲しいファイルがあれば、画面でクリックしてダウンロードすればいいのですが、wget を使って一括ダウンロードするために、URL 部分だけを取りだすプログラムを作りました。

URL は a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/1136-0.52.tar.gz" というふうにクォーテーションマーク(") の中に入っていますから、その中だけ取りだすプログラムを作ればいいので、簡単です。

while(fgets(buf, 400, inp)!=NULL){
    for(i=0; buf[i]!='"'; i++)
        ;
    for(i=i+1; buf[i]!='"'; i++){
        if(buf[i]==' ')
            fputs("%20", out);
        else
            putc(buf[i], out);
        }
    putc('\n', out);
    }
ここでは index.html を1行づつ読んでいって " までの文字は飛ばし、次に " が出てくるまでの文字をファイルに書き込んでいます。ただし、ファイル名にスペースが含まれている部分は %20 で置き換えて wget の誤動作を防いでいます。

以下は ulist.c の全体です。これを使って得たファイルを list.txt とするなら、wget -i list.txt とすることによって list.txt にあるファイルを片っ端からダウンロードすることができます。ただし、Window Maker の テーマは全部で 3300 個もありますから、まさか全部をダウンロードしようとはしないでくださいね。

/*

ulist.c


*/

#include <stdio.h>

main(int argc, char *argv[])
{
FILE *inp, *out;
char buf[400], inpfile[40], outfile[40];
int i, end;

if(argc<2){
    printf("Input filename.\n");
    exit(0);
    }

strcpy(inpfile, argv[1]);
sprintf(outfile, "%s.out", argv[1]);

if((inp=fopen(inpfile, "r"))==NULL){
    printf("\nCan't open <%s>\n", inpfile);
    exit(0);
    }
    
if((out=fopen(outfile, "w"))==NULL){
    printf("\nCan't creat <%s>\n", outfile);
    exit(0);
    }
    koprintf("\n<%s> was created.\n", outfile);
}

[目次にもどる]