ネットからファイル(GIFやHTML等)を取得したいのですが

解決


マツ  2004-12-02 17:59:55  No: 12004

はじめまして。
過去ログを検索しても見つける事が出来なかったので投稿させて頂きます。

ネットからファイル(GIFやHTML等)を取得したいのですが
どのコンポーネントを使うのが一番簡単でしょうか?

単純にWEBサーバー上のファイルをローカルに落としたいだけなのですが…。

環境は Delphi6 Professinal です。

よろしくお願いします。


ふじっこ  2004-12-03 00:05:20  No: 12005

単純にファイルをダウンロードしてくるだけなら
InternetOpen、InternetOpenUrl、InternetReadFile関数つかって
実現できそうですが
htmlファイルの内容をみてGIF画像やら他ファイルをダウンロード
するには、もうひと工夫いりそうですね

InternetReadFileでファイルダウンロードして
ローカルドライブに保管するときは、TFileStreamで保存したほうがよさそうです。


TtPIPICH  2004-12-03 01:18:21  No: 12006

>どのコンポーネントを使うのが一番簡単でしょうか?
ということなら Indy があります。


ふじっこ  2004-12-03 10:04:58  No: 12007

>どのコンポーネントを使うのが一番簡単でしょうか?
おっと、失礼しました。
私の発言は、参考までにしておいてください^^;


マツ  2004-12-03 17:18:00  No: 12008

ふじっこさん、TtPIPICHさん、
早速のご返信、ありがとうございます!

とりあえず、目的達成の為にInternetReadFile関数を使用することにしました。

Indyはこれから(今から)勉強します。

どうもありがとうございました!!!


りおりお  2004-12-03 19:07:36  No: 12009

ファイル決めうちDLなら URLMon ユニットに簡単に使える関数があるよ。

http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
http://lupin.client.jp/delphi/#44

とか。ググルといっぱい例がある。


マツ  2004-12-04 00:49:17  No: 12010

りおりおさん、ありがとうございます。

早速教えて頂いたホームページに行ってみます!


Fusa  2004-12-04 06:58:15  No: 12011

てっきり、こうやるものだと思っていたけど
いろいろ方法があるんですね。

var
  SaveFileName, SaveURL: String;
  DownLoadURL1: TDownLoadURL;
begin

  DownLoadURL1 := TDownLoadURL.Create(Self); try
  DownLoadURL1.URL := SaveURL;
  DownLoadURL1.Filename := SaveFileName;
  DownLoadURL1.ExecuteTarget(nil);
  finally DownLoadURL1.Free; end;
end;

ふじっこさんの
> 単純にファイルをダウンロードしてくるだけなら
> InternetOpen、InternetOpenUrl、InternetReadFile関数つかって
> 実現できそうですが
というのは、どうやって実装するのでしょうか?


りおりお  2004-12-04 07:45:57  No: 12012

TDownLoadURL ってクラスがあるんですか?


りおりお  2004-12-04 07:55:20  No: 12013

> InternetOpen、InternetOpenUrl、InternetReadFile関数つかって

WinInet.pas にあるやつ。普段はわたしもこれを使っています。

function GetUrlFile(const URL:string; Stream:TStream):Boolean;
var
  hOpen,hURL:HINTERNET;
  pBuf:pointer;
  ReadBytes:DWORD;
begin
  result := false;

  hOpen := InternetOpen('Arara-Agent',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
  if not Assigned(hOpen) then exit;

  hURL := InternetOpenURL(hOpen,PChar(URL),nil,0,0,0);
  if not Assigned(hURL) then begin
    InternetCloseHandle(hOpen);
    exit;
  end;

  GetMem(pBuf,1024);
  Stream.Position := 0;
  try
    repeat
      InternetReadFile(hURL,pBuf,1024,ReadBytes);
      Stream.Write(pBuf^,ReadBytes);
    until ReadBytes = 0;
  finally
    FreeMem(pBuf);
    InternetCloseHandle(hURL);
    InternetCloseHandle(hOpen);
  end;
  
  if Stream.Size = 0 then exit;
  Stream.Position := 0;
  result := true;
end;

普通は TMemoryStream で受け取っています。画像なら TBitmap や TJpegImage
TGifImage の LoadFromStream() でセット出来ますし、HTML ドキュメントなら
TWebBrowser に直接セットしたり、Memo1 に表示したりできます。もちろん、
ファイルにおとすのも簡単。上記のコードでは、不正な URL を入力したときの
判断が出来ないので改良の余地があります。Indy などのライブラリは、苦労して
使い方を覚えてもバージョンが変わったりすると使えなくなったりするので、なる
べく低レベルでやりたいと思っています。ほんとは WinInet より WinSocket で
やりたいんで勉強中です。Internet 周りは難しいです。


3へぇ〜  2004-12-04 08:59:49  No: 12014

>TDownLoadURL ってクラスがあるんですか?
ヘルプ見たら、TActionList から TDownLoadURLオブジェクトというのを追加できるんですね。初めて知った…


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加