完整的ASP版Google PR查询代码

网络整理 - 09-04
自从Google对PR查询加密后,ASP版的PR查询代码就很少见了,今天找到一个,给需要的站长,完整的代码如下:

<%@LANGUAGE="JAVASCRIPT"%>
<form name="zzsky" method="get" action=""> 
<input type="text" name="site">
<input type="submit" name="submit" value="查询">
</form>
<% 
function hexdec(str) 

return parseInt(str,16); 

function zeroFill(a,b) 

var 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)); 
var ret = new Array((a),(b),(c)); 
return ret; 

function GoogleCH(url,length) 

var init = 0xE6359A60; 
if (arguments.length == 1) 
length = url.length; 
var a = 0x9E3779B9; 
var b = 0x9E3779B9; 
var c = 0xE6359A60; 
var k = 0; 
var len = length; 
var mixo = new Array(); 
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)); 
mixo = mix(a,b,c); 
a = mixo[0]; b = mixo[1]; c = mixo[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]); 

mixo = mix(a,b,c); 
if (mixo[2] < 0) 
return (0x100000000 + mixo[2]); 
else 
return mixo[2]; 

function strord(s) 

var re = new Array(); 
for(i=0;i<s.length;i++) 

re[i] = s.charCodeAt(i); 

return re; 

function c32to8bit(arr32) 

var arr8 = new Array(); 
for(i=0;i<arr32.length;i++) 

for (bitOrder=i*4;bitOrder<=i*4+3;bitOrder++) 

arr8[bitOrder]=arr32[i]&255; 
arr32[i]=zeroFill(arr32[i], 8); 


return arr8; 

function myfmod(x,y) 

var i = Math.floor(x/y); 
return (x - i*y); 

function GoogleNewCh(ch) 

ch = (((ch/7) << 2) | ((myfmod(ch,13))&7)); 
prbuf = new Array(); 
prbuf[0] = ch; 
for(i = 1; i < 20; i++) { 
prbuf[i] = prbuf[i-1]-9; 

ch = GoogleCH(c32to8bit(prbuf), 80); 
return ch; 

function URLencode(sStr) 

return encodeURIComponent(sStr).replace(/\+/g,"%2B").replace(/\//g,"%2F"); 

function getGoogleHostInfo(url){ 
var reqgr = "info:" + url; 
var reqgre = "info:" + URLencode(url); 
//Response.Write(reqgr+"<br>"+reqgre); 
gch = GoogleCH(strord(reqgr)); 
gch = "6" + GoogleNewCh(gch); 
var querystring = "?client=navclient-auto&ch=" + 
gch + "&ie=UTF-8&oe=UTF-8&features=Rank:FVN&q=" + reqgre; 
//Response.Write(querystring); 
var objXMLHTTP, xml; 
xml = Server.CreateObject("Microsoft.XMLHTTP"); 
xml.Open("GET", querystring, false); 
xml.setRequestHeader( "User-Agent", "Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)" ); 
xml.send(); 
//Response.Write(xml.responseText); 
//Response.Write(xml.responseBody); 
return xml.responseText; 

function getPageRank(temp){ 
var foo = temp.match(/Rank_.*?:.*?:(\d+)/i); 
var pr = (foo) ? foo[1] : ""; 
return pr; 

function getDirectory(temp){ 
var foo = temp.match(/FVN_.*?:.*?:(?:Top\/)?([^\s]+)/i); 
var cat = (foo) ? foo[1] : ""; 
if(cat!="")cat=""+cat 
return cat; 

var site; 
site=Request("site"); 
if(site!="undefined"){ 
var google=getGoogleHostInfo(site); 
var pagerank=getPageRank(google); 
var directory=getDirectory(google); 
Response.Write("PageRank: "+pagerank+"<br>"); 
Response.Write("网站:"+site+"<br>"); 
if(directory!="")Response.Write("所在目录:<a href="+directory+">"+directory+"</a><br>"); 

%>