tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: Webページのタイムスタンプ取得につきまして
投稿日: 2017/09/01(Fri) 10:30
投稿者魔界の仮面弁士
>> Webページhttps://www.goo.ne.jp/のタイムスタンプ取得をしたいのですが、
静的なページと違って、goo のように動的なページの場合は
常にリクエスト時刻が得られてしまうと思います。

フレームが使われているページの場合も悩ましいところですね。


>> VB6でも可能でしょうか。
> アドレス欄にjavascript:alert(document.lastModified)を入力し、
> Enter キーをクリックすることで更新日が取得できました。

自己解決済みのようですが、一応 VB6 コードで取得する方法についても紹介しておきます。

知りたいのは最終更新日だけであり、Web ページの本体データは不要なので、
GET リクエストではなく HEAD リクエストを投げるようにしてみました。


Dim XHR As Object
Set XHR = CreateObject("WinHttp.WinHttpRequest.5.1")
XHR.Open "HEAD", "https://www.goo.ne.jp/", False
'XHR.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
XHR.Send
MsgBox XHR.GetResponseHeader("Date")
'MsgBox XHR.GetAllResponseHeaders()

上記のように、数行のコードで取得できます。

実際には、通信エラーに備えて On Error を仕掛けたり、
404 Not Found 等を判定するための XHR.Status / StatusText の
確認もした方が良いとは思います。必要であれば組み込んでみてください。


なお、Date ヘッダーの書式は RFC 1123 形式と定められているため、
上記で得られる文字列は、
 "Thu, 31 Aug 2017 23:45:01 GMT"
 "Sat, 04 Oct 2014 01:23:45 +0900"
のように、"曜日, 日 月 年 時刻 ゾーン" 形式で返されることになります。

RFC1123 から日付への変換には、
 案1) InternetTimeToSystemTime API を使う
 案2) Mid 関数で切り出して自前で変換
 案3) JScript の Date オブジェクト経由で変換
などの選択肢があります。

とりあえず案3ならこんな感じ。

"Thu, 31 Aug 2017 23:45:01 GMT" という文字列を渡すと、
戻り値として、2017/09/01 08:45:01 AM 相当の日付型の値が得られます。

Function ToVBDate(ByVal rfc1123Date As String) As Variant
    On Error GoTo Catch
    Dim sc As Object
    Set sc = CreateObject("MSScriptControl.ScriptControl")
    sc.Language = "JScript"
    ToVBDate = sc.Eval("new Date('" & rfc1123Date & "').getVarDate()")
    Exit Function
Catch:
    ToVBDate = Null
End Function

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。