Prikaz google PR
2 naročnika
2 naročnika
Na stran ki jo delam bi rad vključil prikaz PR-ja za določeno stran. Toda nekako mi nobena koda ne deluje...
http://www.coderbari.com/scripts/download.php?scriptID=12
Je že kdo kaj delal s tem?
Hvala in lp
3 odgovori
in test ...
[HTML]<html>
<head>
<title>Google PageRank Test Suite</title>
</head>
<body>
<form method="POST" action="<?=$_SERVER["PHP_SELF"];?>">
<input type="hidden" name="checkPr" value="1">
<p>Enter URL's (one for each line) to check Google PageRank:<br>
<textarea rows="6" name="urls" cols="50" nowrap>
<?PHP
if ($POST["checkPr"] == 1) echo $POST["urls"];
else echo "http://www.phpclasses.org\nhttp://www.progen.com.tr\nhttp://www.hotscripts.com\nhttp://www.google.com";
?>
</textarea><br>
<input type="checkbox" value="1" name="useCache" <?=$_POST["useCache"]==1? "CHECKED":""?>> Use caching<br>
<input type="checkbox" value="1" name="printDebug" <?=$_POST["printDebug"]==1? "CHECKED":""?>> Print debug<br>
<input type="submit" value="Check PageRanks"></p>
</form>
<?PHP
if ($POST["checkPr"] == 1) {
?>
<table border="0" cellpadding="3" cellspacing="0" id="table1">
<tr>
<td><font color="#FF9900"><b>PageRank</b></font></td>
<td><font color="#FF9900"><b>Exec Time</b></font></td>
<td><font color="#FF9900"><b>URL</b></font></td>
</tr>
<?
$url = explode("\n",$POST["urls"]);
includeonce("class.googlepr.php");
$gpr = new GooglePR();
$gpr->debug=true;
$gpr->useCache = ($POST["useCache"]==1)? true:false;
$gpr->userAgent = $SERVER["HTTPUSERAGENT"];
for ($i=0;$i<count($url);$i++) {
if (strlen(trim($url[$i]))>0) {
$url = eregi("http://",$url[$i])? $url[$i]:"http://".$url[$i];
$pr = $gpr->GetPR($url);
?>
<tr>
<td valign="top">
<div align="center">
<table border="0" cellspacing="0" id="table2">
<tr>
<td>
<p align="center"><b><font face="Arial" size="1"><?=$pr?>/10</font></b></td>
</tr>
<tr>
<td>
<table border="0" cellpadding="2" cellspacing="0" id="table3" style="border: 1px solid
#000000" width="50" height="5">
<tr>
<td bgcolor="#008000" width="<?=($pr*5)?>"></td>
<?PHP if($pr<10) {?><td width="<?=(50-$pr*5)?>"></td><?PHP } ?>
</tr>
</table>
</td>
</tr>
</table>
</div>
</td>
<td valign="top"><?=round(substr($gpr->debugResult["totalexectime"],0,strpos($gpr->debugResult["totalexectime"]," ")),6)?> sec(s)</td>
<td><a href="<?=$url?>" target="blank"><?=$url?></a>
<? if ($POST["printDebug"]==1) {?>
<pre><?printr($gpr->debugResult);unset($gpr->debugResult);?></pre>
<?}?>
</td>
</tr>
<?PHP
}
}
?>
</table>
<?PHP
}
?>
</body>
</html>
[/HTML]
Mogoče tole:
<?php
Class GooglePR {
//Public vars
var $googleDomains = Array("toolbarqueries.google.com","www.google.com","toolbarqueries.google.com.tr","www.google.com.tr","toolbarqueries.google.de","www.google.de", "64.233.187.99", "72.14.207.99");
var $debugResult = Array();
var $userAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204";
var $cacheDir = "";
var $maxCacheAge = 86400; // = 24h (yes, in seconds)
var $useCache = false;
var $debug = false;
//Private vars
var $GOOGLE_MAGIC = 0xE6359A60;
var $PageRank = -1;
var $cacheExpired = false;
function GetPR($url,$forceNoCache = false) {
$total_exec_start = $this->microtimeFloat();
$result=array("",-1);
if (($url.""!="")&&($url.""!="http://")) {
$this->debugRes("url", $url);
$this->cacheDir = (strlen($this->cacheDir) > 0)? $this->cacheDir:dirname(__FILE__)."/prcache/";
$this->cacheDir .= (substr($this->cacheDir,-1) != "/")? "/":"";
// check for protocol
$url_ = "info:".((substr(strtolower($url),0,7)!="http://")? "http://".$url:$url);
$host = $this->googleDomains[mt_rand(0,count($this->googleDomains)-1)];
$target = "/search";
$querystring = sprintf("client=navclient-auto&ch=6%u&features=Rank&q=",$this->GoogleCH($this->strord($url_)));
$querystring .= urlencode($url_);
$contents="";
$this->debugRes("host", $host);
$this->debugRes("query_string", $querystring);
$this->debugRes("user_agent", $this->userAgent);
$query_exec_start = $this->microtimeFloat();
if ($forceNoCache == true) {
$this->debugRes("force_no_cache", "true");
} elseif ($contents = $this->readCacheResult($url)) {
$this->debugRes("read_from_cache", "true");
} else {
$this->cacheExpired = true;
}
// let's get ranking
if (strlen(trim($contents)) == 0)
if (@function_exists("curl_init")) {
// allways use curl if available for performance issues
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://".$host.$target."?".$querystring);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
if (!($contents = trim(@curl_exec($ch)))) {
$this->debugRes("error","curl_exec failed");
}
curl_close ($ch);
$this->debugRes("method", "curl");
} else {
$this->debugRes("error","curl not installed");
// use fsockopen as secondary method, to submit user agent
if ($socket = @fsockopen($host, "80", $errno, $errstr, 30)) {
$request = "GET $target?$querystring HTTP/1.0\r\n";
$request .= "Host: $host\r\n";
$request .= "User-Agent: ".$this->userAgent."\r\n";
$request .= "Accept-Language: en-us, en;q=0.50\r\n";
$request .= "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n";
$request .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n";
$request .= "Connection: close\r\n";
$request .= "Cache-Control: max-age=0\r\n\r\n";
stream_set_timeout ( $socket,10);
fwrite( $socket, $request );
$ret = '';
while (!feof($socket)) {
$ret .= fread($socket,4096);
}
fclose($socket);
$contents = trim(substr($ret,strpos($ret,"\r\n\r\n") + 4));
$this->debugRes("method", "fsockopen");
} else {
$this->debugRes("error","fsockopen failed");
// this way could cause problems because the Browser Useragent is not set...
if ($contents = trim(@file_get_contents("http://".$host.$target."?".$querystring))) {
$this->debugRes("method", "file_get_contents");
} else {
$this->debugRes("error","file_get_contents failed");
}
}
}
if ($this->cacheExpired == true)
$this->updateCacheResult($url,$contents);
$this->debugRes("query_exec_time",$this->microtimeFloat() - $query_exec_start);
$result[0]=$contents;
// Rank_1:1:0 = 0
// Rank_1:1:5 = 5
// Rank_1:1:9 = 9
// Rank_1:2:10 = 10 etc
$p=explode(":",$contents);
if (isset($p[2])) $result[1]=$p[2];
}
if($result[1] == -1) $result[1] = 0;
$this->PageRank =(int)$result[1];
$this->debugRes("total_exec_time", $this->microtimeFloat() - $total_exec_start);
$this->debugRes("result", $result);
return $this->PageRank;
}
function debugRes($what,$sowhat) {
if($this->debug == true) {
$debugbt = debug_backtrace();
$what = trim($what);
$sowhat = trim($sowhat) . " (Line : ".$debugbt[0]["line"].")";
if ($what == "error") {
$this->debugResult[$what][] = $sowhat;
} else {
$this->debugResult[$what] = $sowhat;
}
}
}
function microtimeFloat() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function readCacheResult($url) {
if ($this->useCache != true) {
return false;
}
if (!is_dir($this->cacheDir)) {
$this->debugRes("error","please create {$this->cacheDir}");
return false;
}
$urlp = parse_url($url);
$host_ = explode(".",$urlp["host"]);
$path_ = (strlen($urlp["query"])>0)? urlencode($urlp["path"].$urlp["query"]):"default";
$cache_file = $this->cacheDir;
for ($i = count($host_)-1;$i>=0;$i--) {
$cache_file .= $host_[$i]."/";
}
$cache_file .= $path_;
$this->debugRes("cache_file", $cache_file);
if (file_exists($cache_file)) {
$mtime = filemtime($cache_file);
if (time() - $mtime > $this->maxCacheAge) {
$this->debugRes("cache", "expired");
$this->cacheExpired = true;
return false;
} else {
$this->cacheExpired = false;
$this->debugRes("cache_age", time() - $mtime);
return file_get_contents($cache_file);
}
}
$this->debugRes("error","cache file not exists (reading)");
return false;
}
function updateCacheResult($url,$content) {
if ($this->useCache != true) {
return false;
}
if (!is_dir($this->cacheDir)) {
$this->debugRes("error","please create {$this->cacheDir}");
return false;
}
$urlp = parse_url($url);
$host_ = explode(".",$urlp["host"]);
$path_ = (strlen($urlp["query"])>0)? urlencode($urlp["path"].$urlp["query"]):"default";
$cache_file = $this->cacheDir;
for ($i = count($host_)-1;$i>=0;$i--) {
$cache_file .= $host_[$i]."/";
}
$cache_file .= $path_;
if (!file_exists($cache_file)) {
$this->debugRes("error","cache file not exists (writing)");
$cache_file_tmp = substr($cache_file,strlen($this->cacheDir));
$cache_file_tmp = explode("/",$cache_file_tmp);
$cache_dir_ = $this->cacheDir;
for ($i = 0;$i<count($cache_file_tmp)-1;$i++) {
$cache_dir_ .= $cache_file_tmp[$i]."/";
if (!file_exists($cache_dir_)) {
if (!@mkdir($cache_dir_,0777)) {
$this->debugRes("error","unable to create cache dir: $cache_dir_");
//break;
}
}
}
if (!@touch($cache_file)) $this->debugRes("error","unable to create cache file");
if (!@chmod($cache_file,0777)) $this->debugRes("error","unable to chmod cache file");
}
if (is_writable($cache_file)) {
if (!$handle = fopen($cache_file, 'w')) {
$this->debugRes("error", "unable to open $cache_file");
return false;
}
if (fwrite($handle, $content) === FALSE) {
$this->debugRes("error", "unable to write to $cache_file");
return false;
}
fclose($handle);
$this->debugRes("cached", date("Y-m-d H:i:s"));
return true;
}
$this->debugRes("error", "$cache_file is not writable");
return false;
}
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 ^= ($this->zeroFill($c,13));
$b -= $c; $b -= $a; $b ^= ($a<<8);
$c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,13));
$a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,12));
$b -= $c; $b -= $a; $b ^= ($a<<16);
$c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,5));
$a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,3));
$b -= $c; $b -= $a; $b ^= ($a<<10);
$c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,15));
return array($a,$b,$c);
}
function GoogleCH($url, $length=null) {
if(is_null($length)) {
$length = sizeof($url);
}
$a = $b = 0x9E3779B9;
$c = $this->GOOGLE_MAGIC;
$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) /* 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 = $this->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;
}
}
?>