Location: PHPKode > scripts > guaranix Rank > guaranix-rank/gRank.php
<?
/****************************************************************************************
*    guaranix Rank                                                                      *
*                                                                                       *
*    This is a class that implements the Google Rank algorithm called PageRank.         *
*    The algorithm is too much effective  for get what Page (or what are you trying     *
*    to rank) is more important than the others.                                        *
*                                                                                       *
*    The whole algorithm with explanation could be found at:                            *
*    http://dbpubs.stanford.edu:8090/pub/1999-66                                        *
*                                                                                       *
*    Becouse the algorithm is not mine (I didn't do the research about this ranking)    *
*    this source is free                                                                *
*                                                                                       *
*                                                                                       *
****************************************************************************************/

class gRank
{
	var $mysql;
	var $table;
	
	var $dump; 
	var $sql_limit;  #SQL limit 
	
	function gRank()
	{
		$this->dump = 0.85;
		$this->sql_limit = 1000;
	}
	function calculate()
	{
		print "Preparing... ";
		$this->Prepare();
		print "Prepared\n";
		
		print "Calculating the Pagerank with out Danglins\n";
		$this->CalculatePR_WitoutDanglings();
		
		print "Calculating the Pagerank\n";
		$this->CalculatePR();
		$this->FinishPR();
		print "Finish, all the result are in the table PR_FINISHED\n";
		
		
	}
	
	function FinishPR()
	{
		global $sql_finish;
		
		foreach($sql_finish as $Sql)
			mysql_query($Sql,$this->mysql) or die(mysql_error($this->mysql));
	}
	
	function Prepare() 
	{
		global $sql;
		
		foreach($sql as $Sql)
			mysql_query($Sql,$this->mysql) or die(mysql_error($this->mysql));
		
		#Now we will calculate formulates it of each page for its PageRank 
		for($i=0; ;$i++)
		{
			$main = mysql_query("select id from tmp_pr where formula = '' limit ".$this->sql_limit,$this->mysql) or die(mysql_error($this->mysql));
			if (mysql_num_rows($main) == 0) break;
			
			while ($row = mysql_fetch_array($main)) 
			{
				$Sql = "select pagerank.master, tmp_pr.nroout from pagerank inner 
					join tmp_pr on (tmp_pr.id = pagerank.master) where pagerank.slave = ".$row['id'];
				
				$xSql = mysql_query($Sql, $this->mysql) or die(mysql_error( $this->mysql));
				$formula = "";
				
				while ($row1 = mysql_fetch_array($xSql))
				{
					$formula .= "PR(".$row1['master'].")/".$row1['nroout']." + ";
				}
				$formula = substr($formula,0,strlen($formula) - 2); 
				$formula = mysql_escape_string($formula);
				mysql_free_result($xSql);
				$Sql = "update tmp_pr set formula = '".$formula."' where id = ".$row['id'];
				
				mysql_query($Sql,$this->mysql) or die(mysql_error($this->mysql));
			}
		}
	}
	
	function CalculatePR_WitoutDanglings()
	{
		for ($i=0; $i < 52; $i++)
		{
			print "\tItineracion $i\n";
			for ($e = 0; ; $e++)
			{
				if ($this->InternalPRcalculator($e,false) == false)
					break;
			}
		}
	}
	
	function CalculatePR()
	{
		for ($e = 0; ; $e++)
		{
			if ($this->InternalPRcalculator($e) == false)
				break;
		}
	}
	
	function InternalPRcalculator($Start, $dangling = true)
	{
		global $buff;
		$start = $Start * $this->sql_limit;
		$where = "";
		if (!$dangling)
		{
			$where = "where nroout != 0"; 
		}
		
		$sql = mysql_query("select id, formula from tmp_pr $where limit $start, ".$this->sql_limit,$this->mysql) or die(mysql_error($this->mysql));

		if (mysql_num_rows($sql) == 0)
			return false;
		while ($row = mysql_fetch_array($sql))
		{
			eval('$nro = (float)'.$row['formula'].';');
			$nro = (float)(1 - $this->dump) + $this->dump * ($nro);
			mysql_query("update tmp_pr set pr = '$nro' where id = ".$row['id']);
			$buff[$row['id']] = $nro; 
		}
		return true; 
	}
}

/*
*	This function will calcula the PR of a given page.
*/
function PR($i)
{
	global $buff; #This is the memory buffer
		
	if (!isset($buff[$i]))
	{
		$sql1 = mysql_query("select pr from tmp_pr where id = $i");
		$row = mysql_fetch_array($sql1);
		mysql_free_result($sql1);
		$buff[$i] = $row[0];
	}
	return $buff[$i];
}


?>
Return current item: guaranix Rank