热烈祝贺台州维博网络的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » PHP/Perl编程 » 用 PHP 获取 Alexa Rank 、 Google PageRank 、 Sogou Rank 和 ChinaRank …

用 PHP 获取 Alexa Rank 、 Google PageRank 、 Sogou Rank 和 ChinaRank …

论坛链接
  • 用 PHP 获取 Alexa Rank 、 Google PageRank 、 Sogou Rank 和 ChinaRank ……
  • 发布时间:2007-10-05 16:27:21    浏览数:14999    发布者:tznktg    设置字体【   
给出使用方法……

Usage:

注意:
域名不要带协议,
比如 http://www.quchao.com 请去掉 ‘http://’

当前仅支持 alexa 、 google 、 sogou 、 chinarank 四个类型名
其它值将被忽略

一下是调用的例子……

class_rank.php:
/**
* Rank class
*/
class Rank
{
// {{{ properties

/**
* Domain to process.
* @var string
*/
var $_domain = 'www.quchao.com';

/**
* Error Message.
* @var string
*/
var $_error = null;

// {{{ constructor

/**
* Constructor.
* @param string Domain to process
* @return void
*/
function Rank($domain = 'www.quchao.com')
{
if(preg_match('/^(?:[^\W_](?:[^\W_]|-){0,61}[^\W_]\.)+[a-zA-Z]{2,6}\.?$/', $domain)) {
$this->_domain = $domain;
} else {
$this->_error = 'Invalid Domain!';
}
}

// }}}

// {{{ destructor

/**
* Destructor.
* @return void
*/
function __destruct()
{
}

// }}}

// {{{ process()

/**
* Fetch the alexa rank.
* @param string Type of rank (alexa, google, sogou)
* @return mixed Rank value
*/
function process($type = 'alexa')
{
if(in_array(strtolower($type), array('alexa', 'google', 'sogou', 'chinarank'))) {
return $this->$type();
} else {
$this->_error = 'Non-supported Rank Type!';
return 0;
}
}

// }}}

// {{{ alexa()

/**
* Fetch the alexa rank.
* @return mixed Rank value
*/
function alexa()
{
$result = $this->fetch('http://data.alexa.com/data/+wQ411en8000lA?cli=10&dat=snba&ver=7.0&cdt=alx_vw%3D20%26wid%3D12206%26act%3D00000000000%26ss%3D1680x16t%3D0%26ttl%3D35371%26vis%3D1%26rq%3D4&url=' . urlencode($this->_domain));
if(preg_match('/TEXT=\"(\d+)\"\/>/', $result, $match)) {
return $match[1];
} else {
$this->_error = 'Failed to fetch alexa rank!';
return 0;
}
}

// }}}

// {{{ google()

/**
* Fetch the google rank.
* @return mixed Rank value
*/
function google()
{
$result = $this->fetch('http://www.google.com/search?client=navclient-auto&ch=6' . $this->GCH($this->strord('info:' . $this->_domain)) . '&ie=UTF-8&oe=UTF-8&features=Rank&q=info:' . urlencode($this->_domain));
if (preg_match('/\d+:\d+:(\d+)/', $result, $match)) {
return $match[1];
} else {
$this->_error = 'Failed to fetch google rank!';
return 0;
}
}

// }}}

// {{{ sogou()

/**
* Fetch the sogou rank.
* @return mixed Rank value
*/
function sogou()
{
$result = $this->fetch('http://www.sogou.com/web?query=link%3A' . urlencode($this->_domain));
if(preg_match('/<\/span>(\d+)<\/dd>/', $result, $match)) {
return $match[1];
} else {
$this->_error = 'Failed to fetch sogou rank!';
return 0;
}
}

// }}}

// {{{ chinarank()

/**
* Fetch the ChinaRank rank.
* @return mixed Rank value
*/
function chinarank()
{
list($msec, $sec) = split(' ', microtime());
$r = $sec . substr($msec, 2, 3);
$result = $this->fetch('http://www.chinarank.org.cn/overview/Info.do?url=' . urlencode($this->_domain) . '&r=' . $r);
if(preg_match('/class=\"domain\">(\d+)<\/span>/', $result, $match)) {
return $match[1];
} else {
$this->_error = 'Failed to fetch chinarank!';
return 0;
}
}

// }}}

// {{{ fetch()

/**
* Fetch the remote content.
* @param string URL of the page
* @return string Content of the page
*/
function fetch($url)
{
$content = '';
if(function_exists('curl_init')) {
//Curl Method
$handle = curl_init();
if(!$handle) {
return false;
}
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, 0);
$content = curl_exec($handle);
curl_close($handle);
} elseif(ini_get('allow_url_fopen')) {
//File Method
$handle = @fopen($url, 'r');
if(!$handle) {
return false;
}
while($buffer = fgets($handle, 4096)) {
$content .= $buffer;
}
fclose($handle);
} elseif(function_exists('fsockopen')) {
//Socket Method
$pos = strpos($url, '://');
$host = substr($url, $pos + 3, strpos($url, '/', $pos + 3) - $pos - 3);
$uri = substr($url, strpos($url, '/', $pos + 3));
$request = "GET " . $uri . " HTTP/1.1\r\n"
. "Host: " . $host . "\r\n"
. "Accept: */*\r\n"
. "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\r\n"
. "\r\n";
$handle = @fsockopen($host, 80, $errno, $errstr, 30);
if(!$handle) {
return false;
}
@fputs($handle, $request);
while(!feof($handle)) {
$content .= fgets($handle, 4096);
}
fclose($handle);
$separator = strpos($content, "\r\n\r\n");
if($separator === false) {
return $content;
} else {
return substr($content, $separator + 4);
}
}
return $content;
}

