PR Rang der angemeldeten Seiten anzeigen
Moderator:Paddelberg
pagerank wird fehlerhaft angezeigt
Nochmals Dank für das Script. Habe beobachtet, daß die PR-Anzeige in einigen Fällen zunächst völlig korrekt erfolgte. Auch nach Aufruf der cron.php. Seit einigen Tagen wird jedoch bei einigen Seiten PR 0 angezeigt, die vorher korrekt angezeigt wurden. Kann das nicht eher an den Datacentern von Google liegen. Kann man die Adresse des abgefragten Datacenters selbst ändern? (wenn, wo?)
Danke schonmal.
Danke schonmal.
OK .. hat Paddelberg wohl ein bissl viel mehr um die Ohren. Habe aber gesehen, das aus meiner Sparte ein paar Webmaster da auch schon ein Prob haben. Hier mal mein Lösungsansatz:
Folgengde PHP-Datei als PRupdae.php erstellen und ins (gesicherte) ACP laden. Die Daten unter Verbindungsdaten mit den Zugangsdaten der Datenbank versehen. Passwort, DBName und Datenbank. Speichern & ins ACP hochladen.
ToDo: Datei aus Euren Root im Browser aufrufen: ..../admin/PRupdate.php
Bei mir funktionierts!!
VG Chandor
Folgengde PHP-Datei als PRupdae.php erstellen und ins (gesicherte) ACP laden. Die Daten unter Verbindungsdaten mit den Zugangsdaten der Datenbank versehen. Passwort, DBName und Datenbank. Speichern & ins ACP hochladen.
ToDo: Datei aus Euren Root im Browser aufrufen: ..../admin/PRupdate.php
Bei mir funktionierts!!
Code: Alles auswählen
<?php
set_time_limit(3600);
error_reporting(E_ERROR );
$JOB="PRUPDATE"; //PRUPDATE or RECPRCHECK
$usersite="."; //The url you expect to find at reciprocal location
//Verbindungsdateneintragen
$username=""; //Benutzer
$password=""; //Passwort
$dbname=""; //Datenbankname
$hostname="localhost";
$linktable = "topxl_user";
$BATCHSIZE = 500; //How many
$DELAY = 30; //Seconds delay before doing next batch
$DEBUG = 0; // if set to 1, only prints text, do not update.
define('GOOGLE_MAGIC', 0x00000000E6359A60); // CHANGED (64Bit)
if ( $username == "" || $password == "" || $dbname == "" || $hostname == "" ) {
echo "Please set username, password, dbname, and hostname";
exit;
}
$link = mysql_connect($hostname,$username,$password);
if (!$link) {
die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db("$dbname", $link);
if (!$db_selected) {
die ("Can't use $dbname : " . mysql_error($link ));
}
$query="SELECT URL,pr FROM $linktable";
$result=mysql_query($query,$link );
if ($result == null) die ("Error in Select : " . mysql_error($link ));
$num=mysql_numrows($result );
$i=0;
$updatedrows=0;
$body = <<<EOT
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>PR Updated</TITLE>
</HEAD><BODY>
EOT;
print $body;
while ($i < $num) {
$pagerank=mysql_result($result,$i,"pr");
$url=mysql_result($result,$i,"url" );
flush();
switch ($JOB) {
case "PRUPDATE":
$google= new google_pr();
$newpr=$google->get_page_rank($url);
if ($pagerank <> $newpr && $newpr != -1) {
++$updatedrows;
print $i+1 . ") PR: $pagerank (New PR=$newpr) ::: $url UPDATING -- ";
$query="UPDATE $linktable SET pr=$newpr WHERE url='$url'";
if ($DEBUG==0) mysql_query($query,$link );
echo " Record Updated<br>";
} else {
print $i+1 . ") PR: $pagerank (PR=$newpr) ::: $url<br>";
}
break;
}
++$i;
if (fmod($i,$BATCHSIZE) == 0) sleep($DELAY); //Sleep 10 sec for each block of 50 links.
}
mysql_close($link);
$footer = <<<EOT
<br>
<b>Finished checking through $num links in your database.
<br>
$updatedrows of $num where not up2date and was corrected.</b>
<br>
</BODY></HTML>
EOT;
print $footer;
class google_pr{
var $checksum;
function google_pr(){
$this->checksum='';
}
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; $this->toInt32($a); $a = (int)($a ^ ($this->zeroFill($c,13)));
$b -= $c; $b -= $a; $this->toInt32($b); $b = (int)($b ^ ($a<<8));
$c -= $a; $c -= $b; $this->toInt32($c); $c = (int)($c ^ ($this->zeroFill($b,13)));
$a -= $b; $a -= $c; $this->toInt32($a); $a = (int)($a ^ ($this->zeroFill($c,12)));
$b -= $c; $b -= $a; $this->toInt32($b); $b = (int)($b ^ ($a<<16));
$c -= $a; $c -= $b; $this->toInt32($c); $c = (int)($c ^ ($this->zeroFill($b,5)));
$a -= $b; $a -= $c; $this->toInt32($a); $a = (int)($a ^ ($this->zeroFill($c,3)));
$b -= $c; $b -= $a; $this->toInt32($b); $b = (int)($b ^ ($a<<10));
$c -= $a; $c -= $b; $this->toInt32($c); $c = (int)($c ^ ($this->zeroFill($b,15)));
return array($a,$b,$c);
}
function strord($string) {
for($i=0;$i<strlen($string);$i++) {
$result[$i] = ord($string{$i});
}
return $result;
}
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 = $this->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);
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 = $this->mix($a,$b,$c);
return $mix[2];
}
function getGoogleChecksum($url) {
$url="info:"."http://".str_replace('http://','',$url);
$tmp_ch=$this->strord($url);
$this->checksum=sprintf("%u", $this->GoogleCH($tmp_ch));
return $this->checksum;
}
function toInt32(& $x) {
$z = hexdec(80000000);
$y = (int)$x;
if($y==-$z&&$x<-$z){
$y = (int)((-1)*$x);
$y = (-1)*$y;
}
$x = $y;
}
function get_page_rank($url){
//$url = preg_replace('/\?.*$/','?',$url);
$reqgr = "info:".$url;
$reqgre = "info:".urlencode($url);
$gch="6".$this->getGoogleChecksum($url);
$patern = '/^http:/';
$patern2 = '/^http:\/\/.*google\..*\/(search|images|groups|news).*/';
$patern3 = '/^http:\/\/localhost.*/';
$patern4 = '/^http:\/\/(127\.|10\.|172\.16|192\.168).*/'; //local ip
if(!preg_match($patern, $url) || preg_match($patern2, $url) ||
preg_match($patern3, $url) || preg_match($patern4, $url)){
return -1;
}else{
$fsock = fsockopen('toolbarqueries.google.com', 80, $errno, $errstr);
if ( !$fsock ){
return -1;
}
$base_get = "/search?client=navclient-auto&ch=".$gch."&ie=UTF-8&oe=UTF-8&features=Rank&q=".$reqgre;
fputs($fsock, "GET $base_get HTTP/1.1\r\n");
fputs($fsock, "HOST: toolbarqueries.google.com\r\n");
fputs($fsock, "User-Agent: Mozilla/5.0 (compatible; GoogleToolbar 3.0.114-big; Windows XP 5.1)\r\n");
fputs($fsock, "Connection: close\r\n\r\n");
while(!feof($fsock)){
$res['content'] .= fread($fsock, 1024);
}
fclose($fsock);
if(preg_match('/Rank_.*?:.*?:(\d+)/i', $res['content'], $m)){
return $m[1];
}else{
return -1;
}
}
}
}
?>
pr-rang - Danke
Danke, ich probier es mal aus. Rückmeldung kommt dann....
Es funktioniert!
Der Code, den Chandor hier präsentiert, funktioniert auch bei meinen Toplisten.
Danke!
Danke!
Habe versucht...
Ist eine Vermutung...
Bei mir tritt der Fehler ja nicht auf.
Habe versucht den Fehler bei meinem Script ebenfalls zu erzeugen, wollte herausfinden was da nicht stimmt. Fehlanzeige, leider. Vielleicht haben Chandor und Paddelberg ja eine Idee.
Bei mir tritt der Fehler ja nicht auf.
Habe versucht den Fehler bei meinem Script ebenfalls zu erzeugen, wollte herausfinden was da nicht stimmt. Fehlanzeige, leider. Vielleicht haben Chandor und Paddelberg ja eine Idee.
Der Code ist OK - habe nochmals nachgesehen!
Mit welchen Editor hast Du die php-Datei erstellt? Ich mit CS3! Frontpage funzt auch.
Der hier hatte vermutlich ein Editorproblem!
http://www.php.de/php-einsteiger/58644- ... sen-2.html
Hinter dem EOT darf auf keinen Fall ein Leerzeichen sein! Mit Leerzeichen dahinter bekomme ich auch den Parse-Error!!!
Mit welchen Editor hast Du die php-Datei erstellt? Ich mit CS3! Frontpage funzt auch.
Der hier hatte vermutlich ein Editorproblem!
http://www.php.de/php-einsteiger/58644- ... sen-2.html
Hinter dem EOT darf auf keinen Fall ein Leerzeichen sein! Mit Leerzeichen dahinter bekomme ich auch den Parse-Error!!!