Creare un visualizzatore del PageRank Google

martedì 5 giugno, 2007
Aggiornamento: servizio non disponibile

Dopo il grande sucesso di BlogBabel Rank ( scherzo ;) ) - propongo un nuovo antipixel in grado di visualizzare il PageRank di Google. In rete si trovano molti servizi che offrono la visualizzazione e il check del Google PageRank. Spesso, comunque, "danno i numeri" o non funzionano per svariati motivi. Ne avevo inserito uno anch'io, ma ultimamente, un po' per colpa di DreamHost (il mio provider), un po' per strani motivi collegati alla rete, aveva iniziato a non funzionare!

La prima cosa di cui dobbiamo preoccuparci è rimediare il codice in grado di catturare il PageRank di Google. La rete è piena di esempi e codici belli e pronti! Ne propongo qui sotto uno in PHP che avevo rimediato tempo addietro e che attualmente uso proprio su undolog.com.

PHP:
  1. define('GOOGLE_MAGIC', 0xE6359A60);
  2.  
  3. function zeroFill($a, $b) {
  4.     $z = hexdec(80000000);
  5.     if ($z & $a) {
  6.         $a = ($a>>1);
  7.         $a &= (~$z);
  8.         $a |= 0x40000000;
  9.         $a = ($a>>($b-1));
  10.     } else { $a = ($a>>$b); }
  11.     return $a;
  12. }
  13.  
  14. function mix($a,$b,$c) {
  15.     $a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
  16.     $b -= $c; $b -= $a; $b ^= ($a<&lt;8);
  17.     $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
  18.     $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
  19.     $b -= $c; $b -= $a; $b ^= ($a<&lt;16);
  20.     $c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
  21.     $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));
  22.     $b -= $c; $b -= $a; $b ^= ($a<&lt;10);
  23.     $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
  24.    
  25.     return array($a,$b,$c);
  26. }
  27.  
  28. function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) {
  29.     if(is_null($length)) { $length = sizeof($url); }
  30.     $a = $b = 0x9E3779B9;
  31.     $c = $init;
  32.     $k = 0;
  33.     $len = $length;
  34.     while($len>= 12)  {
  35.         $a += ($url[$k+0] +($url[$k+1]<&lt;8) +($url[$k+2]<&lt;16) +($url[$k+3]<&lt;24));
  36.         $b += ($url[$k+4] +($url[$k+5]<&lt;8) +($url[$k+6]<&lt;16) +($url[$k+7]<&lt;24));
  37.         $c += ($url[$k+8] +($url[$k+9]<&lt;8) +($url[$k+10]<&lt;16)+($url[$k+11]<&lt;24));
  38.         $mix = mix($a,$b,$c);
  39.         $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
  40.         $k += 12;
  41.         $len -= 12;
  42.     }
  43.  
  44.     $c += $length;
  45.     switch($len) {
  46.         case 11: $c+=($url[$k+10]<&lt;24);
  47.         case 10: $c+=($url[$k+9]<&lt;16);
  48.         case 9 : $c+=($url[$k+8]<&lt;8);
  49.         case 8 : $b+=($url[$k+7]<&lt;24);
  50.         case 7 : $b+=($url[$k+6]<&lt;16);
  51.         case 6 : $b+=($url[$k+5]<&lt;8);
  52.         case 5 : $b+=($url[$k+4]);
  53.         case 4 : $a+=($url[$k+3]<&lt;24);
  54.         case 3 : $a+=($url[$k+2]<&lt;16);
  55.         case 2 : $a+=($url[$k+1]<&lt;8);
  56.         case 1 : $a+=($url[$k+0]);
  57.     }
  58.     $mix = mix($a,$b,$c);
  59.     return $mix[2];
  60. }
  61. function strord($string) {
  62.     for($i=0;$i<strlen($string);$i++) {$result[$i] = ord($string{$i});}
  63.     return $result;
  64. }
  65.  
  66. function ReadPR($link) {
  67.     $fp = fsockopen ("www.google.com", 80, $errno, $errstr, 30);
  68.     if (!$fp) {
  69.         echo "$errstr ($errno)\n";
  70.         exit(1);
  71.     } else {
  72.         $out = "GET $link HTTP/1.0\r\n";
  73.         $out .= "Host: toolbarqueries.google.com\r\n";
  74.         $out .= "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114.9-big; Windows 5.2)\r\n";
  75.         $out .= "Connection: Close\r\n\r\n";
  76.         fwrite($fp, $out);
  77.         do {
  78.             $line = fgets($fp, 128);
  79.         } while ($line !== "\r\n");
  80.         $data = fread($fp,8192);
  81.         fclose ($fp);
  82.         return $data;
  83.     }
  84. }
  85.  
  86. function GetPR($url) {
  87.     $url ='info:'.$url;
  88.     $ch = GoogleCH(strord($url));
  89.     $data = ReadPR("/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url");
  90.     $rankarray = explode (':', $data);
  91.     return $rankarray[2];
  92. }
  93. if ( isset($_GET['url']) && $_GET['url'] !== '' ) {
  94.     $gr = trim(GetPR($_GET['url']));
  95.     header( "Location: http://www.undolog.com/services/gpr/$gr.gif");
  96. }

