Aller au contenu

calcul pagerank


elomaster

Sujets conseillés

Il te faudrait un très (très, très, très...) gros ordi, ayant la capacité d'indexer et avoir en cache plus de 8 milliards de pages, et procéder à plusieurs itérations sur la matrice des liens du Web.

Autrement dit, si tu n'as pas la puissance de calcul de Google, ce n'est pas possible.

Je te suggère de lire les articles sur le Pagerank dans les publications du Hub, en commençant par Le PageRank par l'exemple et en continuant avec L’algorithme du PageRank expliqué (il y a une 2ème partie)

;) Dan

Lien vers le commentaire
Partager sur d’autres sites

en fait je crois que je me suis mal exprimé. Y a plein de site qui proposent d'afficher un pagerank,il font comment, y pas un script (j'en est trouvé quelque un qui marchent pas), ou alors, il on un trés trés gros ordi

Lien vers le commentaire
Partager sur d’autres sites

en fait je crois que je me suis mal exprimé. Y a plein de site qui proposent d'afficher un pagerank,il font comment, y pas un script (j'en est trouvé quelque un qui marchent pas), ou alors, il on un trés trés gros ordi

Effectivement, tu t'étais mal exprimé :lol:

Il existe des scripts, mais la difficulté réside dans le calcul du checksum d'une URL.

Il n'existe pas à l'heure actuelle de fonction utilisant le dernier algorithme de Google, mais les précédentes fonctionnent toujours.

On les trouve par exemple sur Google, avec une recherche sur Google PageRank Calculator Script (1er résultat)

Dan

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Merci du tuyau. Cependant j'ai recupérer le script du site googlecommunities mais il marche pas :gueule:, il existe pas d'autres scripts tout fait :unsure:

Modifié par elomaster
Lien vers le commentaire
Partager sur d’autres sites

Comment il ne marche pas ? Tu as bien un hébergement offrant le Php, non ?

Tous les scripts disponibles sur le net sont du même ordre... et basés sur le crack de l'algo du checksum par Alex Stapleton.

Dan

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

le mieux est de montrer le script, le code source est : ici

et j'ai une erreur du type :

Parse error: parse error, unexpected T_VARIABLE in /home.2/infosenl/www/pagerank.php on line 28

je sais pas pourquoi ???

Modifié par elomaster
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Personnelement pour simple étude de cas j'ai utilisé celui-là...

Mais je ne peux pas te conceiller de l'utiliser à grande échelle, Google précise dans son User Agreement que seul la barre de Google est sensé utiliser ce système si je me souviens bien...

Il serait possible de simplier sans utiliser de parser XML, mais c'est tou de même plus sûr, de n'est pas à l'abris d'un changement de syntaxe de la part de Google et cette méthode est assez felxible...


// Google PageRank Calculator function by ZeNiTRaM
// Licensed under the GPL License
// Uses code from The Google Checksum Calculator,
// by Alex Stapleton, Andy Doctorow, Vijay "Cyberax" Bhatter, and a few others,
// licensed under the public domain and XMLize.php by Hans Anderson
// Use: $pagerank = GetPagerank("http://www.google.es");

