プログラミング C++ BuilderのTNMHTTPコンポーネントを活用

画像ファイルコレクション
プログラム

北山 洋幸


 インターネットでWebサイトを巡回していると,画像ファイルだけを取得したい場合があります.そこで,画像ファイルだけを収集するインターネット対応のプログラムを開発することにします.現実には,画像ファイルとは限らず,いろいろなファイルを取り出すことができます.しかし,一般的には画像ファイルの取り出しに使われることが多いことから,プログラム名も,このように名付けました.
 なお,サイトによっては著作権の問題を起こさないサイトも存在しますが,ほとんどのサイトのファイルには,著作権が存在します.勝手に配布したり,2次使用や,加工を行う場合,必ず原作者に了解の確認が必要です.著作権の侵害には,十分注意してください.

環境
Windows 9x,Windows NT(Intel)が動作するパソコン

コンパイラ
C++ Builder 4.0 Professonal Edition以上

● プログラムの使用環境
 HTTPサーバーが使える環境なら,どのような環境でもかまいません.たとえば,企業内のネットワークでもかまいませんし,SOHOのような小規模のLAN環境でもかまいません.もっとも一般的な形態は,家庭からダイヤルアップで,ネットサーフィンしている場合が考えられます.Webサイトの画像ファイルを一括してダウンロードすることができます.

● 実行画面の構成
 図2には,プログラムの実行画面(メニュー)の各部の役割や機能を説明します.
 さて,C++ Builderはパネルを使うと,フォームの配置が,簡単に,かつきれいに配置できます.本プログラムでも,パネルコンポーネントが隠れた力持ちになっています.
 コンポーネントと張り付けの順番を図3に示します.

Progg3.jpg (52873 バイト)

プログラムの説明

 画像ファイルはHTTPプロトコルを使って取り出します.HTTPプロトコルを使うには,いろいろな方法がありますが,ここでは,C++ Builderが標準で用意する,TNMHTTPコンポーネントを利用します.TNMHTTPコンポーネントは,WWW を経由するHTTP転送を,制御するために使用します.TNMHTTPコンポーネントは,HTTP 1.1に準拠しています(図4).

<図4>フォームの様子
Progg4.jpg (36113 バイト)

 「読込」ボタンを押したときに,制御が渡るプログラムをリスト1に示します.
 まず,"?"の位置と桁数を調べます."?"が見つかったら,AnsiStringのDeleteメソッドで,"?"を削除すると同時に,"?"の桁数と,開始位置を覚えておきます.
 そして,初期値から終わりの値までforで"?"の部分を,AnsiStringのInsertメソッドで,補いながらループします.実際にHTTPプロトコルで,ファイルを読む込むのは,getPhotoメソッドです.
 ここで使用したメソッドを表1に示します.

<表1>使用したメソッド
Progt1.jpg (33193 バイト)

 getPhotoメソッドの部分をリスト2に示します.
 このメソッドは,TNMHTTPコンポーネントを使ってファイルを読み込みます.TNMHTTPコンポーネントは,WWWを経由するHTTP転送を制御するために使用します.
 TimeOutプロパティは,例外を発生させて現在の処理を中止するまでの,応答を待つ時間(ms)を指定します.TimeOutプロパティが0の場合,例外は発生せず,処理がタイムアウトになることはありません.通常は,TimeOutプロパティを0に設定してはなりません.0に設定すると,アプリケーションが待ち状態から抜け出せなくなる場合があります.ここでは,50000ms=約14分を指定しています.長いように感じますが,あまり短いとWebサーバーの負荷が重いときにファイルを取り損ないますので,十分長い値にしました.
 InputFileModeプロパティは,着信ドキュメントおよびヘッダーの処理方法を指定します.InputFileModeプロパティがtrueの場合,ドキュメントおよびヘッダーは,Headerプロパティ,および Bodyプロパティで指定されたファイルに保存されます.InputFileModeプロパティがfalseの場合,ドキュメントは,Bodyプロパティ自体に保存されます.また,ヘッダーはHeaderプロパティに保存されます.ここでは,trueを指定し,Bodyプロパティに,格納先のファイル名を指定します.
 OutputFileModeプロパティは,Post,Put,およびTraceメソッドで使用されたときの,送信データの処理方法を示します.詳しくはC++ Builderのヘルプを参照してください.

以下略.


copyright 1999 北山 洋幸