Скрипт определения PR

Y
На сайте с 15.06.2005
Offline
10
2593

Кто может подбросить сабж, который корректно работает с УРЛами, содержащими амперсанды и вопросительные знаки (параметры, говоря проще)?

В рунете порылся довольно основательно, таковых не нашел. Даже все встреченные онлайн сервисы определяют PR моих подопытных страниц как 0, хотя SEMonitor и Plugin для Firefox считают его равным 1.

Pan Russian
На сайте с 12.01.2006
Offline
122
#1

Скриптина на PHP

<?

// PHP Google PageRank Calculator Script //////////////////////////////////

define('GOOGLE_MAGIC', 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 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) /* all the case statements fall through */

{

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;

}

function getrank($url) {

$url = 'info:'.$url;

$ch = GoogleCH(strord($url));

$file = "http://www.google.com/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url";

$data = file($file);

$rankarray = explode (':', $data[2]);

$rank = $rankarray[2];

return $rank;

}

?>

<? getrank($url) ?>

Где URL адрес Вашего сайта, в том числе с файлами и с переменными типа ($ & ?)

Y
На сайте с 15.06.2005
Offline
10
#2

Не копался в скрипте, но при размещении его в чистом виде и прописывании вместо $url чего-нибудь типа 'http://www.anysite.ru' получаю чистый экран. Если прибавить в урл ?a=1&b=2 - получаем ошибку.

Pan Russian
На сайте с 12.01.2006
Offline
122
#3

Вместо <? getrank($url) ?>

Ставим

<? echo ''.getrank($url).''; ?>

Где URL адрес Вашего сайта, в том числе с файлами и с переменными типа ($ & ?)

vitcom
На сайте с 08.07.2004
Offline
56
#4
Pan Russian:
Вместо
<? getrank($url) ?>
Ставим
<? echo ''.getrank($url).''; ?>

Где URL адрес Вашего сайта, в том числе с файлами и с переменными типа ($ & ?)

можно и без кавычек

<? echo getrank($url); ?>

Есть еще какой то другой, более оптимизированный вариант скрипта ☝

human
На сайте с 05.02.2004
Offline
78
#5
vitcom:
Есть еще какой то другой, более оптимизированный вариант скрипта ☝

ГДЕ??? Куда уж тут проще-то?

С уважением, Кучеров Дмитрий SEO complex — комплексный подход к продвижению (http://seo-complex.ru/) моб. тел.: +7 (495) 506-80-90
[Удален]
#6

А есть ли у кого-нибудь perl-версия этого скрипта?

П
На сайте с 19.04.2005
Offline
104
#7
metton:
А есть ли у кого-нибудь perl-версия этого скрипта?

Есть.

Можете и сами сделать, а этот pm-модуль будет вам в помощь WWW::Google::PageRank, где его взять думаю сами знаете.

Вечные ссылки в рассрочку, отобраны только качественные доноры Регистрация по приглашению -> http://gogettop.ru/?ref=18973 (http://gogettop.ru/?ref=18973)
Юрий Апостол
На сайте с 12.05.2006
Offline
20
#8
Pan Russian:
Скриптина на PHP

У меня, к сожалению, не работает. Гугль говорит "Forbidden". Пробовал на разных хостингах, заходил браузером по сгеренированной строке - то же самое.

mustafa
На сайте с 28.10.2005
Offline
202
#9

оф скрипт:

<?

/*
This code is released unto the public domain
This script is originally from: http://www.googlecommunity.com/scripts/google-pagerank.php
It is also hosted, and was modified slightly, by: http://www.searchengineengine.com
The architecture is:
getrank($url) function - The function called externally to get the PageRank
strord($url) function - Function called by getrank() to convert the url string into a
numeric string
GoogleCH($numericstring) function - Function called by getrank() to get the checksum of the
url
mix($a, $b, $c) function - Called by GoogleCH() during checksum calculation
zeroFill($a, $b) function - Called by mix() during mixing
*/

//header("Content-Type: text/plain; charset=utf-8");//Uncommenting this makes the file
downloadable rather than executable

define("GOOGLE_MAGIC", 0xE6359A60);//Define the named constant "GOOGLE_MAGIC"

//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) {//This function is used in the Google Checksum calculation
$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) {//Calculate the Google Checksum
for a given URL
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)/* all the case statements fall through */
{
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);
return $mix[2];
}

function strord($string) {//converts a string into an array of integers containing the
numeric value of the char
for($i=0;$i<strlen($string);$i++) {
$result[$i] = ord($string{$i});
}
return $result;
}

function getrank($url, $prefix="info:", $datacenter="www.google.com") {//This is the
function used to get the PageRank value.
//If $prefix is "info:", then the Toolbar pagerank will be returned.
//$datacenter sets the datacenter to get the results from. e.g., "www.google.com",
"216.239.53.99", "66.102.11.99".
$url = $prefix.$url;
$ch = GoogleCH(strord($url));//Get the Google checksum for $url using the GoogleCH function.
$file = "http://$datacenter/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url";
//To get the Crawl Date instead of the PageRank, change "&features=Rank" to
"&features=Crawldate"
//To get detailed XML results, remove "&features=Rank"
$oldlevel = error_reporting(0);//Suppress error reporting temporarily.
$data = file($file);
error_reporting($oldlevel);//Restart error reporting.
if(!$data || preg_match("/(.*)\.(.*)/i", $url)==0) return "N/A";//If the Google data is
unavailable, or the URL is invalid, return "N/A".
//The preg_match check is a very basic url validator that only checks if the URL has a
period in it.
$rankarray = explode (":", $data[2]);//There are two line breaks before the PageRank data
on the Google page.
$rank = trim($rankarray[2]);//Trim whitespace and line breaks.
if($rank=="") return "N/A";//Return N/A if no rank.
return $rank;
}

function getrealrank($url, $datacenter="www.google.com"){
$ch = GoogleCH(strord($url));
$array = xmltoarray("http://$datacenter/search?client=navclient-auto&ch=6$ch&q=$url");
$infoarray = $array['GSP'][0]['RES'][0]['R'];
$nonwwwurl = str_replace("www.", "", $url);
$urlpermutationsarray = array($url, "http://".$url, "http://www.".$url, $url."/",
"http://".$url."/", "http://www.".$url."/", $nonwwwurl, "http://".$nonwwwurl,
"http://www.".$nonwwwurl, $nonwwwurl."/", "http://".$nonwwwurl."/",
"http://www.".$nonwwwurl."/");
for($i=0; $i<count($infoarray); $i++){
$urlU = $infoarray[$i]['U'];//U is the URL. UE is the 'clean' URL.
$urlrank = $infoarray[$i]['RK'];
foreach($urlpermutationsarray as $permutation){
if(strtolower($permutation)==strtolower($urlU)) return $urlrank;//Case insensitive match.
}
}
return "Unknown";//If no matches found.
}


?>
Segey
На сайте с 23.08.2005
Offline
404
#10
metton:
А есть ли у кого-нибудь perl-версия этого скрипта?

http://forum.ru-board.com/topic.cgi?forum=24&topic=5106

вот тут, только не гарантирую хорошую работоспособность :)

Brexit - уже совсем рядом. (https://about-this-model.blogspot.com/2019/03/brexit.html)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий