プログラミング C++
BuilderのTNMHTTPコンポーネントを活用 画像ファイルコレクション 北山 洋幸 インターネットでWebサイトを巡回していると,画像ファイルだけを取得したい場合があります.そこで,画像ファイルだけを収集するインターネット対応のプログラムを開発することにします.現実には,画像ファイルとは限らず,いろいろなファイルを取り出すことができます.しかし,一般的には画像ファイルの取り出しに使われることが多いことから,プログラム名も,このように名付けました.
|
● プログラムの使用環境
HTTPサーバーが使える環境なら,どのような環境でもかまいません.たとえば,企業内のネットワークでもかまいませんし,SOHOのような小規模のLAN環境でもかまいません.もっとも一般的な形態は,家庭からダイヤルアップで,ネットサーフィンしている場合が考えられます.Webサイトの画像ファイルを一括してダウンロードすることができます.
● 実行画面の構成
図2には,プログラムの実行画面(メニュー)の各部の役割や機能を説明します.
さて,C++ Builderはパネルを使うと,フォームの配置が,簡単に,かつきれいに配置できます.本プログラムでも,パネルコンポーネントが隠れた力持ちになっています.
コンポーネントと張り付けの順番を図3に示します.
プログラムの説明
画像ファイルはHTTPプロトコルを使って取り出します.HTTPプロトコルを使うには,いろいろな方法がありますが,ここでは,C++ Builderが標準で用意する,TNMHTTPコンポーネントを利用します.TNMHTTPコンポーネントは,WWW を経由するHTTP転送を,制御するために使用します.TNMHTTPコンポーネントは,HTTP 1.1に準拠しています(図4).
<図4>フォームの様子
「読込」ボタンを押したときに,制御が渡るプログラムをリスト1に示します.
まず,"?"の位置と桁数を調べます."?"が見つかったら,AnsiStringのDeleteメソッドで,"?"を削除すると同時に,"?"の桁数と,開始位置を覚えておきます.
そして,初期値から終わりの値までforで"?"の部分を,AnsiStringのInsertメソッドで,補いながらループします.実際にHTTPプロトコルで,ファイルを読む込むのは,getPhotoメソッドです.
ここで使用したメソッドを表1に示します.
<表1>使用したメソッド
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 北山 洋幸