NOTA: mi scuso con l'autore originale ma nella versione che ho trovato io non erano presenti commenti o note di copyright/licenza!

Commentare il codice PHP esonera da questo Post, tuttavia è facile intuire che la complessità dei calcoli svolti sia opera di Google stessa; questo codice, insomma, sarà uscito da qualche ufficio Google...

La parte che potete personalizzare è la seguente:

PHP:
  1. if ( isset($_GET['url']) && $_GET['url'] !== '' ) {
  2.     $gr = trim(GetPR($_GET['url']));
  3.     header( "Location: http://www.undolog.com/services/gpr/$gr.gif");
  4. }

Il codice che uso per visualizzarlo sulla pagina è:

HTML:
  1. <a target="_blank" href="http://www.undolog.com"><img src="http://www.undolog.com/services/gr.php?url=http://www.undolog.com" border="0" alt=""/></a>

Una nota tecnica interessante riguarda la sezione di codice PHP che recupera la "pagina" Google che contiene il nostro PageRank. Com'è possibile vedere dall'estratto di codice qui sotto, invece di usare le funzioni della libreria CURL (già viste in altri Post) o una fopen(), si apre direttamente un socket tramite la funzione fsockopen(). In pratica si esegue una vera e propria connessione FTP (sulla porta 80 - standard del protocollo HTTP) richiedendo (come fa il nostro browser) la pagina desiderata:

PHP:
  1. $fp = fsockopen ("www.google.com", 80, $errno, $errstr, 30);

La parte creativa (e qui potete sbizzarrirvi) riguarda invece l'immagine grafica dell'antipixel. In questo caso è tutto abbastanza semplice visto che il PageRank di Google varia da un minimo di 0 (zero) a un massimo di 10 (dieci). Possiamo quindi preparare 11 "immaginine" da richiamare in base al PageRank calcolato, come mostrato in figura qui sotto:

Nel mio caso ho nominato le pagine in: 0.gif, 1.gif, 2.gif, ..., 10.gif (la prima da evitare, l'ultima da sognare!)

Post correlati

3 commenti a: “Creare un visualizzatore del PageRank Google”

  1. getAvatar 1.0 giovedì 14 giugno, 2007 alle 09:52
    Michele Mader ha detto:

    Non mi sembra che il codice funzioni.

  2. getAvatar 1.0 lunedì 18 giugno, 2007 alle 16:23
    undolog » Blog Archive » Miglioramenti allo script per il Google PageRank ha detto:

    [...] Miglioramenti allo script per il Google PageRank Tags: antipixel, google, Google PageRank Viever, Internet, PageRank, PHP, Sviluppo, WordpressGrazie a Michele Mader per aver trovato e risolto un problema sul codice per la visualizzazione del Rank di Google. Trovate i dettagli qui. antipixel, google, Google PageRank Viever, Internet, PageRank, PHP, Sviluppo, Wordpress Queste icone linkano i siti di social bookmarking sui quali i lettori possono condividere e trovare nuove pagine web. [...]

  3. getAvatar 1.0 domenica 22 luglio, 2007 alle 18:19
    Amico Webmaster ha detto:

    Qualcuno può aiutarmi.
    Provato in tutte le manieri possibili il php.
    Non funziona.
    Meglio
    IO non riesco a farlo funzionare
    Cordiali saluti

Lascia un commento

TAG XHTML permessi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Usa <pre> per racchiudere codice