// }}}

// {{{ strord()

function strord($string)
{
$strlen = strlen($string);
for($i = 0; $i < $strlen; $i++) {
$result[$i] = ord($string{$i});
}
return $result;
}

// }}}

// {{{ GCH()

function GCH($url, $length=null)
{
$length = sizeof($url);
$a = $b = 0x9E3779B9;
$c = 0xE6359A60;
$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;
//All the case statements fall through
switch($len) {
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];
}

// }}}

// {{{ mix()

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);
}

// }}}

// {{{ zeroFill()

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;
}

// }}}

}

?> < ?php

include './class_rank.php';

// set up your domain
$rank = new Rank('www.quchao.com');

// output the alexa rank
echo $rank->process('alexa');

// output the google page rank
echo $rank->process('google');

// output the sogou page rank
echo $rank->process('sogou');

// output the chinarank
echo $rank->process('chinarank');
?>
      不记得以前在哪个论坛见过这种 XHTML + CSS 的 Page Rank Bar ……
(好像是经典?可以通过 XHTML 的验证……)
这次在 CoolCode 那边再次看到使用……
于是存了下来……
现在贴出本部落格使用的样式表……
与传统不同的部分只是添加了一象素的 Padding ……
个人觉得这样处理会好看很多……
不说了……
给出代码……

getRank.css:

.rank{margin-left:15px;margin-right:15px;margin-bottom:15px;}
.rank_container {width: 80px;text-align: center;font-size: 12px;}
.rank_border {border: 1px solid #999999;background-color: #FFFFFF;padding: 1px;margin: 0;text-align: left;display: block;}
.rank_bar {width: 80px;height: 6px;border: 0;padding: 0;margin: 0;font-size: 0;display: block;}
.rank_rate {width: 0px;height: 6px;padding: 0;margin: 0;border: 0;background-color: #F58EBD;display: block;}
#alexa_rank {background-color: #F58EBD;}
#google_rank {background-color: #FFBB3C;}
#sogou_rank {background-color: #A2BE1B;}
#chinarank_rank {background-color: #5392CE;}
.clearer{clear:both;}


还是超文本部分:
getRank.html:

<p class="rank"> <span class="rank_container" id="alexa_container">Alexa Rank</span>
<span class="rank_bar">
<span class="rank_border">
<span class="rank_rate" id="alexa_rank"></span>
</span>
</span>

<p class="rank"> <span class="rank_container" id="google_container">Google Rank</span>
<span class="rank_bar">
<span class="rank_border">
<span class="rank_rate" id="google_rank"></span>
</span>
</span>

<p class="rank"> <span class="rank_container" id="sogou_container">Sogou Rank</span>
<span class="rank_bar">
<span class="rank_border">
<span class="rank_rate" id="sogou_rank"></span>
</span>
</span>

<p class="rank"> <span class="rank_container" id="chinarank_container">ChinaRank</span>
<span class="rank_bar">
<span class="rank_border">
<span class="rank_rate" id="chinarank_rank"></span>
</span>
</span>

其它的……
大伙儿自己去玩吧……

我直接用文本方式来储存两个排名值……
然后用 filemtime() 函式来判断更新时间……
最简单的缓存而已嘛……
UNIX 服务器用户甚至可以用 Cron 直接缓存排名值到 JS 文件……
等于每次调用的就只是调用静态文件而已……
而省去了对于更新时间的判断……
岂不更??

我的代码:

cache.php:

<?php

if(! function_exists("file_put_contents")) {
function file_put_contents($filename, $text) {
$fp = fopen($filename,"w");
fwrite($fp, $text);
fclose($fp);
}
}

// updated every 24 hours, or use 'force_update = true' to update it manually
if (@filemtime('rank.cache') &lt; time() - 86400 || $_GET['force_update']) {
// write rank cache
include './class_rank.php';
$rank = new Rank('www.quchao.com');
$ranks = array(
$rank-&gt;process('alexa'),
$rank-&gt;process('google'),
$rank-&gt;process('sogou'),
$rank-&gt;process('chinarank'),
);
@file_put_contents('rank.cache', implode("\n", $ranks));
} else {
// get rank cache
$ranks = @file('rank.cache');
}
?>

[ 本帖最后由 tznktg 于 2007-10-5 16:28 编辑 ]
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理