Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

El algoritmo de PageRank de google al detalle.

Publicado en 14 junio, 2013, por en SEO, Varios.

Os dejo el código fuente realizado en C# del algoritmo de cálculo de Pagerank de un sitio de google.

Podéis compilarlo, generar una DLL y usarlo en cualquier proyecto . NET que necesitéis independientemente del lenguaje usado.

Este es el código al detalle.

El programa ejecutable, lo podéis descargar desde aquí. PageRank by Palentino.

 

 

 

using System;
 using System.IO;
using System.Net;
using System.Text;
public class GooglePageRank
 {
 ///
 /// Devuelve el PageRank una URL suministrada. 0 a 10 ó
 /// -1 (N/A), que indica que ha existido un error
 /// o la URL no esta indexada.
 ///
 ///URL a testear
 ///
 public static int GetPageRank(string url)
 {
 int rank = -1;
try
 {
 // URL a completar
 url = String.Format("http://toolbarqueries.google.com/tbr" +
 "?client=navclient-auto&features=Rank&ch={0}&q=info:{1}",
 ComputeHash(url), UrlEncode(url));
// Página de descarga
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 StreamReader stream = new StreamReader(request.GetResponse().GetResponseStream());
 string response = stream.ReadToEnd();
// Página de page rank a parsear
 string[] arr = response.Split(':');
 if (arr.Length == 3)
 rank = int.Parse(arr[2]);
 }
 catch (Exception)
 {
 // No hace nada, pero retorna un -1;
 }
 return rank;
 }
///
 /// URL-encodea la URL dada. Útil cuando HttpUtility no está disponible
 ///
 ///URL a encodear
 ///
 private static string UrlEncode(string url)
 {
 StringBuilder builder = new StringBuilder();
foreach (char c in url)
 {
 if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))
 builder.Append(c);
 else if (c == ' ')
 builder.Append('+');
 else if ("()*-_.!".IndexOf(c) >= 0)
 builder.Append(c);
 else
 builder.AppendFormat("%{0:X2}", (byte)c);
 }
 return builder.ToString();
 }
///
 /// Calcula un valor hash requerido por Google
 ///
 private static string ComputeHash(string url)
 {
 UInt32 a, b;
 UInt32 c = 0xE6359A60;
 int k = 0;
 int len;
// Modifica la URL
 url = string.Format("info:{0}", url);
a = b = 0x9E3779B9;
 len = url.Length;
while (len >= 12)
 {
 a += (UInt32)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
 b += (UInt32)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24));
 c += (UInt32)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24));
 Mix(ref a, ref b, ref c);
 k += 12;
 len -= 12;
 }
c += (UInt32)url.Length;
 switch (len)
 {
 case 11:
 c += (UInt32)(url[k + 10] << 24);
 goto case 10;
 case 10:
 c += (UInt32)(url[k + 9] << 16);
 goto case 9;
 case 9:
 c += (UInt32)(url[k + 8] << 8);
 goto case 8;
 case 8:
 b += (UInt32)(url[k + 7] << 24);
 goto case 7;
 case 7:
 b += (UInt32)(url[k + 6] << 16);
 goto case 6;
 case 6:
 b += (UInt32)(url[k + 5] << 8);
 goto case 5;
 case 5:
 b += (UInt32)(url[k + 4]);
 goto case 4;
 case 4:
 a += (UInt32)(url[k + 3] << 24);
 goto case 3;
 case 3:
 a += (UInt32)(url[k + 2] << 16);
 goto case 2;
 case 2:
 a += (UInt32)(url[k + 1] << 8);
 goto case 1;
 case 1:
 a += (UInt32)(url[k + 0]);
 break;
 default:
 break;
 }
 Mix(ref a, ref b, ref c);
 return string.Format("6{0}", c);
 }
 ///
 /// ComputeHash() método de ayuda
 ///
 private static void Mix(ref UInt32 a, ref UInt32 b, ref UInt32 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;
 }
 }

Código en formato .txt -> PageRank

Etiquetas:, ,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Home SEO El algoritmo de PageRank de google al detalle.
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies