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

Questo articolo ti è stato utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

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

  1. 14 giu, 2007 Michele Mader:

    Non mi sembra che il codice funzioni.

  2. 18 giu, 2007 undolog » Blog Archive » Miglioramenti allo script per il Google PageRank:

    [...] 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. 22 lug, 2007 Amico Webmaster:

    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> INSERIMENTO CODICE:
<pre></pre>         // blocco generico
[code][/code]       // blocco generico
[as][/as]           // Actionscript
[css][/css]         // CSS Style Sheet
[html][/html]       // HTML
[js][/js]           // Javascript
[objc][/objc]       // Objective-C
[php][/php]         // PHP
[sql][/sql]         // SQL