Ana Sayfa > C#, İnternet, Programlama > C# ile Google PageRank Bulma

C# ile Google PageRank Bulma

23 Aralık 2009

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:



  1. resi
    Şubat 22nd, 2010 at 12:07 | #1

    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..

  2. reyalk
    Şubat 7th, 2011 at 04:54 | #2

    Hocam kaynak kodlarını vermişsinizde uygulamayı bir türlü bulamıyorum. uygulama için bir link verirseniz memnun olurum.

    Saygılarımla.

  3. chaki
    Mart 16th, 2011 at 20:08 | #3

    vb.net olarak verme şansınız varmı