How to Create Google Page Rank Script Using PHP
By kumkum on Feb 02, 2012 - Comments: 13 - Today view: 0 - Total view: 3,477
Page rank is created by Google to rank website based on popularity. Now you can create your own page rank look up script using PHP. I get this script from phurix.net website and modify it to have security code. For original source code, please check https://github.com/phurix/pagerank
First of all, we are going to create HTML form to capture URL and security code.
This is the index.php file contains the HTML form:
<?php
session_start();
/**
* PageRank Lookup (Based on Google Toolbar for Internet Explorer)
*
* @copyright 2011 HM2K <hm2k@php.net>
* @link http://pagerank.phurix.net/
* @author James Wade <hm2k@php.net>
* @version $Revision: 1.5 $
* @require PHP 4.3.0 (file_get_contents)
* @updated 06/10/11
*/
class PageRank {
/**
* @var string $host The Google hostname for PageRank
*/
var $host='toolbarqueries.google.com';
/**
* Returns the PageRank of a URL
*
* @param string $q The query/URL
* @param string $context A stream_context_create() context resource (optional).
*
* @return string
*/
function PageRank ($q,$context=NULL) {
$ch=$this->checksum($this->makehash($q));
$url='http://%s/tbr?client=navclient-auto&ch=%s&features=Rank&q=info:%s';
$url=sprintf($url,$this->host,$ch,$q);
$get_data = file_get_contents($url,false,$context);
$pr = explode(":", $get_data);
return $pr[2];
}
// Convert a string to a 32-bit integer
function strtonum($str, $check, $magic) {
$int32unit = 4294967296; // 2^32
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
$check *= $magic;
/* If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31),
* the result of converting to integer is undefined.
* @see http://www.php.net/manual/en/language.types.integer.php
*/
if ($check >= $int32unit) {
$check = ($check - $int32unit * (int) ($check / $int32unit));
//if the check less than -2^31
$check = ($check < -2147483648) ? ($check + $int32unit) : $check;
}
$check += ord($str{$i});
}
return $check;
}
// Genearate a hash for query
function makehash($string) {
$check1 = $this->strtonum($string, 0x1505, 0x21);
$check2 = $this->strtonum($string, 0, 0x1003f);
$check1 >>= 2;
$check1 = (($check1 >> 4) & 0x3ffffc0 ) | ($check1 & 0x3f);
$check1 = (($check1 >> 4) & 0x3ffc00 ) | ($check1 & 0x3ff);
$check1 = (($check1 >> 4) & 0x3c000 ) | ($check1 & 0x3fff);
$t1 = (((($check1 & 0x3c0) << 4) | ($check1 & 0x3c)) <<2 ) | ($check2 & 0xf0f);
$t2 = (((($check1 & 0xffffc000) << 4) | ($check1 & 0x3c00)) << 0xa) | ($check2 & 0xf0f0000);
return ($t1 | $t2);
}
// Genearate a checksum for the hash string
function checksum($hashnum) {
$checkbyte = 0;
$flag = 0;
$hashstr = sprintf('%u', $hashnum) ;
$length = strlen($hashstr);
for ($i = $length - 1; $i >= 0; $i --) {
$re = $hashstr{$i};
if (1 === ($flag % 2)) {
$re += $re;
$re = (int)($re / 10) + ($re % 10);
}
$checkbyte += $re;
$flag ++;
}
$checkbyte %= 10;
if (0 !== $checkbyte) {
$checkbyte = 10 - $checkbyte;
if (1 === ($flag % 2) ) {
if (1 === ($checkbyte % 2)) {
$checkbyte += 9;
}
$checkbyte >>= 1;
}
}
return '7'.$checkbyte.$hashstr;
}
}
?>
<form method="post">
<table>
<tr>
<td>Website URL</td>
<td><input type=text name=q> <i>example: colekcolek.com</i></td>
</tr>
<tr>
<td valign="top">Security Code</td>
<td><input type=text name=c size="5"> <img src="code.php" style="vertical-align:bottom"></td>
</tr>
<tr>
<td></td>
<td><input type=submit value="Check Page Rank"></td>
</tr>
</table>
</form>
<?php
$website_url = htmlentities($_POST['q']);
$website_url = addslashes($website_url);
if (isset($_POST['q']) && !empty($_POST['c'])) {
if ($_SESSION['rx_code'] == $_POST['c']) {
$pr = new PageRank($website_url);
$get_pr = $pr->PageRank($website_url);
?>
<table>
<tr>
<td>Website URL</td>
<td> : <?php echo $website_url?></td>
</tr>
<tr>
<td>Page Rank</td>
<td> : <?php echo $get_pr?>/10</td>
</tr>
</table>
<?php
} else {
echo "Wrong code !";
echo $_SESSION['rx_code'];
}
} //eof
?>
And here is the code.php to display security code:
<?
header("Content-type: image/png");
session_cache_limiter('nocache');
session_start();
$rx = str_replace("0", "1", substr(md5(time()), 30));
$_SESSION['rx_code'] = $rx;
$im = ImageCreate(130,25);
$bgcolor = ImageColorAllocate($im, 255, 255, 255);
$fgcolor = ImageColorAllocate($im, 0, 0, 0);
ImageString($im, 5, 18, 5, "Code: ".$rx, $fgcolor);
ImagePng($im);
ImageDestroy($im); // free memory
?>
Now test the script, type in URL: facebook.com and security code which appears on screen and click Check Page Rank button.
| Website URL | : facebook.com |
| Page Rank | : 9 /10 |
Update April 23, 2012:
Found another page rank script. Credit to www.w3lessons.com.
The usage is still the same: echo GetPageRank($url);
function GetPageRank($url) {
$url = strstr($url,"http://")? $url:"http://".$url;
$fp = fsockopen("toolbarqueries.google.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /tbr?client=navclient-auto&ch=".CheckHash(HashURL($url))."&features=Rank&q=info:".$url."&num=100&filter=0 HTTP/1.1\r\n";
$out .= "Host: toolbarqueries.google.com\r\n";
$out .= "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$data = fgets($fp, 128);
$pos = strpos($data, "Rank_");
if($pos === false){} else{
$pagerank = substr($data, $pos + 9);
}
}
fclose($fp);
return (int)$pagerank;
}
}
function StrToNum($Str, $Check, $Magic) {
$Int32Unit = 4294967296; // 2^32
$length = strlen($Str);
for ($i = 0; $i < $length; $i++) {
$Check *= $Magic;
if ($Check >= $Int32Unit) {
$Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
$Check = ($Check < -2147483648)? ($Check + $Int32Unit) : $Check;
}
$Check += ord($Str{$i});
}
return $Check;
}
function HashURL($String) {
$Check1 = StrToNum($String, 0x1505, 0x21);
$Check2 = StrToNum($String, 0, 0x1003F);
$Check1 >>= 2;
$Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
$Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
$Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);
$T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) << 2 ) | ($Check2 & 0xF0F );
$T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
return ($T1 | $T2);
}
function CheckHash($Hashnum) {
$CheckByte = 0;
$Flag = 0;
$HashStr = sprintf('%u', $Hashnum) ;
$length = strlen($HashStr);
for ($i = $length - 1; $i >= 0; $i --) {
$Re = $HashStr{$i};
if (1 === ($Flag % 2)) {
$Re += $Re;
$Re = (int)($Re / 10) + ($Re % 10);
}
$CheckByte += $Re;
$Flag ++;
}
$CheckByte %= 10;
if (0!== $CheckByte) {
$CheckByte = 10 - $CheckByte;
if (1 === ($Flag % 2) ) {
if (1 === ($CheckByte % 2)) {
$CheckByte += 9;
}
$CheckByte >>= 1;
}
}
return '7'.$CheckByte.$HashStr;
}
Filed Under: Featured • PHP • Technology • Tutorial


