Récuperer le PR d'une URL

  • Auteur de la discussion Auteur de la discussion OTP
  • Date de début Date de début
WRInaute accro
Bonjour,

Comment peut-on récupérer le PR d'une URL, facilement ?
(Sans passer par les sites spécialisés qui s'offrent un BL à chaque affichage d'un PR).

Merci d'avance,

Michaël
 
WRInaute occasionnel
l'annuaire mydir récupere le pr de chaque site inscrit. donc dans le code source, on doit trouver une function() qui permet cela. Je vais regarder cette semaine, pour trouver le bout qui t'intéresse
 
WRInaute accro
NextGeneration a dit:
l'annuaire mydir récupere le pr de chaque site inscrit. donc dans le code source, on doit trouver une function() qui permet cela. Je vais regarder cette semaine, pour trouver le bout qui t'intéresse
j'ai regardé un peu, ça a l'air space quand même. C'est la seule partie à laquelle je n'ai pas touché. Sauf à enlever l'automatisation de la requête, qui n'est plus faite qu'à la demande maintenant.
 
WRInaute impliqué
j'ai regardé un peu, ça a l'air space quand même. C'est la seule partie à laquelle je n'ai pas touché. Sauf à enlever l'automatisation de la requête, qui n'est plus faite qu'à la demande maintenant.

tu as le bout de code sous la main ? merci :)
 
WRInaute accro
je crois qu'il doit tout y avoir
Code:
// Calcul PR
define('GMAG', 0xE6359A60);