function getPageRank($urlo) {
 define('GOOGLE_MAGIC', 0xE6359A60);
 function xmlize($data, $WHITE=1) {
   $data = trim($data);
   $vals = $index = $array = array();
   $parser = xml_parser_create();
   xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
   xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, $WHITE);
   if ( !xml_parse_into_struct($parser, $data, $vals, $index) ){
     die(sprintf("XML error: %s at line %d",
     xml_error_string(xml_get_error_code($parser)),
     xml_get_current_line_number($parser)));
   }
   xml_parser_free($parser);
   $i = 0;
   
   $tagname = $vals[$i]['tag'];
   if ( isset ($vals[$i]['attributes'] ) ) {
     $array[$tagname]['@'] = $vals[$i]['attributes'];
   } else {
     $array[$tagname]['@'] = array();
   }
   $array[$tagname]["#"] = xml_depth($vals, $i);
   return $array;
 }

 function xml_depth($vals, &$i) {
   $children = array();

   if ( isset($vals[$i]['value']) ) {
     array_push($children, $vals[$i]['value']);
   }
   while (++$i < count($vals)) {
     switch ($vals[$i]['type']) {
     case 'open':
       if ( isset ( $vals[$i]['tag'] ) )  {
         $tagname = $vals[$i]['tag'];
       } else {
         $tagname = '';
       }

       if ( isset ( $children[$tagname] ) ) {
         $size = sizeof($children[$tagname]);
       } else {
         $size = 0;
       }

       if ( isset ( $vals[$i]['attributes'] ) ) {
       $children[$tagname][$size]['@'] = $vals[$i]["attributes"];
       }
       $children[$tagname][$size]['#'] = xml_depth($vals, $i);
       
       break;

       case 'cdata':
         array_push($children, $vals[$i]['value']);
         break;


       case 'complete':
         $tagname = $vals[$i]['tag'];
         
         if( isset ($children[$tagname]) ) {
           $size = sizeof($children[$tagname]);
         } else {
           $size = 0;
         }
         
         if( isset ( $vals[$i]['value'] ) ) {
           $children[$tagname][$size]["#"] = $vals[$i]['value'];
         } else {
           $children[$tagname][$size]["#"] = '';
         }
         
         if ( isset ($vals[$i]['attributes']) ) {
           $children[$tagname][$size]['@']  = $vals[$i]['attributes'];
         }
         
         break;

       case 'close':
         return $children;
         break;
     }
   }
   return $children;
 }

 function traverse_xmlize($array, $arrName = "array", $level = 0) {
   foreach($array as $key=>$val)  {
     if ( is_array($val) ) {
       traverse_xmlize($val, $arrName . "[" . $key . "]", $level + 1);
     } else {
       $GLOBALS['traverse_array'][] = '$' . $arrName . '[' . $key . '] = "' . $val . "\"\n";
     }
   }
   return 1;
 }

 function zeroFill($a, $ {
   $z = hexdec(80000000);
   if ($z & $a) {
     $a = ($a>>1);
     $a &= (~$z);
     $a |= 0x40000000;
     $a = ($a>>($b-1));
   } else {
     $a = ($a>>$;
   }
   return $a;
 }


 function mix($a,$b,$c) {
   $a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
   $b -= $c; $b -= $a; $b ^= ($a<<8);
   $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
   $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
   $b -= $c; $b -= $a; $b ^= ($a<<16);
   $c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
   $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));
   $b -= $c; $b -= $a; $b ^= ($a<<10);
   $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
   return array($a,$b,$c);
 }

 function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) {
   if(is_null($length)) {
     $length = sizeof($url);
   }
   $a = $b = 0x9E3779B9;
   $c = $init;
   $k = 0;
   $len = $length;
   while($len >= 12) {
     $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
     $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
     $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
     $mix = mix($a,$b,$c);
     $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
     $k += 12;
     $len -= 12;
   }

   $c += $length;
   switch($len) {
     case 11: $c+=($url[$k+10]<<24);
     case 10: $c+=($url[$k+9]<<16);
     case 9 : $c+=($url[$k+8]<<8);
     /* the first byte of c is reserved for the length */
     case 8 : $b+=($url[$k+7]<<24);
     case 7 : $b+=($url[$k+6]<<16);
     case 6 : $b+=($url[$k+5]<<8);
     case 5 : $b+=($url[$k+4]);
     case 4 : $a+=($url[$k+3]<<24);
     case 3 : $a+=($url[$k+2]<<16);
     case 2 : $a+=($url[$k+1]<<8);
     case 1 : $a+=($url[$k+0]);
     /* case 0: nothing left to add */
   }
   $mix = mix($a,$b,$c);
   /*-------------------------------------------- report the result */
   return $mix[2];
 }

 //converts a string into an array of integers containing the numeric value of the char
 function strord($string) {
   for($i=0;$i<strlen($string);$i++) {
     $result[$i] = ord($string{$i});
   }
   return $result;
 }

 $url = 'info:'.$urlo;
 $ch = GoogleCH(strord($url));
 $chf = "6$ch";
 
 $file = @file("http://www.google.com/search?client=navclient-auto&ch=".$chf."&q=".$url);
 $file_str = implode("", $file);

 if(preg_match("/<rk\>([0-9]*)\<\/rk\>/i",$file_str,$matches) !== false) {
   $pr = $matches[1];
 } else {
   $pr = 0;
 }
 
 return $pr;
}


Lien vers le commentaire
Partager sur d’autres sites

le mieux est de montrer le script, le code source est  : ici

et j'ai une erreur du type :

Parse error: parse error, unexpected T_VARIABLE in /home.2/infosenl/www/pagerank.php on line 28

je sais pas pourquoi ???

Tu as probablement mal copié le script, car en le copiant et l'exécutant localement, il fonctionne parfaitement.