Thanks, your code works like charm
Thanks, its really working…
Script still works? I get bool FALSE
Hi, Mario. Script is not working, but I updated now. Please have a try.
Hi,
I have testet your code. It workes perfect.
Could u help me to change this cod tu new version?
function get_pr($domain,$host=’toolbarqueries.google.com’,$context=NULL)
{
$domain = $domain.”;
$seed = “Mining PageRank is AGAINST GOOGLE’S TERMS OF SERVICE. Yes, I’m talking to you, scammer.”;
$result = 0×01020345;
$len = strlen($domain);
for ($i=0; $i> 23) & 0x1ff) | $result << 9;
}
$ch=sprintf('8%x', $result);
$url='http://%s/tbr?client=navclient-auto&ch=%s&features=Rank&q=info:%s';
$url=sprintf($url,$host,$ch,$domain);
$pr=file_get_contents($url,false,$context);
return $pr?substr(strrchr($pr, ':'), 1):false;
}
Hi, Thomas
Please see updated codes at bottom of the post.
I’ve been wondering why google guys decided to implement a value of “Mining PageRank is AGAINST GOOGLE’S TERMS OF SERVICE. Yes, I’m talking to you, scammer.”
What’s the sense behind the string?
Any hints?
Joseph.
Author and Publisher,
http://www.josytal.com – Free Software for Small Business.
http://www.directorygist.com – Directory of Web Directories with Online submission tools.
$seed variable could be any string value. I think that’s a creative way from the programmer to deliver his message
Just last week my script identical to the pr part of your script stopped working. Mine updates the PR for domains in a database and all are showing PR 0 now.
Anyone have this problem?
Well i decided to try your code and replaced what you have originally that does not work and it works great. Thanks for sharing.
Gib
You should report the issue here:
https://github.com/phurix/pagerank/issues
Rather than using an old script.
Thank you, James.
I updated the article with your new code (v1.5).
nice script, leave comment