Seite 1 von 1
PR Prüfsumme
Verfasst: 09.08.2007, 01:07
von Fluidum
Guten Abend,
ich habe lange nicht mehr mein Script zum prüfen des PageRanks benutzt
und nun hab ich das Problem, dass dieses nicht mehr funktioniert.
Sowie es aussieht, hat Google den String bzw. die Prüfsumme geändert -
leider passt die alte Prüfsumme mit den neuen nicht überwein...
Jemand ne Ahnung wo ich eine aktuelle Variante finde?
Eine PN oder so wäre Klasse - Danke!
---
Edit:
Kann es an der PHP Version liegen, dass diese eine andere Prüfsumme bilder?
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 09.08.2007, 02:16
von To-Bi-As
HI,
also das hier funktioniert bei mir ohne Probleme:
Code: Alles auswählen
<?
define ('GOOGLE_MAGIC', 0xE6359A60);
//This class should work on most servers
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 xor32($a, $b)
{
return int32($a) ^ int32($b);
}
//return least significant 32 bits
//works by telling unserialize to create an integer even though we provide a double value
function int32($x)
{
return unserialize ("i:$x;");
//return intval($x); // This line doesn't work on all servers.
}
function mix($a,$b,$c)
{
$a -= $b; $a -= $c; $a = xor32($a,zeroFill($c,13));
$b -= $c; $b -= $a; $b = xor32($b,$a<<8);
$c -= $a; $c -= $b; $c = xor32($c,zeroFill($b,13));
$a -= $b; $a -= $c; $a = xor32($a,zeroFill($c,12));
$b -= $c; $b -= $a; $b = xor32($b,$a<<16);
$c -= $a; $c -= $b; $c = xor32($c,zeroFill($b,5));
$a -= $b; $a -= $c; $a = xor32($a,zeroFill($c,3));
$b -= $c; $b -= $a; $b = xor32($b,$a<<10);
$c -= $a; $c -= $b; $c = xor32($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)
{
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]);
}
$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;
}
//returns -1 if no page rank was found
function get_page_rank($url)
{
$ch = "6".GoogleCH(strord("info:" . $url));
$pagerank = -1;
$fp = @ fsockopen ("www.google.com", 80, $errno, $errstr, 10);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
}
else
{
$out = "GET /search?client=navclient-auto&ch=" . $ch . "&features=Rank&q=info:" . $url . " HTTP/1.1\r\n" ;
$out .= "Host: www.google.com\r\n" ;
$out .= "Connection: Close\r\n\r\n" ;
@ fwrite ($fp, $out);
while (!feof ($fp))
{
$data = @ fgets ($fp, 128);
$pos = strpos ($data, "Rank_");
if ($pos !== false)
{
$pagerank = trim (substr ($data, $pos + 9));
}
}
@ fclose ($fp);
}
return $pagerank;
}
?>
Gruß, Ingo
Verfasst: 09.08.2007, 07:37
von Fluidum
Hallo Ingo,
das Script habe ich auch bisher immer verwendet - funktioniert irgendwie aber nicht
mehr bei mir!
Welche Form hat bei dir die $url??? $url = '
https://www.xyzdomain.de'; ???
P.S.: Ich denke das es eventuell etwas mit meiner PHP-Version zu tun hat...
Verfasst: 09.08.2007, 07:48
von myli
Der Grund hierfür kann an deiner Architektur liegen. Wenn du eine 64bit Maschine hast, dann wird's mit dem skript nicht gehen. Zutun hat dies mit Little Endian und Big endian. Das Skript wurde konzeptiert für Little Endian da ein Integer wert nur 32bit anstatt 64bit hat.
Im Netz sollte es für 64bit Systeme mittlweile schon überarbeitete Skripte geben. Soweit ich weiß, gibt es aber auch ein "Hack" mit dem es möglich ist den Integer-Maximalwert auf 32bit zu setzen.
Liebe Grüße
Verfasst: 09.08.2007, 13:47
von Fluidum
Hi myli,
ist auch ne 64Bit-Maschine - dann muss ich wohl nach einer entsprechenden
Version suchen!
Danke für die Info!