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

解決


ふうせん  2009-06-30 10:37:52  No: 34945  IP: 192.*.*.*

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

編集 削除
WEB  2009-07-02 15:54:13  No: 34946  IP: 192.*.*.*

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

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

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

編集 削除
igy  2009-07-02 19:01:07  No: 34947  IP: 192.*.*.*

>TWebBrowserにて

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

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


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

編集 削除
通りすがり  2009-07-03 00:33:49  No: 34948  IP: 192.*.*.*

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

編集 削除
ふうせん  2009-07-03 01:14:11  No: 34949  IP: 192.*.*.*

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

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

編集 削除
KHE00221  2009-07-03 01:24:39  No: 34950  IP: 192.*.*.*

とりあえずこれで

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 08:59:59  No: 34951  IP: 192.*.*.*

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

編集 削除
?  2009-07-03 12:12:23  No: 34952  IP: 192.*.*.*

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

編集 削除
すれちがい?  2009-07-03 12:35:59  No: 34953  IP: 192.*.*.*

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

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

編集 削除
ふうせん  2009-07-04 01:08:12  No: 34954  IP: 192.*.*.*

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

編集 削除