Webサイトの更新情報を監視する
目的のサイトが更新されたら、すぐに知らせてくれる自動監視システム
「重要な情報を発信しているサイトがあり、更新があればすぐに確認したい」と思うことはありませんか?
中には登録をしておけば、更新情報を知らせてくれるサイトもありますが、まだまだそのようなサイトばかりではありません。
そこで、今回は目的のWebサイトが更新された場合にすぐに知らせてくれるサイト自動監視システムの作成を紹介します。ソフトのインストールなどは一切必要ありません。
・VBScriptでサイト情報の取得方法等を学びたい人
Webサイト監視システムを3分で作る
上の動画で紹介したようなシステムを3分で作りましょう。まず、作業フォルダを決めます。どこでも構いません。私は下の画像で示すフォルダで作業を進めていきます。
この中に二つのファイルを作ります。まずは、「サイト更新自動チェック.vbs」というファイルを作ってください。その中に、以下のコードをコピー&ペーストします。ファイルを開くときは「右クリック」から「編集」を選んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
'変数の宣言を強制 Option Explicit 'エラーが生じても処理を続ける 'On Error Resume Next 'インクルード Dim objFso Set objFso = CreateObject("Scripting.FileSystemObject") Function Include(ByVal strFileName) Include = objFso.OpenTextFile(strFileName, 1, False).ReadAll() End Function Execute Include(".\IEManager.vbs") Set objFso = Nothing 'InternetExplorerマネージャクラスのインスタンス生成 Dim iem Set iem = New IEManager '変数の定義 Private mstrBfText '前回記憶したWebサイトのテキスト mstrBfText = "" ''処理部 '監視するWebサイトのURLを指定 Dim targetURL targetURL = InputBox("監視するWebサイトのURLを指定してください(例:http://www.jma.go.jp/jp/typh/1703.html)") 'targetURL = "http://www.jma.go.jp/jp/typh/1703.html" '更新確認間隔を指定 Dim sleeping_time sleeping_time = InputBox("更新確認間隔[秒]を指定してください(例:3600)") 'ログ書き込みファイル Set objFso = CreateObject("Scripting.FileSystemObject") Dim objFile If objFso.FileExists(".\サイト更新監視.log") Then objFso.DeleteFile ".\サイト更新監視.log" End If Set objFile = objFso.OpenTextFile(".\サイト更新監視.log", 2, True) Set objFso = Nothing '監視開始 Do Dim TrueFalse TrueFalse = IsWebSiteChanged() If (TrueFalse <> False) Then Call MsgBox(TrueFalse) Call MsgBox("Webサイトが変更されています。", vbInformation + vbOkOnly) objFile.WriteLine CStr(Now()) + ":Webサイトが変更されました。" If (MsgBox("監視を継続しますか?", vbQuestion + vbYesNo) <> vbYes) Then ' iem.Quit Set iem = Nothing WScript.Quit End If Else objFile.WriteLine CStr(Now()) + ":Webサイトは変更されていません。" End If '待機時間 WScript.Sleep(sleeping_time * 1000) Loop '前回と相違があるかどうかをチェックする関数 Function IsWebSiteChanged() 'Webサイトからテキストを取得 Dim strText, blnGetT blnGetT = iem.GetTextDocument(targetURL, strText) If (blnGetT = False) Then MsgBox "GetTextDocument エラー" & vbCeLf & iem.Message Set iem = Nothing WScript.Quit End If '前回の内容がまだ取得できていなければ、今回の内容を記憶し処理を抜ける If (mstrBfText = "") Then mstrBfText = strText '戻り値にFalseを返す IsWebSiteChanged = False Exit Function End If '前回の内容と比較 If (strText = mstrBfText) Then '戻り値にFalseを返す IsWebSiteChanged = False Else mstrBfText = strText '今回取得した内容を前回の内容と比較して保存 '戻り値にTrueを返す IsWebSiteChanged = True End If End Function |
そして、もう一つ「IEManager.vbs」というファイルを作成し、以下のコードを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
Option Explicit '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' InternetExplorerマネージャクラス '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Class IEManager 'メッセージ Private mstrMessage 'IEオブジェクト Private mobjIE 'コンストラクタ Private Sub Class_Initialize() On Error Resume Next mstrMessage = "" Set mobjIE = CreateObject("InternetExplorer.Application") If Not (Err.Number = 0) Then Err.Clear Exit Sub End If On Error GoTo 0 mobjIE.Visible = False End Sub 'デストラクタ Private Sub Class_Terminate() On Error Resume Next Set mobjIE = Nothing If Not (Err.Number = 0) Then Err.Clear End If On Error GoTo 0 End Sub '************************************************************ ' プロパティ名:Message ' 概要 :メッセージプロパティ '************************************************************ Public Property Get Message() Message = mstrMessage End Property Private Property Let Message(ByVal strMsg) mstrMessage = strMsg End Property '************************************************************ ' プロパティ名:IEObject ' 概要 :IEオブジェクトプロパティ '************************************************************ Private Property Get IEObject() Set IEObject = mobjIE End Property Private Property Let IEObject(ByVal objIE) Set mobjIE = objIE End Property '************************************************************ ' メソッド名:OpenPage ' 概要 :URLを開く ' 引数 :[strURL] - URL ' 戻り値 :URLを開けたらTrue、開けなければFalse '************************************************************ Public Function OpenPage(ByVal strURL) OpenPage = False On Error Resume Next IEObject.Navigate strURL If Not (Err.Number = 0) Then Message = CStr(Err.Number) & ":" & Err.Description Err.Clear Exit Function End If IEObject.Visible = True On Error GoTo 0 OpenPage = True End Function '************************************************************ ' メソッド名:GetTextDocument ' 概要 :URLのテキストを返す ' 引数 :[strURL] - URL ' [strText] - URLのテキスト ' 戻り値 :テキストを取得できたらTrue、できなければFalse '************************************************************ Public Function GetTextDocument(ByVal strURL, ByRef strText) GetTextDocument = False On Error Resume Next strText = "" IEObject.Navigate strURL If Not (Err.Number = 0) Then Message = CStr(Err.Number) & ":" & Err.Description Err.Clear Exit Function End If Do Until IEObject.Busy = False WScript.Sleep(250) Loop strText = IEObject.Document.Body.InnerText On Error GoTo 0 GetTextDocument = True End Function '************************************************************ ' メソッド名:GetHtmlDocument ' 概要 :URLのHTMLを返す ' 引数 :[strURL] - URL ' [strHtml] - URLのHTML ' 戻り値 :HTMLを取得できたらTrue、できなければFalse '************************************************************ Public Function GetHtmlDocument(ByVal strURL, ByRef strHtml) GetHtmlDocument = False On Error Resume Next strHtml = "" IEObject.Navigate strURL If Not (Err.Number = 0) Then Message = CStr(Err.Number) & ":" & Err.Description Err.Clear Exit Function End If Do Until IEObject.Busy = False WScript.Sleep(250) Loop strHtml = IEObject.Document.Body.InnerHtml On Error GoTo 0 GetHtmlDocument = True End Function End Class |
どちらも少し長めのプログラムですが、何が書いてあるかは理解できなくても良いです。保存してファイルを閉じましょう。
とにかく、これでWebサイトの自動監視システムが出来上がりました。実行してみましょう。「サイト更新自動チェック.vbs」をダブルクリックします。するとまず、監視したいWebサイトのURLを入力するウィンドウが現れますので、入力しましょう。
「OK」を押すと、次に更新確認間隔を指定します。これは監視したいWebサイトをどのくらいの間隔でチェックするかを指定するところです。単位は秒で指定します。例えば、下の画像のように「86400」とすれば、86400秒=1日なので1日おきにサイトの更新をチェックします。
この間隔はもっと長くても、短くても構いません。そして、「OK」を押せば監視が開始されます。
すぐに「サイト更新監視.log」というファイルが作成されると思います。この中には更新を確認した時刻とそのときにWebサイトが更新されたかどうかが記述されていきます。
上の画像の例は更新がない場合の「サイト更新監視.log」の中身です。
そして、更新があると警告ウィンドウがでます(下の画像)。
これがでると監視しているサイトが更新されたということです。「OK」を押すと、次に監視を継続するかどうかを聞かれます。
ここで、「はい」を選択した場合、また監視を続けます。そして更新があると警告ウィンドウを表示する…というサイクルとなります。「いいえ」を選択すると、監視プログラムを終了します。
おわりに
ここでは、プログラムコードについて詳しくは述べませんが、やっていることは単純です。「サイト更新自動チェック.vbs」がメインのプログラムコードであり、「IEManager.vbs」が補助的なものですが、これらを使って、「初めにサイトをチェックしたときのHTMLが次にチェックしたときと異なっているかどうか」を調べているだけです。
異なれば更新されたということですし、同じであれば更新されていないということです。
このプログラムはVBScriptというWindowsに始めから入っているプログラムを使用して作成しています。何のソフトもインストールしていません。それでも大抵のことができてしまうということを実感してもらえたならば嬉しいです。
自動化プログラムの作成を依頼しませんか?
幣サイトでは、Windowsパソコンの自動化プログラムの作成サービスを行っています。
本サービスの特徴は、
・安価な値段
・個人から法人までどなたでも対応
・お客様の要望を全力で実現
です。
安いからといって、決して手は抜きません。
まずは、下のボタンからWindowsパソコンの自動化プログラムの作成サービスの詳細をご確認ください。