タイトル | : Re^2: Webページのタイムスタンプ取得につきまして |
記事No | : 16347 |
投稿日 | : 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
|