elomaster Posté 8 Août 2005 Posté 8 Août 2005 bonjour a tous je voudrais savoir s'il est possible et comment calculer soi même un pagerank merci
Dan Posté 8 Août 2005 Posté 8 Août 2005 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 Lalgorithme du PageRank expliqué (il y a une 2ème partie) Dan
elomaster Posté 9 Août 2005 Auteur Posté 9 Août 2005 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
Sarc Posté 9 Août 2005 Posté 9 Août 2005 Salut Tu pourras trouver comment afficher son page rank sur myrank.org...
elomaster Posté 9 Août 2005 Auteur Posté 9 Août 2005 Y pas un script qui permet de le faire soi-même?
Dan Posté 9 Août 2005 Posté 9 Août 2005 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é 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
elomaster Posté 9 Août 2005 Auteur Posté 9 Août 2005 (modifié) Merci du tuyau. Cependant j'ai recupérer le script du site googlecommunities mais il marche pas , il existe pas d'autres scripts tout fait Modifié 9 Août 2005 par elomaster
Dan Posté 9 Août 2005 Posté 9 Août 2005 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
elomaster Posté 9 Août 2005 Auteur Posté 9 Août 2005 (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é 9 Août 2005 par elomaster
TheRec Posté 9 Août 2005 Posté 9 Août 2005 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;}
Dan Posté 9 Août 2005 Posté 9 Août 2005 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
Dan Posté 9 Août 2005 Posté 9 Août 2005 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.
TheRec Posté 9 Août 2005 Posté 9 Août 2005 (modifié) 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é 9 Août 2005 par TheRec
Dan Posté 9 Août 2005 Posté 9 Août 2005 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
TheRec Posté 9 Août 2005 Posté 9 Août 2005 (modifié) 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é 9 Août 2005 par TheRec
Dan Posté 9 Août 2005 Posté 9 Août 2005 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.
TheRec Posté 9 Août 2005 Posté 9 Août 2005 (modifié) 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é 9 Août 2005 par TheRec
elomaster Posté 10 Août 2005 Auteur Posté 10 Août 2005 rien a faire,.... j'ai encore recopié le script en l'executant localement, et il ne marche toujours pas.... que faire ???
Dan Posté 10 Août 2005 Posté 10 Août 2005 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
elomaster Posté 10 Août 2005 Auteur Posté 10 Août 2005 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).
TheRec Posté 10 Août 2005 Posté 10 Août 2005 Et a tout hasard, le script que je te propose ne fonctionnerait-il pas ?
elomaster Posté 10 Août 2005 Auteur Posté 10 Août 2005 si quelqu'un a le script sous la main (qui fonctionne) ce serait vraiment sympa de me l'envoyer en piece jointe à l'adresse : elosysteme_AT_free.fr merci d'avance
elomaster Posté 10 Août 2005 Auteur Posté 10 Août 2005 Et a tout hasard, le script que je te propose ne fonctionnerait-il pas ? <{POST_SNAPBACK}> bas non plus,....
elomaster Posté 10 Août 2005 Auteur Posté 10 Août 2005 si si en fait il marche (je perd la boule) merci mais si Dan pouvais s'exprimer plus clairement sur le curl (je voudrais pas utiliser un script qui plait pas a google)
Maze12 Posté 4 Février 2006 Posté 4 Février 2006 Desolé pour ressortir une vielle discution mais je voudrai me developer un outil personel et avec ce script ou celui la (http://www.searchengineengine.com/files/pagerank-code.txt) je n'arrive pas a trouver le bon checksum. Celui que me sort le script n'est pas valide y aurai t'il une astuce a savoir ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant