C# ile Google PageRank Bulma
Google‘ın PageRank uygulaması, web sitelerinin Google tarafından önemini bulmakta kullanılan bir algoritmadır.
Wikipedia’daki şu adresten, PageRank algoritması ile ilgili ayrıntılı bilgiye erişebilirsiniz.
Siz de sitenizin PageRank değerini http://www.prchecker.info adresinden bulabilirsiniz.
Yazacağımız uygulama ile, sitenizin Google PageRank değerini programatik olarak buldurabileceğiz.
Google sitelerin PageRank değerlerini, http://toolbarqueries.google.com/search adresine gönderilen sorgulara cevap olarak verebiliyor. Fakat sonuç alabilmemiz için bu adrese doğru parametreleri vermemiz gerekiyor, aksi halde HTTP403 : Forbidden hatası alıyoruz.
Parametreler:
- features=Rank
- client=navclient-auto
- q=info:{adres}
- ch={checksum}
Checksum bilgisini hesaplamak için Google’ın yayınladığı bir algoritma var. Uygulamamızda, bu algoritmayı C# ile yazacağız.
Yukarıdaki resimde görünen arayüzü hazırladıktan sonra, projemize GooglePageRank isminde static class ekliyoruz.
GooglePageRank static class’ı üç tane static method’dan oluşuyor.
private static void Mix(ref uint a, ref uint b, ref uint 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;
}
private static string GoogleChecksum(string url)
{
uint GoogleMagic = 0xE6359A60;
uint a, b;
uint c = GoogleMagic;
a = b = 0x9E3779B9;
int k = 0;
int length = url.Length;
while (length >= 12)
{
a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
b += (uint)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24));
c += (uint)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24));
Mix(ref a, ref b, ref c);
k += 12;
length -= 12;
}
c += (uint)url.Length;
switch (length)
{
case 11:
c += (uint)(url[k + 10] << 24);
goto case 10;
case 10:
c += (uint)(url[k + 9] << 16);
goto case 9;
case 9:
c += (uint)(url[k + 8] << 8);
goto case 8;
case 8:
b += (uint)(url[k + 7] << 24);
goto case 7;
case 7:
b += (uint)(url[k + 6] << 16);
goto case 6;
case 6:
b += (uint)(url[k + 5] << 8);
goto case 5;
case 5:
b += (uint)(url[k + 4]);
goto case 4;
case 4:
a += (uint)(url[k + 3] << 24);
goto case 3;
case 3:
a += (uint)(url[k + 2] << 16);
goto case 2;
case 2:
a += (uint)(url[k + 1] << 8);
goto case 1;
case 1:
a += (uint)(url[k + 0]);
break;
default:
break;
}
Mix(ref a, ref b, ref c);
return string.Format("6{0}", c);
}
public static string PageRankHesapla(string adres)
{
string checkSum = GoogleChecksum("info:" + adres);
string url = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=" + checkSum + "&features=Rank&q=info:" + adres;
try
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string data = reader.ReadToEnd();
reader.Close();
response.Close();
if (data.IndexOf(':') != -1)
data = data.Substring(data.LastIndexOf(':') + 1);
return data;
}
catch (Exception)
{
return "-1";
}
}
Şimdi yapmamız gereken, Butonun Click olayında, GooglePageRank static class’ının PageRankHesapla method’unu çağırmak ve dönen değeri Label’da göstermek.
Uygulamanın çalışır halini bu adresten indirebilirsiniz.
İlgili diğer başlıklar:
- C# ile Google Url Kısaltma Servisini Kullanmak
- C# switch ifadelerinde explicit fall through
- C# ile WebCrawler Uygulaması
- C# ile Tarihin Gününü Bulma
- Bu kodda ne yanlış var? – 9
- C# ile Image Crawler Uygulaması
- C# Windows’un Boş Zamanını (Idle Time) Bulmak
- C# String’i Title Case’e (Kelimelerin Baş Harfleri Büyük Gerisi Küçük) Çevirme
- Google, HTTP protokolüne alternatif olarak SPDY üzerinde çalışıyor
- C# ile isNumeric() fonksiyonu yazalım

Yararlı bilgilerin için teşekkürler.
Hocam dmoz da adresin olup olmadığını sorgulama, çoklu pagerank sorgulama, backlink sorgulama, gibi konularada el atarsanız minnettar kalırım vermiş olduğunuz örnekler çok faydalı oluyor benim için c#’a 2004 de başlamıştım 3,4 ay sonunda sıkıldım ve 2010 geldi bu zaman içerisinde bırakmamış olsaydım güzel bir şekilde kavrayacaktım tabiyki pişmanım “zararın neresinden dönersen kardır ” sözü ile tekrar başladım 2004 de “herbschildt” herkes için bir kitabını aldım console de anlatım yapıyor biraz soğuk geldi bana tam kavrayamadım kitaptakileri şimdi form tabanlı örnekler ile çalışmalarıma devam edersem işin orta yerinden mi girmiş olacağım Yardımlarınız için tekrar teşekkürler Önerilerinizi Dikkate alacağımdan şüpheniz olmasın
Saygılar..
Hocam kaynak kodlarını vermişsinizde uygulamayı bir türlü bulamıyorum. uygulama için bir link verirseniz memnun olurum.
Saygılarımla.
vb.net olarak verme şansınız varmı