トップ  >  サンプルソース  >  WEBページ更新チェック(C#/VB.NET)

WEBページ更新チェック(C#/VB.NET)

2010年08月10日

WEBページの更新有無を確認(チェック)するサンプル(ソース/コード)です。気になるWEBページの更新をいち早く知りたい時に役立つと思います。

処理の流れは次の通りです。2から4はタイマーで処理しています。
1.WEBページ(旧)読み込み
2.WEBページ(新)読み込み
3.新旧サイズチェック
4.サイズが同じ時は全バイト比較

関連ツールはこちら「WEBページ更新チェック(ツール)」です。
その他のWEB関係のツールやサンプルはこちら「WEB関係」です。

' -----------------------------------------------------------
' WEBページ更新チェックのサンプル(VB.NET/VS2005)
Private strUrl As String = "http://xxx.xxx.com/"
Private oldWeb As Byte() = New Byte(-1) {}
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    ' WEBページ(旧)読み込み
    oldWeb = GetWebPage(strUrl)

    ' WEBページ更新チェック開始(60秒間隔)
    Timer1.Interval = 60000
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Timer1.Tick
    ' WEBページ(新)読み込み
    Dim newWeb As Byte() = GetWebPage(strUrl)
    If oldWeb.Length <> newWeb.Length Then
        ' バイト数が違う
        Timer1.Enabled = False
        MessageBox.Show("WEB更新有り")
        Return
    Else
        For i As Integer = 0 To oldWeb.Length - 1
            If oldWeb(i) <> newWeb(i) Then
                ' データが違う
                Timer1.Enabled = False
                MessageBox.Show("WEB更新有り")
                Return
            End If
        Next
    End If
End Sub

' WEBページ取得
Private Function GetWebPage(ByVal url As String) As Byte()
    Dim st As System.IO.Stream = Nothing
    Dim rs As System.Net.WebResponse = Nothing
    Try
        Dim url_uri As New Uri(url)
        Dim dat As Byte() = New Byte(-1) {}

        Dim rq As System.Net.WebRequest = _
            CType(System.Net.WebRequest.Create(url), _
            System.Net.HttpWebRequest)
        ' WEBページが圧縮されている時-----------------------
        ' CType(rq, System.Net.HttpWebRequest). _
        '     AutomaticDecompression = _
        '     System.Net.DecompressionMethods.GZip
        '---------------------------------------------------
        CType(rq, System.Net.HttpWebRequest).UserAgent = _
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)"
        CType(rq, System.Net.HttpWebRequest).Headers.Add( _
            "Accept-Language", "ja")
        rs = rq.GetResponse()

        st = rs.GetResponseStream()
        Dim bytes As Byte()
        Dim ttlSiz As Integer = 0
        Dim oneSiz As Integer
        Do
            ReDim bytes((1024 * 100) - 1)
            oneSiz = st.Read(bytes, 0, bytes.Length)
            If oneSiz > 0 Then
                ReDim Preserve dat(ttlSiz + oneSiz - 1)
                If oneSiz <> bytes.Length Then
                    ReDim Preserve bytes(oneSiz - 1)
                End If
                bytes.CopyTo(dat, ttlSiz)
                ttlSiz = ttlSiz + oneSiz
            End If
        Loop While (oneSiz > 0)

        Return dat
    Catch ex As Exception
        Throw ex
    Finally
        If st Is Nothing = False Then
            st.Close()
            st = Nothing
        End If
        If rs Is Nothing = False Then
            rs.Close()
            rs = Nothing
        End If
    End Try
End Function
' -----------------------------------------------------------

// ----------------------------------------------------------
// WEBページ更新チェックのサンプル(C#.NET/VS2005)
private String strUrl = "http://xxx.xxx.com/";
private Byte[] oldWeb = new Byte[0] { };
private void button1_Click(object sender, EventArgs e)
{
    // WEBページ(旧)読み込み
    oldWeb = GetWebPage(strUrl);

    // WEBページ更新チェック開始(60秒間隔)
    timer1.Interval = 60000;
    timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
    // WEBページ(新)読み込み
    Byte[] newWeb = GetWebPage(strUrl);
    if (oldWeb.Length != newWeb.Length)
    {
        // バイト数が違う
        timer1.Enabled = false;
        MessageBox.Show("WEB更新有り");
        return;
    }
    else
    {
        for (int i = 0; i <= oldWeb.Length - 1; i++)
        {
            if (oldWeb[i] != newWeb[i])
            {
                // データが違う
                timer1.Enabled = false;
                MessageBox.Show("WEB更新有り");
                return;
            }
        }
    }
}
// WEBページ取得
private Byte[] GetWebPage(String url)
{
    System.IO.Stream st = null;
    System.Net.WebResponse rs = null;
    try
    {
        Uri url_uri = new Uri(url);
        Byte[] dat = new Byte[0] { };

        System.Net.WebRequest rq =
            ((System.Net.HttpWebRequest)
            System.Net.WebRequest.Create(url));
        // WEBページが圧縮されている時----------------------
        //((System.Net.HttpWebRequest)rq).
        //     AutomaticDecompression =
        //     System.Net.DecompressionMethods.GZip;
        //--------------------------------------------------
        ((System.Net.HttpWebRequest)rq).UserAgent =
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)";
        ((System.Net.HttpWebRequest)rq).Headers.Add(
            "Accept-Language", "ja");
        rs = rq.GetResponse();

        st = rs.GetResponseStream();
        Byte[] bytes = new Byte[0] { };
        int ttlSiz = 0;
        int oneSiz;
        do
        {
            Array.Resize<Byte>(ref bytes, 1024 * 100);
            oneSiz = st.Read(bytes, 0, bytes.Length);
            if (oneSiz > 0)
            {
                Array.Resize<Byte>(ref dat, ttlSiz + oneSiz);
                if (oneSiz != bytes.Length)
                {
                    Array.Resize<Byte>(ref bytes, oneSiz);
                }
                bytes.CopyTo(dat, ttlSiz);
                ttlSiz = ttlSiz + oneSiz;
            }
        } while (oneSiz > 0);

        return dat;
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        if (st != null)
        {
            st.Close();
            st = null;
        }
        if (rs != null)
        {
            rs.Close();
            rs = null;
        }
    }
}
// ----------------------------------------------------------
スポンサーサイト

FTPファイル更新チェック(C#/VB.NET) | トップページへ戻る | フォント ダイアログ(C#/VB.NET)

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る