WEBページの差分(VB.NET)
2010年01月09日
WEBページの変更前後の差分を表示するサンプル(ソース/コード)です。まず、ボタン1で変更前のバックアップをローカルディスクに保存します。次に、ボタン2で変更後のバックアップをローカルディスクに保存します。続いて、変更前のバックアップと変更後のバックアップをフォルダ比較し、変更、追加、削除があったファイルを一覧表示します。また、変更ファイルについてはファイル比較してHTMLの変更行を差分表示します。WEB関係のツールやサンプルはこちら「WEB関係」です。
' ----------------------------------------------------------
' WEBページの変更前後の差分を表示するサンプル(VB.NET/VS2005)
' WEBページを比較するURL
Private url As String = "http://xxx.blog111.fc2.com/"
' 変更前のWEBページのバックアップフォルダ
Private pt1 As String = "D:\Temp\Html1"
' 変更後のWEBページのバックアップフォルダ
Private pt2 As String = "D:\Temp\Html2"
' 変更前のWEBページのバックアップ
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' WEBページ(旧)のバックアップ
WebBackup(url, pt1)
End Sub
' 変更後のWEBページのバックアップ
Private Sub Button2_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
' WEBページ(新)のバックアップ
WebBackup(url, pt2)
' バックアップフォルダのファイル情報の一覧取得
Dim ls1 As String() = GetFList(pt1)
Dim ls2 As String() = GetFList(pt2)
' バックアップフォルダ比較
Dim fcm As String() = _
FolderCompare(pt1, ls1, pt2, ls2)
' 差分解析&結果表示
For i As Integer = 0 To UBound(fcm)
Dim upd As String() = Split(fcm(i), vbTab)
If upd(0) = "UPD" Then
' ファイル更新の時はファイルPATHと差分表示
Dim fdf As String(,) = FileDiff( _
pt1 & upd(1), pt2 & upd(1))
For j As Integer = 1 To fdf.GetLength(1) - 1
' 差分情報(更新タイプ,行番号1,テキスト1,
' 行番号2,テキスト2)
If fdf(0, j) <> "" Then
Debug.WriteLine( _
upd(0) & ":" & upd(1) & ":" & _
fdf(0, j) & vbTab & _
fdf(1, j) & vbTab & _
fdf(2, j) & vbTab & _
fdf(3, j) & vbTab & _
fdf(4, j))
End If
Next
ElseIf upd(0) = "ADD" Then
' ファイル追加の時はファイルPATH表示
Debug.WriteLine(upd(0) & ":" & upd(1))
ElseIf upd(0) = "DEL" Then
' ファイル削除の時はファイルPATH表示
Debug.WriteLine(upd(0) & ":" & upd(1))
End If
Next
End Sub
' テキストファイルを比較し結果を返します
' NonDiffNet.dllを参照設定しています。
Private Function FileDiff( _
ByVal f1 As String, ByVal f2 As String) As String(,)
' テキストファイル読込
Dim sr0 As IO.StreamReader = _
New IO.StreamReader(f1, _
System.Text.Encoding.GetEncoding("EUC-JP"))
Dim sr1 As IO.StreamReader = _
New IO.StreamReader(f2, _
System.Text.Encoding.GetEncoding("EUC-JP"))
Dim dt0 As String = sr0.ReadToEnd()
Dim dt1 As String = sr1.ReadToEnd()
sr0.Close()
sr1.Close()
' テキストファイルの比較
Dim NonDiff As New NonDiffNet.NonDiffClass()
Return NonDiff.NonDiff( _
dt0, dt1, False, 2, 1, 1, "file0", "file1")
End Function
' ----------------------------------------------------------