获得Google PR值的PHP代码


Posted in PHP onJanuary 28, 2007

今天更新blog程序后,突然发现google工具条上的PR条增加了一点,不过一直以来Google工具条上的PR因为缓冲问题,使得当前显示的PR值并不一定是目前页面的PR值,因此去查了下,发现blog站点(http://mlsx.xplore.cn/)的PR值上升到了3,但是首页 (http://mlsx.xplore.cn)还是2。霍霍,庆贺一下。

不过glemir今天上午告诉我他的blog早已经到了3,使我有点嫉妒,连带想起了Rachel的blog ,他们更新都没有我勤快,但是他们的PR基本上不必我差。由此我得出两个自我安慰的结论:

1)Rachel的PR和我的一样,是因为他的游记日志受欢迎,我没有他的手笔。

2)glemir的PR升的比我的快,那是因为他用了一个好blog程序--wordpress

哈哈,自嘲一下。

转入正题,贴上获得Google的PR值代码,声明不是我写的,只是修改,checksum的算法暂时还不知道。

演示代码点击这里

<?php 
define('GOOGLE_MAGIC', 0xE6359A60); 
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 ^= (zeroFill($c,13)); 
$b -= $c; $b -= $a; $b ^= ($a<<8); 
$c -= $a; $c -= $b; $c ^= (zeroFill($b,13)); 
$a -= $b; $a -= $c; $a ^= (zeroFill($c,12)); 
$b -= $c; $b -= $a; $b ^= ($a<<16); 
$c -= $a; $c -= $b; $c ^= (zeroFill($b,5)); 
$a -= $b; $a -= $c; $a ^= (zeroFill($c,3)); 
$b -= $c; $b -= $a; $b ^= ($a<<10); 
$c -= $a; $c -= $b; $c ^= (zeroFill($b,15)); 
return array($a,$b,$c); 
} 
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 = 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 = mix($a,$b,$c); 
return $mix[2]; 
} 
function strord($string) { 
for($i=0;$i<strlen($string);$i++) { 
$result[$i] = ord($string{$i}); 
} 
return $result; 
} 
function ReadPR($link) 
{ 
$fp = fsockopen ("www.google.com", 80, $errno, $errstr, 30); 
if (!$fp) 
{ 
echo "$errstr ($errno)\n"; 
exit(1); 
} 
else 
{ 
$out = "GET $link HTTP/1.0\r\n"; 
$out .= "Host: toolbarqueries.google.com\r\n"; 
$out .= "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114.9-big; Linux 2.6)\r\n"; 
$out .= "Connection: Close\r\n\r\n"; 
fwrite($fp, $out); 
do{ 
$line = fgets($fp, 128); 
}while ($line !== "\r\n"); 
$data = fread($fp,8192); 
fclose ($fp); 
return $data; 
} 
} 
function GetPR($url) 
{ 
$url ='info:'.$url; 
$ch = GoogleCH(strord($url)); 
$data = ReadPR("/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url"); 
$rankarray = explode (':', $data); 
return $rankarray[2]; 
} 
if ( isset($_POST['url']) && $_POST['url'] !== '' ) 
{ 
echo 'PageRank: '.GetPR($_POST['url']); 
} 
?> 
<html><title>Google PR值查询</title> 
<body>Google PR值查询 <a href='pr.phps' >获取源代码</a> 
<form action='' method='post'><br /> 
URL:<input name='url' value='http://' type='text' size=40> 
<input name='submit' type='submit' value='Get PR'> 
</form></body></html>
PHP 相关文章推荐
汉字转化为拼音(php版)
Oct 09 PHP
PHP循环获取GET和POST值的代码
Apr 09 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
一键删除顽固的空文件夹 软件下载
Jan 26 #PHP
php中通过smtp发邮件的类,测试通过
Jan 22 #PHP
php5.2.0内存管理改进
Jan 22 #PHP
php中截取字符串支持utf-8
Jan 18 #PHP
php中的登陆login
Jan 18 #PHP
php中的时间显示
Jan 18 #PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 #PHP
You might like
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
激活 ActiveX 控件
2006/10/09 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
React优化子组件render的使用
2019/05/12 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python数据类型之List列表实例详解
2019/05/08 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
和平主题的演讲稿
2014/01/12 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
前台岗位职责范本
2015/04/16 职场文书
学校党员干部承诺书
2015/05/04 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书