Fais attention à transmettre ce script en mode ASCII, et non en mode binaire si tu utilises ftp !

Dan

Lien vers le commentaire
Partager sur d’autres sites

Mais je ne peux pas te conceiller de l'utiliser à grande échelle, Google précise dans son User Agreement que seul la barre de Google est sensé utiliser ce système si je me souviens bien...

Tout à fait ! Une des manières les plus sûres de demander le pagerank est à mon avis d'utiliser curl. Au moins il permet de jouer sur le User_Agent, et cela risquera moins de générer une anomalie chez Google.

Il faut aussi limiter les accès dans le temps, et ne pas demander une liste d'URLs comme un furieux. :lol:

Lien vers le commentaire
Partager sur d’autres sites

Dan, pourrais-tu me dire pourquoi quand je poste dans une "CodeBox" je perds toute l'imdentation (que ce soit des tabulations ou des espaces) ?

J'avais utilisé la "Codebox" pour le précédent message, mais j'avais eu ce problème, c'est pour cela que j'avais utilis le simple "Code"


// Google PageRank Calculator function by ZeNiTRaM
// Licensed under the GPL License
// Uses code from The Google Checksum Calculator, by Alex Stapleton, Andy Doctorow, Vijay "Cyberax" Bhatter, and a few others, licensed under the public domain (http://www.mobileread.com/forums/showpost.php?p=7769&postcount=87) and XMLize.php by Hans Anderson (http://www.hansanderson.com/php/xml/).
// Use: $pagerank = GetPagerank("http://www.google.es");

function getPageRank($urlo) {
define('GOOGLE_MAGIC', 0xE6359A60);
function xmlize($data, $WHITE=1) {
$data = trim($data);
$vals = $index = $array = array();
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, $WHITE);
if ( !xml_parse_into_struct($parser, $data, $vals, $index) ){
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
$i = 0;

$tagname = $vals[$i]['tag'];
if ( isset ($vals[$i]['attributes'] ) ) {
$array[$tagname]['@'] = $vals[$i]['attributes'];
} else {
$array[$tagname]['@'] = array();
}
$array[$tagname]["#"] = xml_depth($vals, $i);
return $array;
}

function xml_depth($vals, &$i) {
$children = array();

if ( isset($vals[$i]['value']) ) {
array_push($children, $vals[$i]['value']);
}
while (++$i < count($vals)) {
switch ($vals[$i]['type']) {
case 'open':
if ( isset ( $vals[$i]['tag'] ) ) {
$tagname = $vals[$i]['tag'];
} else {
$tagname = '';
}

if ( isset ( $children[$tagname] ) ) {
$size = sizeof($children[$tagname]);
} else {
$size = 0;
}

if ( isset ( $vals[$i]['attributes'] ) ) {
$children[$tagname][$size]['@'] = $vals[$i]["attributes"];
}
$children[$tagname][$size]['#'] = xml_depth($vals, $i);

break;

case 'cdata':
array_push($children, $vals[$i]['value']);
break;


case 'complete':
$tagname = $vals[$i]['tag'];

if( isset ($children[$tagname]) ) {
$size = sizeof($children[$tagname]);
} else {
$size = 0;
}

if( isset ( $vals[$i]['value'] ) ) {
$children[$tagname][$size]["#"] = $vals[$i]['value'];
} else {
$children[$tagname][$size]["#"] = '';
}

if ( isset ($vals[$i]['attributes']) ) {
$children[$tagname][$size]['@'] = $vals[$i]['attributes'];
}

break;

case 'close':
return $children;
break;
}
}
return $children;
}

function traverse_xmlize($array, $arrName = "array", $level = 0) {
foreach($array as $key=>$val) {
if ( is_array($val) ) {
traverse_xmlize($val, $arrName . "[" . $key . "]", $level + 1);
} else {
$GLOBALS['traverse_array'][] = '$' . $arrName . '[' . $key . '] = "' . $val . "\"\n";
}
}
return 1;
}

function zeroFill($a, $ {
$z = hexdec(80000000);
if ($z & $a) {
$a = ($a>>1);
$a &= (~$z);
$a |= 0x40000000;
$a = ($a>>($b-1));
} else {
$a = ($a>>$;
}
return $a;
}


function mix($a,$b,$c) {
$a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
$b -= $c; $b -= $a; $b ^= ($a<<8);
$c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
$a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
$b -= $c; $b -= $a; $b ^= ($a<<16);
$c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
$a -= $b; $a -= $c; $a ^= (zeroFill($c,3));
$b -= $c; $b -= $a; $b ^= ($a<<10);
$c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
return array($a,$b,$c);
}

function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) {
if(is_null($length)) {
$length = sizeof($url);
}
$a = $b = 0x9E3779B9;
$c = $init;
$k = 0;
$len = $length;
while($len >= 12) {
$a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
$b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
$c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
$mix = mix($a,$b,$c);
$a = $mix[0]; $b = $mix[1]; $c = $mix[2];
$k += 12;
$len -= 12;
}

$c += $length;
switch($len) {
case 11: $c+=($url[$k+10]<<24);
case 10: $c+=($url[$k+9]<<16);
case 9 : $c+=($url[$k+8]<<8);
/* the first byte of c is reserved for the length */
case 8 : $b+=($url[$k+7]<<24);
case 7 : $b+=($url[$k+6]<<16);
case 6 : $b+=($url[$k+5]<<8);
case 5 : $b+=($url[$k+4]);
case 4 : $a+=($url[$k+3]<<24);
case 3 : $a+=($url[$k+2]<<16);
case 2 : $a+=($url[$k+1]<<8);
case 1 : $a+=($url[$k+0]);
/* case 0: nothing left to add */
}
$mix = mix($a,$b,$c);
/*-------------------------------------------- report the result */
return $mix[2];
}

//converts a string into an array of integers containing the numeric value of the char
function strord($string) {
for($i=0;$i<strlen($string);$i++) {
$result[$i] = ord($string{$i});
}
return $result;
}

$url = 'info:'.$urlo;
$ch = GoogleCH(strord($url));
$chf = "6$ch";

$file = @file("http://www.google.com/search?client=navclient-auto&ch=".$chf."&q=".$url);
$file_str = implode("", $file);

if(preg_match("/<rk\>([0-9]*)\<\/rk\>/i",$file_str,$matches) !== false) {
$pr = $matches[1];
} else {
$pr = 0;
}

return $pr;
}

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Salut TheRec,

Il reste toujours une tabulation, mais les tabs sont remplacés par des espaces (un seul  ). Donc l'indentation du code est bien là, mais assez peu marquée.

Dan

Lien vers le commentaire
Partager sur d’autres sites

Salut ;)

