Seções iMasters
JavaScript + PHP

Classe PHP para o PageRank do Google

Enquanto desenvolvedores e
designers podem debater sobre a importância de diferentes estratégias para a
otimização dos mecanismos de busca, uma métrica que simplesmente não pode ser
discutida é o PageRank de uma página, ou sua importância em gerar tráfego
para o site. Atingir um PageRank melhor foi uma das considerações ao refazermos
o design do nosso blog. Podemos discutir como alcançar um PageRank melhor em outra ocasião, mas este artigo irá focar em como você pode recuperar o PageRank de uma página usando uma
pequena classe PHP que criei.

O
PHP

As funções básicas dentro dessa classe foram criadas por
Jamie
Scott – todo o
crédito das funções básicas vão para ele. Eu simplesmente coloquei a
funcionalidade dentro do formato da classe PHP para facilitar o uso e para atualizar
o código para que ele fosse um pouco mais transparente. No que diz respeito às
classes PHP, esta é bem pequena:

// Declare the class
class GooglePageRankChecker {

// Track the instance
private static $instance;

// Constructor
function getRank($page) {
// Create the instance, if one isn't created yet
if(!isset(self::$instance)) {
self::$instance = new self();
}
// Return the result
return self::$instance->check($page);
}


// Convert string to a number
function stringToNumber($string,$check,$magic) {
$int32 = 4294967296; // 2^32
$length = strlen($string);
for ($i = 0; $i < $length; $i++) {
$check *= $magic;
//If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31),
// the result of converting to integer is undefined
// refer to http://www.php.net/manual/en/language.types.integer.php
if($check >= $int32) {
$check = ($check - $int32 * (int) ($check / $int32));
//if the check less than -2^31
$check = ($check < -($int32 / 2)) ? ($check + $int32) : $check;
}
$check += ord($string{$i});
}
return $check;
}

// Create a url hash
function createHash($string) {
$check1 = $this->stringToNumber($string, 0x1505, 0x21);
$check2 = $this->stringToNumber($string, 0, 0x1003F);

$factor = 4;
$halfFactor = $factor/2;

$check1 >>= $halfFactor;
$check1 = (($check1 >> $factor) & 0x3FFFFC0 ) | ($check1 & 0x3F);
$check1 = (($check1 >> $factor) & 0x3FFC00 ) | ($check1 & 0x3FF);
$check1 = (($check1 >> $factor) & 0x3C000 ) | ($check1 & 0x3FFF);

$calc1 = (((($check1 & 0x3C0) << $factor) | ($check1 & 0x3C)) << $halfFactor ) | ($check2 & 0xF0F );
$calc2 = (((($check1 & 0xFFFFC000) << $factor) | ($check1 & 0x3C00)) << 0xA) | ($check2 & 0xF0F0000 );

return ($calc1 | $calc2);
}

// Create checksum for hash
function checkHash($hashNumber)
{
$check = 0;
$flag = 0;

$hashString = sprintf('%u', $hashNumber) ;
$length = strlen($hashString);

for ($i = $length - 1; $i >= 0; $i --) {
$r = $hashString{$i};
if(1 === ($flag % 2)) {
$r += $r;
$r = (int)($r / 10) + ($r % 10);
}
$check += $r;
$flag ++;
}

$check %= 10;
if(0 !== $check) {
$check = 10 - $check;
if(1 === ($flag % 2) ) {
if(1 === ($check % 2)) {
$check += 9;
}
$check >>= 1;
}
}

return '7'.$check.$hashString;
}

function check($page) {

// Open a socket to the toolbarqueries address, used by Google Toolbar
$socket = fsockopen("toolbarqueries.google.com", 80, $errno, $errstr, 30);

// If a connection can be established
if($socket) {
// Prep socket headers
$out = "GET /search?client=navclient-auto&ch=".$this->checkHash($this->createHash($page))."&features=Rank&q=info:".$page."&num=100&filter=0 HTTP/1.1rn";
$out .= "Host: toolbarqueries.google.comrn";
$out .= "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)rn";
$out .= "Connection: Closernrn";

// Write settings to the socket
fwrite($socket, $out);

// When a response is received...
$result = "";
while(!feof($socket)) {
$data = fgets($socket, 128);
$pos = strpos($data, "Rank_");
if($pos !== false){
$pagerank = substr($data, $pos + 9);
$result += $pagerank;
}
}
// Close the connection
fclose($socket);

// Return the rank!
return $result;
}
}
}

Os métodos createHash e
checkHash geram as operações matemáticas profundas. Uma vez que elas estiverem
fora do caminho, o método check se conecta ao servidor da barra de ferramentas
do Google, disfarçando-se como uma barra de ferramenta através do cabeçalho User-Agent,
para chegar ao PageRank da página. Um padrão único é usado, uma vez que criar
instâncias individuais não é importante:

$rank = GooglePageRankChecker::getRank("davidwalsh.name"); // returns "5"

O número fornecido representa o PageRank para a URL fornecida! Essa classe PHP pode ser usada
sozinha, mas eu criei um script comandado pelo MooTools para recuperar o
endereço do PageRank através de um simples AJAX.

O
MooTools JavaScript

Este script quick inline do
MooTools responde ao clique de um botão, gerando um chamado AJAX para um script
PHP que executa a classe fornecida acima:

// When the DOM is ready
window.addEvent("domready",function() {

// When the form is submitted...
var form = document.id("rankForm"), request, display, domain;
form.addEvent("submit",function(e) {
// Stop the event
if(e) e.stop();

// Create request, if not already created
if(!request) {
domain = document.id("domain");
display = document.id("rankerDisplay");
request = new Request({
url: "pagerank-checker.php",
method: "post",
onComplete: function(response) {
display.setStyle("display","block").set("text","Page rank for " + domainValue + " is: " + response);
}
});
}

// Get the value fo the URL
domainValue = domain.get("value");

// Send the request
request.send({ data: { domain: domainValue } });
});

});

Utilizando este pedaço de Javascript como no exemplo, você pode
facilmente adicionar um verificador javascript para o Google PageRank
com o framework que você escolher.

?

Texto original em disponível em http://davidwalsh.name/google-pagerank

Mensagem do anunciante:

Em apoio à evangelização do WordPress, os cursos da Apiki são gratuitos para que você possa se especializar na plataforma que mais cresce no mundo. Vagas limitadas, Inscreva-se agora.

Comente também

1 Comentário

chato

cURL.

Não precisa de socket.

Qual a sua opinião?