22 Ekim 2018 Pazartesi
Twitter

Google PageRank değerini hesaplama

PageRank, Google'ın site sıralamasında kullandığı algoritmanın sonucu sitenize verdiği değeri gösteren basitleştirilmiş 0'dan 10'a kadar olan bir değerdir. Bu değer genel olarak özgün bir içeriğe, sayfaya verilmiş bağlantılara ve bağlantı veren sayfaların kalitesine bağlı olarak değişir. PageRank, değer olarak sitenizin Google tarafından arama sonuçlarında sıralanmasını ve Google tarayıcısının sitenizi kontrol etme sıklığını etkiler.

Verilen bir URL bilgisine göre PageRank i hesaplayan sınıfımız:

public class GooglePageRank
{
    public GooglePageRank() { }

    private const UInt32 GOOGLE_MAGIC = 0xE6359A60;

    private void _mix(ref UInt32 a, ref UInt32 b, ref UInt32 c)
    {
        a -= b; a -= c; a ^= c >> 13;
        b -= c; b -= a; b ^= a << 8;
        c -= a; c -= b; c ^= b >> 13;
        a -= b; a -= c; a ^= c >> 12;
        b -= c; b -= a; b ^= a << 16;
        c -= a; c -= b; c ^= b >> 5;
        a -= b; a -= c; a ^= c >> 3;
        b -= c; b -= a; b ^= a << 10;
        c -= a; c -= b; c ^= b >> 15;
    }

    string GoogleCH(string url)
    {
        url = string.Format("info:{0}", url);

        int length = url.Length;

        UInt32 a, b;
        UInt32 c = GOOGLE_MAGIC;

        int k = 0;
        int len = length;

        a = b = 0x9E3779B9;

        while (len >= 12)
        {
            a += (UInt32)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
            b += (UInt32)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24));
            c += (UInt32)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24));
            _mix(ref a, ref b, ref c);
            k += 12;
            len -= 12;
        }
        c += (UInt32)length;
        switch (len)  /* all the case statements fall through */
        {
            case 11:
                c += (UInt32)(url[k + 10] << 24);
                goto case 10;
            case 10:
                c += (UInt32)(url[k + 9] << 16);
                goto case 9;
            case 9:
                c += (UInt32)(url[k + 8] << 8);
                goto case 8;
            /* c nin ilk karakteri uzunluk için ayrılmıştır */
            case 8:
                b += (UInt32)(url[k + 7] << 24);
                goto case 7;
            case 7:
                b += (UInt32)(url[k + 6] << 16);
                goto case 6;
            case 6:
                b += (UInt32)(url[k + 5] << 8);
                goto case 5;
            case 5:
                b += (UInt32)(url[k + 4]);
                goto case 4;
            case 4:
                a += (UInt32)(url[k + 3] << 24);
                goto case 3;
            case 3:
                a += (UInt32)(url[k + 2] << 16);
                goto case 2;
            case 2:
                a += (UInt32)(url[k + 1] << 8);
                goto case 1;
            case 1:
                a += (UInt32)(url[k + 0]);
                break;
            default:
                break;
            /* case 0: gerek yok */
        }

        _mix(ref a, ref b, ref c);

        return string.Format("6{0}", c);
    }

    public int GooglePR(string url)
    {
        string checksum = GoogleCH(url);
        string query = string.Format("http://toolbarqueries.google.com/tbr?client=navclient-auto&ch={0}&features=Rank&q=info:{1}", checksum, url);

        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(query);
            string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
            return int.Parse(Regex.Match(response, "Rank_1:[0-9]:([0-9]+)").Groups[1].Value);
        }
        catch (Exception)
        {
            return -1;
        }
    }
}

Kullanımı:

string adres = "daltinkurt.com"; 
GooglePageRank gpr = new GooglePageRank(); 
int pr = gpr.GooglePR(adres);

Kısaca açıklamak gerekirse, PR değerini döndüren adresimiz "http://toolbarqueries.google.com/tbr?client=navclient-auto&ch={0}&features=Rank&q=info:{1}" şeklinde. burada 2 parametre var önemli olan:

1. verilecek adrese göre özel oluşturulan bir cheksum değeri.
2. PR i istenen domain

yukarıda verdiğim adres size şu şekilde bir çıktı veriyor:

adres:

http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=64109543998&features=Rank&q=info:daltinkurt.com

çıktısı:

Rank_1:1:5

ufak bir RegExp kullanımı ile sondaki 5 değerini elde edebiliyoruz. Gerisi size kalmış, Veritabanına mı yazarsınız, SMS le ya da Email ile mi gönderirsiniz bilemem. :)

Herkese kolay gelsin.

Değerlendirme

Yazım dilinin sadeliği ve anlaşılabilirliği Puan: 5,00 (1 oy)
Yazıdaki kodların kalitesi Puan: 4,65 (1 oy)
İhtiyaca cevap verme Puan: 4,75 (1 oy)
Tavsiye edilebilirlik Puan: 4,50 (1 oy)
Genel değerlendirme Puan: 4,70 (1 oy)
Puanlamalar 5 üzerindendir.
  • Site Yorumları
  • Facebook Yorumları Facebook Yorumları
Yeni yorum yaz Toplam: 2, Onay bekleyen: 0.
  1. Devrim Altınkurt

    Dostum, string GoogleCH(string url) {..} metodu hesaplıyor işte ne yapacaksın ki farklı algoritmayı? bu gizli kapaklı bir iş de değil. google yayınladı checksum algoritmasını. basit bir aramayla çeşitli alternatiflerine ulaşabiliyorsun zaten. :)

  2. Hüseyin YILMAZ

    kardeşim bilgi gayet güzel merak ettiğim cheksum değeri nasıl hesaplanır bunu açıklarsan daha farklibir scr_ipt geliştirebilirim