スクリーンセーバーを作ろう! | |
(2)インターネットからダウンロードする機能 | |
さて、どうやってインターネットからファイルをダウンロードするのでしょう? socket()を使ってhttpのプロトコルを自作して・・・ しません!(^^;;; 実はこれもAPIが用意されています。 ライブラリ wininet.lib を使います。 手順はこんな感じ。 (1)InternetOpen() でInternet APIを準備する。 (2)InternetOpenUrl() で接続するURLをOPENする。 (3)InternetReadFile() でファイルを読み込む。 う〜む。簡単ですねぇ〜(^^;;; じゃあ、実際にプログラムを見てみましょう! MakeWorkFile() は http://homepage1.nifty.com/mou-usshisshi/sub3.htm をダウンロードしてくるルーチンです。 | |
| |
hSession = InternetOpen( "Mou", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 ); でAPIの準備をしますが、 INTERNET_OPEN_TYPE_PRECONFIG はアクセスタイプを指定していて、 意味は 「プロキシまたはレジストリから直接コンフィギュレーションを取得する。」 です。 INTERNET_OPEN_TYPE_DIRECTなんてのもあるみたいです。 直接ダウンロードにいくのね。 でもまぁ一般的には上の方がいいんじゃない? それかソフト設定で変えられるようにするとかね。d(^^;;; hService = InternetOpenUrl( hSession, urlbuff, NULL, 0, 0, 0 ); ここでURLを開きます。 urlbuff は sprintf( urlbuff, "%s%s", BASEURL, SUB3 ) ; で作られてますね。 ちなみ #define BASEURL "http://homepage1.nifty.com/mou-usshisshi/" #define SUB3 "sub3.htm" と宣言されてますね。 なので urlbuffの中身は"http://homepage1.nifty.com/mou-usshisshi/sub3.htm"ということになります。 InternetReadFile()で 実際に"http://homepage1.nifty.com/mou-usshisshi/sub3.htm" の 内容をダウンロードしてきます。 fputc()で1バイトずつローカルファイルに書き込んでいます。 なぜに1バイトずつかというと・・・ if ( lpBuffer[i] == 0x0a ) { fputc( 0x0d, fp ) ; }ダウンロード後のこのif文は・・・(^^;;; 改行コードをWindows用に合わせています・・・ なので、1バイトずつ書き出す必要があったりします。 なぜに改行コードを変えているかというと 実はタグ解析する時に1行ずつ読み込む必要があったからです・・・ で、ダウンロードが終わったら InternetCloseHandle()で各ハンドルの後始末をしておしまいです。d(^^;;; う〜む。簡単ですねぇ〜 ←前へ →次へ |