//unsigned shift right
function zeroFill($a, $b)
{
    $z = hexdec(80000000);
        if ($z & $a)
        {
            $a = ($a>>1);
            $a &= (~$z);
            $a |= 0x40000000;
            $a = ($a>>($b-1));
        }
        else
        {
            $a = ($a>>$b);
        }
        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 GCH($adress, $length=null, $init=GMAG) {
    if(is_null($length)) {
        $length = sizeof($adress);
    }
    $a = $b = 0x9E3779B9;
    $c = $init;
    $k = 0;
    $len = $length;
    while($len >= 12) {
        $a += ($adress[$k+0] +($adress[$k+1]<<8) +($adress[$k+2]<<16)
+($adress[$k+3]<<24));
        $b += ($adress[$k+4] +($adress[$k+5]<<8) +($adress[$k+6]<<16)
+($adress[$k+7]<<24));
        $c += ($adress[$k+8] +($adress[$k+9]<<8)
+($adress[$k+10]<<16)+($adress[$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)              /* all the case statements fall through */
    {
        case 11: $c+=($adress[$k+10]<<24);
        case 10: $c+=($adress[$k+9]<<16);
        case 9 : $c+=($adress[$k+8]<<8);
          /* the first byte of c is reserved for the length */
        case 8 : $b+=($adress[$k+7]<<24);
        case 7 : $b+=($adress[$k+6]<<16);
        case 6 : $b+=($adress[$k+5]<<8);
        case 5 : $b+=($adress[$k+4]);
        case 4 : $a+=($adress[$k+3]<<24);
        case 3 : $a+=($adress[$k+2]<<16);
        case 2 : $a+=($adress[$k+1]<<8);
        case 1 : $a+=($adress[$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;
}

function getPR($_url) {
  $adress = 'info:'.$_url;
  $ch = GCH(strord($adress));
  $adress='info:'.urlencode($_url);
  $pr =@file("https://www.google.com/search?client=navclient-auto&ch=6$ch&ie=UTF-8&oe=UTF-8&features=Rank&q=$adress");
  $pr_str = @implode("", $pr);
  return substr($pr_str,strrpos($pr_str, ":")+1);
}
 
WRInaute impliqué
merci bcp Leonick
je vois pas ce que tu trouve de bizarre dans le code... es tu sur de m'avoir tout donné ? dans tous les cas je vais comparé cette version avec quelques autres que j'ai déja.

Pour voir, sans se casser la tete, pour chaque page, le PR il existe un petit soft téléchargeable à -http://www.webkeysoft.com/keyword_crawler.php
(il faut cocher l'option PR) j'ai fait quelques test çà semble correct.

Par contre la source que j'ai donné plus haut, je ne sais pas pourquoi ne donne rien. Je vais un petit peu me prendre la tête sur ce truc.
 
WRInaute impliqué
Comment peut-on récupérer le PR d'une URL, facilement ?
(Sans passer par les sites spécialisés qui s'offrent un BL à chaque affichage d'un PR).

Bin le code de mydir c pas le top, doit manquer des trucs ou je sais pas. Me renvoi toujours des trucs aberrant, marche pas sur ovh ...

Par contre j'ai trouvé (php.source) et bricolé un tout petit peu le code ci-dessous. $url étant l'url à analyser (par défaut celle de la page active). Ou bien tu l'envoi ds une table sql si tu veux faire des stats ou autres (la variable induite par getrank($url) )

Code:
<?php 
// powered by anyone
//Definie la constante "GOOGLE_MAGIC" 
define("GOOGLE_MAGIC", 0xE6359A60); 


function zeroFill($a, $b) { 
  $z = hexdec(80000000); 
  if ($z & $a) { 
    $a = ($a>>1); 
    $a &= (~$z); 
    $a |= 0x40000000; 
    $a = ($a>>($b-1)); 
  } 
  else { 
    $a = ($a>>$b); 
  } 
  return $a; 
} 
//Cette fonction est utilisée pour le calcul du checksum de Google 
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); 
} 

// Calcul le checksum de Google pour une URL donnée 
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)      /* Toute les cases retournent vraie */ 
    { 
    case 11: $c+=($url[$k+10]<<24); 
    case 10: $c+=($url[$k+9]<<16); 
    case 9 : $c+=($url[$k+8]<<8); 
      /* Le premier byte de c est réservé pour la longueur */ 
    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: rien à additionner */ 
  } 
  $mix = mix($a,$b,$c); 
  return $mix[2]; 
} 
// Converti une chaine dans le tableau d'entiers 
// contenant une valeur numérique de caractères 
function strord($string) { 
  for($i=0;$i<strlen($string);$i++) { 
    $result[$i] = ord($string{$i}); 
  } 
  return $result; 
} 


 // Fonction utilisée pour obtenir la valeur du PageRank. 
 function getrank($url, $prefix="info:", $datacenter="www.google.com") { 
 //Si $prefix est "info:", alors la Toolbar pagerank sera retourné. 
 $url = $prefix.$url; 
 //Prend le checksum de Google pour $url utilisant la fonction GoogleCH. 
 $ch = GoogleCH(strord($url)); 
$file="http://$datacenter/search?client=navclient-auto"; 
$file.="&ch=6$ch&features=Rank&q=$url"; 
// si le rank n'existe pas renvoi n/A
  $oldlevel = error_reporting(0); 
  $data = file($file); 
  error_reporting($oldlevel); 
  if(!$data || preg_match("/(.*)\.(.*)/i", $url)==0) return "N/A"; 
  $rankarray = explode (":", $data[2]); 
  $rank = trim($rankarray[2]); 
 //Renvoie N/A si il n'y a pas de rank. 
  if($rank=="") return "N/A"; 
  return $rank; 
}

// on récupère l'url courante.

function url_actuelle()
{
     return  $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}

$url = url_actuelle(); 

// Affiche le PageRank 

echo $url." a pour PR : ".getrank($url); 

?>
 
WRInaute occasionnel
if(!$data || preg_match("/(.*)\.(.*)/i", $url)==0) return "N/A";

if($rank=="") return "N/A";

3 Raisons pour ce "N/A" :

- Page inexistante
- Url mal formée ( cf la regex )
- Pagerank non attribué

( cf code source )
 
WRInaute accro
A voir : -http://www.thewindpower.net/---

Cette page est pourtant PR5.

Pour keyword_crawler, je l'ai chargé, mais ça ne convient pas à ce que je veux faire.
 
WRInaute impliqué
bin si çà marche http://www.altenide.com/pr.php (pour ta page http://www.thewindpower.net/) il y a bien un retour PR = 5

j'ai juste changer çà dans le code :

Code:
// on récupère l'url courante. 

//function url_actuelle() 
//{ 
//     return  $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; 
//} 

$url = "http://www.thewindpower.net/"; 

// Affiche le PageRank 

echo $url." a pour PR : ".getrank($url);

car par défault c'est le pr de la page courante qui est visée. Donc si tu fait une page "x" pour en testé une "y" modifie cette portion de code.

autre exemple pour une autre de tes pages : http://www.altenide.com/pr2.php

sisisis il marche ce bout de code.
 
WRInaute accro
J'ai justement ajouté le
Code:
$url = "http://www.thewindpower.net/";

Ca peut venir de l'hébergement ?
 
WRInaute impliqué
tu as commentarisées les lignes :

Code:
// on récupère l'url courante. 

//function url_actuelle() 
//{ 
//     return  $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; 
//}
??

sinon

oui. des hébergeurs pourraient bloquer ce script :p beurk. mais si tu as un autre hébergement tu peux faire le test.

ou si tu veux je te fait une page (privée) avec la liste te tes url à tester. (en mp)

euh j'ai testé sur un 90plan OVH çà marche, sur amen pro aussi

Quel est ton hébergeur ?
 
WRInaute accro
Non, ne n'ai pas passé en commentaire. Je pensais que l'instruction suivante effaçait la précedente.

Jai un 60gp d'OVH.

Merci pour ta proposition, mais c'est pour un annuaire, je veux donc que ce soit dynamique.
 
WRInaute impliqué
bin ce sera dynamique ... et en temps réel ... lol 60Gp sur ovh c pas hébergement pro, çà doit expliquer le pb du sript.
 
WRInaute accro
Nno, ce n'est pas pro, mais ça ne m'avait jamais limité jusqu'ici.
Je regarde de nouveau ce soir pour vérifier...
 
Discussions similaires
Haut