PR Rang der angemeldeten Seiten anzeigen

Allgemeiner Support für das kostenlose Toplisten Script Top Xl

Moderator: Paddelberg

chandor
Beiträge: 14
Registriert: Samstag 30. August 2008, 20:22

Beitrag von chandor » Montag 31. August 2009, 10:25

Hi,

schade!! Hatte vorher wundervoll funktioniert!

Habe aber eine Lösung gefunden. Hasst 'ne PN von mir bekommen. :D

VG Chandor

Focka
Beiträge: 8
Registriert: Freitag 28. August 2009, 12:20

Beitrag von Focka » Montag 7. September 2009, 16:24

Hi,

wäre nicht schlecht wenn die Lösung hier auch stehen würde *fg*

chandor
Beiträge: 14
Registriert: Samstag 30. August 2008, 20:22

Beitrag von chandor » Montag 7. September 2009, 20:14

Chef wird sich melden .... hat'er gesagt!! :D

Mein Lösungsansatz kann ich hier nicht posten und ist so sehr individuell für mich!

coceonc11
Beiträge: 8
Registriert: Mittwoch 19. August 2009, 00:18

pagerank wird fehlerhaft angezeigt

Beitrag von coceonc11 » Montag 7. September 2009, 21:08

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.

chandor
Beiträge: 14
Registriert: Samstag 30. August 2008, 20:22

Beitrag von chandor » Montag 7. September 2009, 21:13

Vermutlich nein! Das liegt an einer erforderlichen 64-Bit-Abfrage!

chandor
Beiträge: 14
Registriert: Samstag 30. August 2008, 20:22

Beitrag von chandor » Montag 7. September 2009, 21:14

Vermutlich nein! Das liegt an einer erforderlichen Schlüssel mit einer 64-Bit-Abfrage!

coceonc11
Beiträge: 8
Registriert: Mittwoch 19. August 2009, 00:18

Beitrag von coceonc11 » Mittwoch 9. September 2009, 20:09

Ich muß zugeben, ich bin sehr gespannt......

chandor
Beiträge: 14
Registriert: Samstag 30. August 2008, 20:22

Beitrag von chandor » Donnerstag 8. Oktober 2009, 21:37

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!!

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;
        }
    }
}
}
?>
VG Chandor

coceonc11
Beiträge: 8
Registriert: Mittwoch 19. August 2009, 00:18

pr-rang - Danke

Beitrag von coceonc11 » Freitag 9. Oktober 2009, 09:58

Danke, ich probier es mal aus. Rückmeldung kommt dann.... :D

Benutzeravatar
Jimmy
Beiträge: 44
Registriert: Mittwoch 26. November 2008, 11:17

Beitrag von Jimmy » Sonntag 11. Oktober 2009, 11:53

Bei mir geht das nicht, bekomme immer diese Fehlermeldung:

Parse error: syntax error, unexpected T_SL in /home/www/admin/PRupdate.php on line 37

Das wäre dieses: $body = <<<EOT

chandor
Beiträge: 14
Registriert: Samstag 30. August 2008, 20:22

Beitrag von chandor » Montag 12. Oktober 2009, 20:51

Bei mir funktioniert das in zwei Toplisten einwandfrei! Der Code scheint auch OK zu sein. Das ist die Zeile, (bis EOT;) in der die Updateergenisse im Template ausgegeben werden. Hast Du Deine Tabellen verändert oder stimmt die DB-Verbindung?

Ansonsten fehlt mir da näheres Know-How um zu helfen.

coceonc11
Beiträge: 8
Registriert: Mittwoch 19. August 2009, 00:18

Es funktioniert!

Beitrag von coceonc11 » Montag 12. Oktober 2009, 23:07

Der Code, den Chandor hier präsentiert, funktioniert auch bei meinen Toplisten.
Danke! :D

coceonc11
Beiträge: 8
Registriert: Mittwoch 19. August 2009, 00:18

Hallo Jimmy, kann es sein....

Beitrag von coceonc11 » Dienstag 13. Oktober 2009, 09:40


coceonc11
Beiträge: 8
Registriert: Mittwoch 19. August 2009, 00:18

Habe versucht...

Beitrag von coceonc11 » Dienstag 13. Oktober 2009, 09:48

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.

chandor
Beiträge: 14
Registriert: Samstag 30. August 2008, 20:22

Beitrag von chandor » Dienstag 13. Oktober 2009, 11:58

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!!!

Antworten