Regarde le message précédent, j'ai fait un "coller" de la même choseque ceque j'avais mis dans le

, lors de mon premier message...et l'indentation est totalement supprimée...c'est de cela que je parle...dans le cas présent ce sont des "espaces" et no des tabulations...
Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Avec la sortie imminente de la V2.1, je ne vais pas ouvrir de ticket support.

La balise CODEBOX est utile, mais n'offre peut-être pas les mêmes fonctionnalités que CODE. Je vérifie cela tout de même.

Lien vers le commentaire
Partager sur d’autres sites

Apparemment c'est juste la propriété de white-space qui n'est pas spécifié pour la CodeBox...mais à toi de voir si tu souhaite attendre la 2.1 ;)

.codemain,
.sqlmain,
.htmlmain
{
background: #FAFCFE;
border: 1px dotted #000;
color: #465584;
font-family: Courier, Courier New, Verdana, Arial, sans-serif;
margin: 0 auto 0 auto;
padding: 2px;
width: 98%;
}

Si on rajoute :

	white-space: pre;

Cela semble résoudre le "problème" ... j'ai fait un tour dans quelques messages et cela semble ne rien casser d'autre ;)

**EDIT**

A noter que cette modification faite, les tabulation sont considérées comme telles et les espaces deviennent des espaces...euh ne serait-ce pas une tautologie ? Presque..mais bon en bref les caractères d'espacements sont considérés comme tels et plus "transformé" ;)

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Apparemment c'est juste la propriété de white-space qui n'est pas spécifié pour la CodeBox...mais à toi de voir si tu souhaite attendre la 2.1 ;)

Peut-être pas, mais je ne ressentais pas trop l'envie de chercher ;)

J'ai ajouté white-space: pre;

Dan

Lien vers le commentaire
Partager sur d’autres sites

Tu as probablement mal copié le script, car en le copiant et l'exécutant localement, il fonctionne parfaitement.

Dan

<{POST_SNAPBACK}>

même en l'executant localement il ne marche pas. En fait j'ai juste fait un copié-collé, peut être que

c'est l'origine du problème (je sais pas comment, mais bon).

Lien vers le commentaire
Partager sur d’autres sites

  • 5 months later...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...