PHP Classes
Icontem

File: gRank.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Cesar D. Rodas  >  guaranix Rank  >  gRank.php  
File: gRank.php
Role: Class source
Content type: text/plain
Description: This is the class that will calcualte the PR
Class: guaranix Rank
Implementation of the Google page rank algorithm
 

Contents

Class file image Download
<?
/****************************************************************************************
*    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)($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];
}


?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products