Advertisement
Guest User

Page rank!

a guest
Nov 15th, 2011
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.65 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.IO;
  9. using System.Net;
  10.  
  11. namespace PageRank
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         public Form1()
  16.         {
  17.             InitializeComponent();
  18.         }
  19.  
  20.         private void btnPageRank_Click(object sender, EventArgs e)
  21.         {
  22.             MessageBox.Show("PageRank: " + GooglePageRank.GetPageRank(txtURL.Text));
  23.         }
  24.     }
  25.  
  26.     public static class GooglePageRank
  27.     {
  28.         private static void Mix(ref uint a, ref uint b, ref uint c)
  29.         {
  30.             a -= b;
  31.             a -= c;
  32.             a ^= c >> 13;
  33.             b -= c;
  34.             b -= a;
  35.             b ^= a << 8;
  36.             c -= a;
  37.             c -= b;
  38.             c ^= b >> 13;
  39.             a -= b;
  40.             a -= c;
  41.             a ^= c >> 12;
  42.             b -= c;
  43.             b -= a;
  44.             b ^= a << 16;
  45.             c -= a;
  46.             c -= b;
  47.             c ^= b >> 5;
  48.             a -= b;
  49.             a -= c;
  50.             a ^= c >> 3;
  51.             b -= c;
  52.             b -= a;
  53.             b ^= a << 10;
  54.             c -= a;
  55.             c -= b;
  56.             c ^= b >> 15;
  57.         }
  58.  
  59.         private static string GoogleChecksum(string url)
  60.         {
  61.             uint GoogleMagic = 0xE6359A60;
  62.  
  63.             uint a, b;
  64.             uint c = GoogleMagic;
  65.  
  66.             a = b = 0x9E3779B9;
  67.  
  68.             int k = 0;
  69.             int length = url.Length;
  70.  
  71.             //Algorithm
  72.             while (length >= 12)
  73.             {
  74.                 a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
  75.                 b += (uint)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24));
  76.                 c += (uint)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24));
  77.  
  78.                 Mix(ref a, ref b, ref c);
  79.  
  80.                 k += 12;
  81.                 length -= 12;
  82.             }
  83.  
  84.             c += (uint)url.Length;
  85.  
  86.             //All cases fall through
  87.             switch (length)
  88.             {
  89.                 case 11:
  90.                     c += (uint)(url[k + 10] << 24);
  91.                     goto case 10; //fall through
  92.                 case 10:
  93.                     c += (uint)(url[k + 9] << 16);
  94.                     goto case 9;
  95.                 case 9:
  96.                     c += (uint)(url[k + 8] << 8);
  97.                     goto case 8;
  98.                 case 8:
  99.                     b += (uint)(url[k + 7] << 24);
  100.                     goto case 7;
  101.                 case 7:
  102.                     b += (uint)(url[k + 6] << 16);
  103.                     goto case 6;
  104.                 case 6:
  105.                     b += (uint)(url[k + 5] << 8);
  106.                     goto case 5;
  107.                 case 5:
  108.                     b += (uint)(url[k + 4]);
  109.                     goto case 4;
  110.                 case 4:
  111.                     a += (uint)(url[k + 3] << 24);
  112.                     goto case 3;
  113.                 case 3:
  114.                     a += (uint)(url[k + 2] << 16);
  115.                     goto case 2;
  116.                 case 2:
  117.                     a += (uint)(url[k + 1] << 8);
  118.                     goto case 1;
  119.                 case 1:
  120.                     a += (uint)(url[k + 0]);
  121.                     break;
  122.                 default:
  123.                     break;
  124.             }
  125.  
  126.             Mix(ref a, ref b, ref c);
  127.  
  128.             return string.Format("6{0}", c);
  129.         }
  130.  
  131.         public static int GetPageRank(string url)
  132.         {
  133.             //Calculate URL checksum
  134.             string checkSum = GoogleChecksum("info:" + url);
  135.             string file = "http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=" + checkSum + "&features=Rank&q=info:" + url;
  136.  
  137.             try
  138.             {
  139.                 //Request PR from Google
  140.                 WebRequest request = WebRequest.Create(file);
  141.                 WebResponse response = request.GetResponse();
  142.  
  143.                 StreamReader reader = new StreamReader(response.GetResponseStream());
  144.                 string data = reader.ReadToEnd();
  145.  
  146.                 reader.Close();
  147.                 response.Close();
  148.  
  149.                 //Parse PR from string
  150.                 int pageRank = -1;
  151.                 if (data.IndexOf(':') != -1)
  152.                 {
  153.                     data = data.Substring(data.LastIndexOf(':') + 1);
  154.                 }
  155.  
  156.                 int.TryParse(data, out pageRank);
  157.  
  158.                 return pageRank;
  159.             }
  160.             catch (Exception)
  161.             {
  162.                 return -1;
  163.             }
  164.         }
  165.     }
  166.  
  167. }
  168.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement