【背景】法律や条例等が更新されたことを知りたく、全都道府県の複数の法律の関するページを開き、1つ1つPDFを開いてはその更新日を見て、更新されているかを確認しています。膨大な数のHPのPDFを1つ1つ開くのが大変なので、「どのページのどのPDFが更新されたかがわかることができれば、あとはそれだけを開いて確認する」という方法ができれば時間短縮できると考えました。
【現在やったこと】市や県のHPで、内容が更新された場合、そのページの上部に更新日が書いてあることが多くそれをウェブスクレイピングするEXCEL VBAで、ページが更新されたことはわかるようにできました。
しかし、そこに保存されている目的のPDFファイルが新しくなったかは、やはり一度開いて見ないとわからない現状です。
例えば、保存しているファイルの名前があって、その名前を保存しておき、ファイルが変わった時にファイル名が変わっていれば、その違いでファイルが更新したことがわかる、とかそんなことができるのでしょうか?
何か他に方法をご存知でしたら教えてください。
↓参考までに、そのページが更新されたかをを知るのに下記のコードを作りました。
開くとこの中にたくさんのPDFがあることがわかります。
もしアイディア等あればご教授ください。
excel
1Sub 岡山県() 2Dim objIE As InternetExplorer 3 4Call ieView(objIE, "http://www.pref.okayama.jp/page/detail-3445.html") 5ThisWorkbook.Sheets(1).Cells(10, 8) = objIE.document.getElementById("content_header").Children(1).innerText 6 7End Sub 8 9'①指定URLを表示するサブルーチン「ieView」 10Sub ieView(objIE As InternetExplorer, _ 11 urlName As String, _ 12 Optional viewFlg As Boolean = True, _ 13 Optional ieTop As Integer = 0, _ 14 Optional ieLeft As Integer = 0, _ 15 Optional ieWidth As Integer = 600, _ 16 Optional ieHeight As Integer = 800) 17 18 'IE(InternetExplorer)のオブジェクトを作成する 19 Set objIE = CreateObject("InternetExplorer.Application") 20 21 With objIE 22 'IE(InternetExplorer)を表示・非表示 23 .Visible = viewFlg 24 .Top = ieTop 'Y位置 25 .Left = ieLeft 'X位置 26 .Width = ieWidth '幅 27 .Height = ieHeight '高さ 28 29 '指定したURLのページを表示する 30 .navigate urlName 31 32 End With 33 'IE(InternetExplorer)が完全表示されるまで待機 34 Call ieCheck(objIE) 35 36End Sub 37 38'②Webページ完全読込待機処理サブルーチン「ieCheck」 39Sub ieCheck(objIE As InternetExplorer) 40 41 Dim timeOut As Date 42 43 timeOut = Now + TimeSerial(0, 0, 20) 44 45 Do While objIE.Busy = True Or objIE.readyState <> 4 46 DoEvents 47 Sleep 1 48 If Now > timeOut Then 49 objIE.Refresh 50 timeOut = Now + TimeSerial(0, 0, 20) 51 End If 52 Loop 53 54 timeOut = Now + TimeSerial(0, 0, 20) 55 56 Do While objIE.document.readyState <> "complete" 57 DoEvents 58 Sleep 1 59 If Now > timeOut Then 60 objIE.Refresh 61 timeOut = Now + TimeSerial(0, 0, 20) 62 End If 63 Loop 64 65End Sub
【アドバイスを受けて試したこと】
excel
1Sub 岡山() 2Dim objIE As InternetExplorer 3Call ieView(objIE, "http://www.pref.okayama.jp/page/detail-3445.html") 4ThisWorkbook.Sheets(1).Cells(10, 8) = objIE.document.getElementById("content_header").Children(1).innerText 5Call GetLastModified(URL, "http://www.pref.okayama.jp/page/detail-3445.html") 6End Sub 7 8Function GetLastModified(URL As String) As String 9Dim httpReq As Object 10Set httpReq = CreateObject("MSXML2.XMLHTTP") 11httpReq.Open "GET", URL, False 12httpReq.send 13 14GetLastModified = httpReq.getResponseHeader("Last-Modified") 15Set httpReq = Nothing 16End Function
知識不足でエラーで動かなかったので
MSXML2.XMLHTTPで検索し、
https://tonari-it.com/excel-vba-http-request/
のサイトと回答者様のアドバイスを参考に以下のコードを作成。
excel
1Sub 読み込む() 2 Dim GetLastModified As String 3 Dim httpReq As Object 4 Set httpReq = CreateObject("MSXML2.XMLHTTP") 5 httpReq.Open "GET", "http://www.pref.okayama.jp/page/detail-3445.html", False 6 httpReq.send 7 GetLastModified = httpReq.getResponseHeader("Last-Modified") 8 Debug.Print GetLastModified 9 Set httpReq = Nothing 10End Sub
Wed, 04 Apr 2018 19:04:26 GMT
を出力することができた。
これが意味するところがなんだかわかりません。
おそらく、更新されたものがあるってことなのか?
このページにある全てのPDFについて更新日をチェックするには
どのようにすればいいんでしょうか?

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/05 01:07
2018/04/05 02:13
2018/04/05 04:28
2018/04/06 05:26