Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.IO;
- using System.Net;
- namespace PageRank
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void btnPageRank_Click(object sender, EventArgs e)
- {
- MessageBox.Show("PageRank: " + GooglePageRank.GetPageRank(txtURL.Text));
- }
- }
- 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;
- //Algorithm
- 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;
- //All cases fall through
- switch (length)
- {
- case 11:
- c += (uint)(url[k + 10] << 24);
- goto case 10; //fall through
- 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)
- {
- //Calculate URL checksum
- string checkSum = GoogleChecksum("info:" + url);
- string file = "http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=" + checkSum + "&features=Rank&q=info:" + url;
- try
- {
- //Request PR from Google
- 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;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement