TWebBrowserで取得したドキュメントの作成日時/更新日時を取得するには?

解決


ふうせん  2009-06-30 19:37:52  No: 34945

はじめまして、お世話になります。
TWebBrowserにて、Navigate()して取得したドキュメント(xxx.html)の作成日時/更新日時とサイズを取得したいのですが、方法がわかりません。
どうすれば良いでしょうか。


WEB  2009-07-03 00:54:13  No: 34946

ブラウザでは、HTML等のサーバー側のドキュメントの作成日等は通常取れません。

こんなものが取れたら、セキュリティ面に問題があると言うことに
なります。

ブラウザはサーバーから受信したHTMLドキュメントを解析して
表示するだけです。(実際は細かい処理を行いますが)


igy  2009-07-03 04:01:07  No: 34947

>TWebBrowserにて

TWebBrowserではなく、IndyのTIdHttpでよければ、

INDY http TIPS
http://www.monazilla.org/document/indytips.html


指定コンテンツのサイズを取得する
指定コンテンツの最終更新日を取得する
あたりで、サイズ・最終更新日が取得できそうですが・・・


通りすがり  2009-07-03 09:33:49  No: 34948

恐らく更新日時とサイズはIHTMLDocument2経由で取得できると思うのですが、
更新日時が取得できるのはサーバーがLast-Modifiedを返した場合だけだと思います。


ふうせん  2009-07-03 10:14:11  No: 34949

igy  さん
それだと、二重にアクセスしなければならないので、なんとかTWebBrowser経由で取得できればと思っています。

通りすがり さん
ぐぐっていたら、MSHTMLのInterfacesというのを使えばいろいろな情報を取得できるというのは、だんだんわかってきたのですが、Interfacesが大量に存在していて、どれを使えばいいのか不明でした。
IHTMLDocument2を調べてみます。


KHE00221  2009-07-03 10:24:39  No: 34950

とりあえずこれで

procedure TForm10.WebBrowser1NavigateComplete2(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
    IDOC: IHTMLDocument2;
    WS: WideString;
begin
    with TWebBrowser(ASender) do
    begin
      ControlInterface.Document.QueryInterface(IID_IHTMLDocument, iDoc);
      if Assigned(iDoc) then
      begin
        Memo1.Lines.Add(IDoc.lastModified);
        try
          Memo1.Lines.Add ('Created Date  : ' + IDoc.fileCreatedDate);
          Memo1.Lines.Add ('Modified Date : ' + IDoc.fileModifiedDate);
          Memo1.Lines.Add ('Updated Date  : ' + IDOC.fileUpdatedDate);
          Memo1.Lines.Add ('FileSize:' + IDoc.fileSize);
        finally
        end;
      end;
    end;
end;

Last-Modified 今の時刻を返すから IHTMLDocument2 の更新時間って所か?

Yahoo は日付取得不可 (IE上でプロパティからも見えない)


無駄なこと  2009-07-03 17:59:59  No: 34951

多くのWEBサイトはドキュメント(xxx.html)のヘッダにLast-Modifiedを
含めていないから、作成日時/更新日時の取得はあきらめたほうがいいよ。


?  2009-07-03 21:12:23  No: 34952

Last-ModifiedはHTTPレスポンスのヘッダに含まれる情報です。
これが返されるケースが多いか少ないかは別として、
HTTPの仕様とHTMLの仕様は別なので、誤った情報は書かないでください。


すれちがい?  2009-07-03 21:35:59  No: 34953

>多くのWEBサイトはドキュメント(xxx.html)のヘッダにLast-Modifiedを
>含めていないから、作成日時/更新日時の取得はあきらめたほうがいいよ。

これはHTMLファイルの<head>〜</head>のことを言ってるのではなくて、
HTTPレスポンスのヘッダのことを言ってるのだと思う。
IndyのResponse.LastModifiedもIHTMLDocument2のlastModifiedも
レスポンスのヘッダのLast-Modifiedから情報を取得してるだけで、
Last-Modifiedが含まれていなければ初期値か現在時刻を返すだけ。


ふうせん  2009-07-04 10:08:12  No: 34954

皆様どうもありがとうございます。
KHE00221 さん具体例さんすくです。
IHTMLDocument2の
fileCreatedDate
fileModifiedDate
fileUpdatedDate
fileSize
lastModified
等を取得することで日付やサイズを得ることが出来ました。
ちなみに、試したサイトではちゃんとLast-Modifiedを返してくれました。


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

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






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