NonSoft

GoogleのPageRankを取得するサンプル(VB.NET)


 サンプル(ソース/コード)
このサイトも「googleペナルティ」を受けてしまったらしいです。「googleウェブマスターツール」
から「再審査をリクエスト」して数週間経過しました。まだgoogle様のお許しは頂けてないようです。

色々気になったのでSEO(検索エンジン最適化)ツールを作って時々チェックする事にしました。
今回作ったツールはサイト内URLチェックです。

このツールのプログラミングは少々難しく、色々(検索順位の取得方法など)調べましたので、
その中の1つ(ページランク取得方法)のサンプルを公開します。

本サンプルのパラメタになっているCheckSumですが、Googleツールバーを使用している方は、
スニファリング(盗聴)ツールを使用すればGoogleツールバーが送信しているURLで確認出来ます。

また、本サイトのCGIGoogleのPageRank取得用CheckSum(ch)計算)をお試し頂けます。
でも、このCGIはあまり自信がありません。色々調べて、サンプルソースも見つけて、本サイト用に
移植を試みたのですが、CheckSum(ch)計算には整数(Unsigned)32ビットの演算が必要なのです。
しかし、Niftyのperlのバージョンでは未対応のようで、簡単に移植出来ませんでした。
結局、足し算や引き算をオーバーフローしないようにビット演算で計算する必要があり、
やっと出来た感じですが、全てのURLに対応出来ているか自身がありません。
そんな状況をご理解の上、お試しください。

GoogleのPageRankを取得するDLL(VB.NET/C#.NET)がありますので今だけお試し頂けます。

関連情報
Googleの検索順位を取得するサンプル(VB.NET)
GoogleのPageRank取得用のCheckSum(ch)を計算するサンプル(perl)
サイト内URLチェック(VB.NET/C#.NET用DLL)
サイト内URLチェック(ツール)
ページランク表示ツール(ツール)

★標準モジュール(Module1.vb)
Imports System.IO
Imports System.Net

Module Module1
    ''' <summary>
    ''' Googleページランク取得
    ''' </summary>
    ''' <param name="url">URL</param>
    ''' <param name="ch">CheckSum</param>
    ''' <returns>Googleページランク</returns>
    ''' <remarks></remarks>
    Public Function GetPageRank(ByVal url As String, ByVal ch As String) As String
        ' 2011/10/07以前---------------------
        'Dim gurl As String = _
        '"http://toolbarqueries.google.co.jp/search?client=navclient-auto&features=Rank:&q=" & _
        '"info:" & System.Web.HttpUtility.UrlEncode(url) & "&ch=" & ch
        ' 2011/10/07以降---------------------
        Dim gurl As String = _
        "http://toolbarqueries.google.co.jp/tbr?client=navclient-auto&features=Rank:&q=" & _
        "info:" & System.Web.HttpUtility.UrlEncode(url) & "&ch=" & ch
        ' -----------------------------------
        Dim dat As Byte()
        dat = GetWebPage(gurl)
        If dat.Length > 0 Then
            Dim html As String = System.Text.Encoding.GetEncoding("UTF-8").GetString(dat)
            Dim prk As Integer = Val(Split(html & "::", ":")(2))
            Return prk
        Else
            Return "-"
        End If
    End Function

    ''' <summary>
    ''' Googleページランク用Webページ取得
    ''' </summary>
    ''' <param name="url">Googleページランク用URL(クエリ)</param>
    ''' <returns>Googleページランク用Webページ</returns>
    ''' <remarks></remarks>
    Private Function GetWebPage(ByVal url As String) As Byte()
        Dim st As Stream = Nothing
        Dim wbres As WebResponse = Nothing
        Try
            Dim url_uri As New Uri(url)

            Dim dat As Byte() = New Byte(-1) {}

            Dim wbreq As WebRequest = CType(WebRequest.Create(url), HttpWebRequest)
            CType(wbreq, HttpWebRequest).UserAgent = _
                "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)"
            CType(wbreq, HttpWebRequest).Headers.Add("Accept-Language", "ja")
            wbres = wbreq.GetResponse()

            st = wbres.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 wbres Is Nothing = False Then
                wbres.Close()
                wbres = Nothing
            End If
        End Try
    End Function
End Module

★フォームモジュール(Form1.vb)
Public Class Form1

    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles Button1.Click
        Dim url As String = "http://www.google.co.jp/"
        Dim ch As String = "61754545690"
        Dim pr As Integer = GetPageRank(url, ch)
        MessageBox.Show("ページランクは " & pr & " です。")
    End Sub

End Class