09 December 2016

Google Pagerank Hesaplama Programı

Pagerank hesaplaması yapılabilmesi için Google’ın checksum algoritmasından yararlanır. Uygulamamızda GooglePageRank classını oluşturup aşağıdaki metodları yazalım:

Not: using System.Net; ve using System.IO; namespaceleri baştan ekleyelim.

public static class GooglePageRank
 {
 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;
//Algoritma
 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 int getPageRank(string url)
 {
 //URL checksum Hesaplama
 string checkSum = GoogleChecksum("info:" + url);
 string file = "http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=" + checkSum + "&features=Rank&q=info:" + url;
try
 {
 //Google'dan PR verilerini alma
 WebRequest request = WebRequest.Create(file);
 WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
 string data = reader.ReadToEnd();
reader.Close();
 response.Close();
//Parse PR from string
 int pageRank = -1;
 if (data.IndexOf(':') != -1)
 {
 data = data.Substring(data.LastIndexOf(':') + 1);
 }
int.TryParse(data, out pageRank);
return pageRank;
 }
 catch (Exception)
 {
 return -1;
 }
 }
 }

 

Yukarıda Google’dan PR verilerini almak için gerekli metodlar classımızın içine yazıldı. Şimdi formumuza bir adet textbox, buton ve label ekleyelim. Ve classımızın getPageRank metodundan instance çıkararak pagerank bilgisini elde edelim. Sonucu label’de gösterelim.

 label1.Text = (GooglePageRank.getPageRank(textBox1.Text).ToString());  //butonun click olayında yer alacak.

toplu pagerank hesaplama
toplu pagerank hesaplamak için birkaç yöntem kullanabiliriz. bir tanesi aşağıdaki şekilde olabilir.
forma bir adet richtextbox ekleriz. her satıra bir url girilmesini sağlarız. çıkan sonucu url ve yanında pr değeri olarak labelde gösteririz.

Veya formumuza 3 adet textbox, 3 label, 1 buton ekleyip her sitenin pagerank değerini elde edip textboxların yanındaki labellerde gösterebiliriz.

label1.Text = (GooglePageRank.getPageRank(textBox1.Text).ToString());
label2.Text = (GooglePageRank.getPageRank(textBox2.Text).ToString());
label3.Text = (GooglePageRank.getPageRank(textBox3.Text).ToString());

Google Pagerank Hesaplama ve Toplu Pagerank Hesaplama Programını da bu şekilde yapabilirsiniz.

Comments

  1. ibrahim says:

    Diğerini paylaştığınızda bana da mail atar mısınız? Teşekkürler.

  2. teşekkürler

  3. hocam sayfa içi linklerin de pageranklarını gösteren programı paylaşır mısınız?

    • yazilimci says:

      Evet öyle bir şey yapmayı düşünüyorum. web crawler mantığı ile. paylaşırım yaptığımda 🙂