Google的PR值查询[asp,php,c#]

2008/12/28 17:35:26    发布:walf_man

ASP/Visual Basic代码
  1. <%@LANGUAGE="JAVAscript"%>  
  2. <title>Google PR值查询 asp程序</title>  
  3. <%  
  4. function hexdec(str)  
  5. {  
  6.     return parseInt(str,16);  
  7. }  
  8.   
  9.   
  10. function zeroFill(a,b)  
  11. {  
  12.     var z = hexdec(80000000);  
  13.     if (z & a)  
  14.     {  
  15.         a = a>>1;  
  16.         a &= ~z;  
  17.         a |= 0x40000000;  
  18.         a = a>>(b-1);  
  19.     }  
  20.     else  
  21.     {  
  22.         a = a >> b;  
  23.     }  
  24.     return (a);  
  25. }  
  26.   
  27. function mix(a,b,c)  
  28. {  
  29.     a -= b; a -= c; a ^= (zeroFill(c,13));  
  30.     b -= c; b -= a; b ^= (a<<8);  
  31.     c -= a; c -= b; c ^= (zeroFill(b,13));  
  32.     a -= b; a -= c; a ^= (zeroFill(c,12));  
  33.     b -= c; b -= a; b ^= (a<<16);  
  34.     c -= a; c -= b; c ^= (zeroFill(b,5));  
  35.     a -= b; a -= c; a ^= (zeroFill(c,3));  
  36.     b -= c; b -= a; b ^= (a<<10);  
  37.     c -= a; c -= b; c ^= (zeroFill(b,15));  
  38.     var ret = new Array((a),(b),(c));  
  39.     return ret;  
  40. }  
  41.   
  42.   
  43. function GoogleCH(url,length)  
  44. {  
  45.     var init = 0xE6359A60;  
  46.     if (arguments.length == 1)  
  47.      length = url.length;     
  48.     var a = 0x9E3779B9;  
  49.     var b = 0x9E3779B9;  
  50.     var c = 0xE6359A60;  
  51.     var k = 0;  
  52.     var len = length;  
  53.     var mixo = new Array();  
  54.     while(len >= 12)  
  55.     {  
  56.         a += (url[k+0] +(url[k+1]<<8) +(url[k+2]<<16) +(url[k+3]<<24));  
  57.         b += (url[k+4] +(url[k+5]<<8) +(url[k+6]<<16) +(url[k+7]<<24));  
  58.         c += (url[k+8] +(url[k+9]<<8) +(url[k+10]<<16)+(url[k+11]<<24));  
  59.         mixo = mix(a,b,c);  
  60.         a = mixo[0]; b = mixo[1]; c = mixo[2];  
  61.         k += 12;  
  62.         len -= 12;  
  63.     }  
  64.     c += length;  
  65.     switch(len)  
  66.     {  
  67.         case 11:  
  68.         c += url[k+10]<<24;  
  69.         case 10:  
  70.         c+=url[k+9]<<16;  
  71.         case 9 :  
  72.         c+=url[k+8]<<8;  
  73.         case 8 :  
  74.         b+=(url[k+7]<<24);  
  75.         case 7 :  
  76.         b+=(url[k+6]<<16);  
  77.         case 6 :  
  78.         b+=(url[k+5]<<8);  
  79.         case 5 :  
  80.         b+=(url[k+4]);  
  81.         case 4 :  
  82.         a+=(url[k+3]<<24);  
  83.         case 3 :  
  84.         a+=(url[k+2]<<16);  
  85.         case 2 :  
  86.         a+=(url[k+1]<<8);  
  87.         case 1 :  
  88.         a+=(url[k+0]);  
  89.     }  
  90.     mixo = mix(a,b,c);  
  91.     if (mixo[2] < 0)  
  92.     return (0x100000000 + mixo[2]);  
  93.     else  
  94.     return mixo[2];  
  95. }  
  96.   
  97.   
  98. function strord(s)  
  99. {  
  100.     var re = new Array();  
  101.     for(i=0;i<s.length;i++)  
  102.     {  
  103.         re[i] = s.charCodeAt(i);  
  104.     }  
  105.     return re;  
  106. }  
  107.   
  108. function c32to8bit(arr32)   
  109. {  
  110.     var arr8 = new Array();   
  111.     for(i=0;i<arr32.length;i++)   
  112.     {  
  113.      for (bitOrder=i*4;bitOrder<=i*4+3;bitOrder++)   
  114.      {  
  115.             arr8[bitOrder]=arr32[i]&255;  
  116.             arr32[i]=zeroFill(arr32[i], 8);  
  117.         }  
  118.     }  
  119.     return arr8;  
  120. }  
  121.   
  122. function myfmod(x,y)  
  123. {  
  124.  var i = Math.floor(x/y);  
  125.         return (x - i*y);  
  126. }  
  127.   
  128.   
  129. function GoogleNewCh(ch)  
  130. {  
  131.  ch = (((ch/7) << 2) | ((myfmod(ch,13))&7));  
  132.   
  133.  prbuf = new Array();  
  134.  prbuf[0] = ch;  
  135.  for(i = 1; i < 20; i++) {  
  136.        prbuf[i] = prbuf[i-1]-9;  
  137.  }  
  138.  ch = GoogleCH(c32to8bit(prbuf), 80);  
  139.  return ch;  
  140.     
  141. }  
  142. function URLencode(sStr)  
  143. {  
  144. return encodeURIComponent(sStr).replace(/\+/g,"%2B").replace(/\//g,"%2F");  
  145. }  
  146.   
  147. function getGoogleHostInfo(url){  
  148.     var reqgr = "info:" + url;  
  149.     var reqgre = "info:" + URLencode(url);  
  150.  //Response.Write(reqgr+"<br>"+reqgre);  
  151.     gch = GoogleCH(strord(reqgr));  
  152.     gch = "6" + GoogleNewCh(gch);  
  153.   
  154.     var querystring = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=" + gch + "&ie=UTF-8&oe=UTF-8&features=Rank:FVN&q=" + reqgre;  
  155.  //Response.Write(querystring);  
  156.  var objXMLHTTP, xml;  
  157.  xml = Server.CreateObject("Microsoft.XMLHTTP");  
  158.  xml.Open("GET", querystring, false);  
  159.  xml.setRequestHeader( "User-Agent""Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)" );  
  160.  xml.send();  
  161.  //Response.Write(xml.responseText);  
  162.    
  163.  //Response.Write(xml.responseBody);  
  164.  return xml.responseText;  
  165. }  
  166. function getPageRank(temp){  
  167.   var foo = temp.match(/Rank_.*?:.*?:(\d+)/i);  
  168.   var pr = (foo) ? foo[1] : "";  
  169.   return pr;  
  170. }  
  171.   
  172. function getDirectory(temp){  
  173.   var  foo = temp.match(/FVN_.*?:.*?:(?:Top\/)?([^\s]+)/i);  
  174.   var cat = (foo) ? foo[1] : "";  
  175.   if(cat!="")cat="http://directory.google.com/Top/"+cat  
  176.   return cat;  
  177. }  
  178.   
  179. var site;  
  180. site=Request.Form("site");  
  181. if(site!="undefined"){  
  182.  var google=getGoogleHostInfo(site);  
  183.  var pagerank=getPageRank(google);  
  184.  var directory=getDirectory(google);  
  185.  Response.Write("PageRank:"+pagerank+"<br>");  
  186.  Response.Write("PageRank:<img src=\"images/pr"+pagerank+".png\" alt=\"PageRank:"+pagerank+"\"><br>");  
  187.  Response.Write("Site:"+site+"<br>");  
  188.  if(directory!="")Response.Write("Site:<a href="+directory+">"+directory+"</a><br>");  
  189. }  
  190. %>  

[asp]: http://blog.zenme.org/demo/pr.asp

PHP代码
  1. <?php   
  2. define('GOOGLE_MAGIC', 0xE6359A60);   
  3.   
  4. //unsigned shift right   
  5. function zeroFill($a$b)   
  6. {   
  7. $z = hexdec(80000000);   
  8. if ($z & $a)   
  9. {   
  10. $a = ($a>>1);   
  11. $a &= (~$z);   
  12. $a |= 0x40000000;   
  13. $a = ($a>>($b-1));   
  14. }   
  15. else   
  16. {   
  17. $a = ($a>>$b);   
  18. }   
  19. return $a;   
  20. }   
  21.   
  22. function mix($a,$b,$c) {   
  23. $a -= $b$a -= $c$a ^= (zeroFill($c,13));   
  24. $b -= $c$b -= $a$b ^= ($a<<8);   
  25. $c -= $a$c -= $b$c ^= (zeroFill($b,13));   
  26. $a -= $b$a -= $c$a ^= (zeroFill($c,12));   
  27. $b -= $c$b -= $a$b ^= ($a<<16);   
  28. $c -= $a$c -= $b$c ^= (zeroFill($b,5));   
  29. $a -= $b$a -= $c$a ^= (zeroFill($c,3));   
  30. $b -= $c$b -= $a$b ^= ($a<<10);   
  31. $c -= $a$c -= $b$c ^= (zeroFill($b,15));   
  32.   
  33. return array($a,$b,$c);   
  34. }   
  35.   
  36. function GoogleCH($url$length=null, $init=GOOGLE_MAGIC) {   
  37. if(is_null($length)) {   
  38. $length = sizeof($url);   
  39. }   
  40. $a = $b = 0x9E3779B9;   
  41. $c = $init;   
  42. $k = 0;   
  43. $len = $length;   
  44. while($len >= 12) {   
  45. $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));   
  46. $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));   
  47. $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));   
  48. $mix = mix($a,$b,$c);   
  49. $a = $mix[0]; $b = $mix[1]; $c = $mix[2];   
  50. $k += 12;   
  51. $len -= 12;   
  52. }   
  53.   
  54. $c += $length;   
  55. switch($len/* all the case statements fall through */   
  56. {   
  57. case 11: $c+=($url[$k+10]<<24);   
  58. case 10: $c+=($url[$k+9]<<16);   
  59. case 9 : $c+=($url[$k+8]<<8);   
  60. /* the first byte of c is reserved for the length */   
  61. case 8 : $b+=($url[$k+7]<<24);   
  62. case 7 : $b+=($url[$k+6]<<16);   
  63. case 6 : $b+=($url[$k+5]<<8);   
  64. case 5 : $b+=($url[$k+4]);   
  65. case 4 : $a+=($url[$k+3]<<24);   
  66. case 3 : $a+=($url[$k+2]<<16);   
  67. case 2 : $a+=($url[$k+1]<<8);   
  68. case 1 : $a+=($url[$k+0]);   
  69. /* case 0: nothing left to add */   
  70. }   
  71. $mix = mix($a,$b,$c);   
  72. /*-------------------------------------------- report the result */   
  73. return $mix[2];   
  74. }   
  75.   
  76. //converts a string into an array of integers containing the numeric value of the char   
  77. function strord($string) {   
  78. for($i=0;$i<strlen($string);$i++) {   
  79. $result[$i] = ord($string{$i});   
  80. }   
  81. return $result;   
  82. }   
  83.   
  84. function get_pr($url) {   
  85. $result=array("",-1);   
  86.   
  87. if (($url.""!="")&&($url.""!="http://")):   
  88. // check for protocol   
  89. if (substr(strtolower($url),0,7)!="http://"):   
  90. $url="http://".$url;   
  91. endif;   
  92.   
  93. $url="info:".$url;   
  94. $checksum=GoogleCH(strord($url));   
  95. $google_url=sprintf("http://www.google.com/search?client=navclient-auto&ch=6%u&features=Rank&q=".$url,$checksum); // url to get from google   
  96.   
  97. $contents="";   
  98.   
  99. $handle = fopen($google_url"rb");   
  100. $contents = '';   
  101. while (!feof($handle)) {   
  102.   $contents.= fread($handle, 8192);   
  103. }   
  104. fclose($handle);   
  105. $p=explode(":",$contents);   
  106. if (isset($p[2])):   
  107. $result[1]=$p[2];   
  108. endif;   
  109. endif;   
  110.   
  111. return $result;   
  112. }   
  113.   
  114. function getPR_url($url)   
  115. {   
  116.   global $db;   
  117.   
  118.   if (eregi('^http://www.',$url)) {   
  119.    $url_www = str_replace('http://www.','http://',$url);   
  120.   } else {   
  121.    $url_www = str_replace('http://','http://www.',$url);   
  122.   }   
  123.   
  124.   $pr=get_pr($url);   
  125.   $output=$pr[0];   
  126.   $pagerank=$pr[1];   
  127.   sleep(1);   
  128.   $pr=get_pr($url_www);   
  129.   $output_www=$pr[0];   
  130.   $pagerank_www=$pr[1];   
  131.   
  132.   if ($pagerank<$pagerank_www) {   
  133.    $pagerank=$pagerank_www;   
  134.   }   
  135.   if ($pagerank==-1) {   
  136.    $pagerank=0;   
  137.   }   
  138. return intval($pagerank);   
  139. }  
  140. $site=$_POST['url'];  
  141. if(isset($_POST['url'])){  
  142.  $pagerank=getPR_url($site);  
  143.  echo("PageRank:{$pagerank}<br>");  
  144.  echo("PageRank:<img src=\"images/pr{$pagerank}.png\" alt=\"PageRank:{$pagerank}\"><br>");  
  145.  echo("Site:{$site}<br>");  
  146. }  
  147. //echo $_GET['url'].' '.getPR_url($_GET['url']);   
  148. ?>  

[php]: http://blog.zenme.org/demo/pr.php

C#代码
  1. using System.Net;  
  2. using System.Text.RegularExpressions;  
  3. public  class GooglePageRank   
  4. {  
  5.     protected void Page_Load(object sender, EventArgs e)  
  6.     {  
  7.         if (Request.Form["url"] != null )  
  8.         {     
  9.             string site=Request.Form["url"].ToString();  
  10.   
  11.             string r = string.Empty;  
  12.             string pr=GetPageRank(site).ToString();  
  13.             r = "PageRank:" + pr + "<br/>PageRank:<img src=\"images/pr" + pr + ".png\" alt=\"PageRank:" + pr + "\"><br>Site:" + site;  
  14.             Response.Write(r);  
  15.         }  
  16.     }  
  17.     public int GetPageRank(string url)  
  18.     {  
  19.         if (!url.ToLower().StartsWith("http://"))  
  20.             url = "http://" + url;  
  21.   
  22.         url = "info:" + url;  
  23.         uint checksum = GetChecksum(url.ToCharArray());  
  24.         checksum = GoogleNewCh(checksum);  
  25.         string googleUrl = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=6" + checksum  
  26.             + "&ie=UTF-8&oe=UTF-8&features=Rank:FVN&q=" + url;  
  27.   
  28.         string pageText = GetResponseText(googleUrl);  
  29.   
  30.         string pageRankString = "0";  
  31.         Regex re = new Regex("Rank_.*?:.*?:(?<1>\\d+)\\n", RegexOptions.Singleline | RegexOptions.IgnoreCase);  
  32.         Match m = re.Match(pageText);  
  33.         if (m.Success) pageRankString = m.Groups[1].ToString();  
  34.   
  35.         int pageRank = int.Parse(pageRankString);  
  36.         return pageRank;  
  37.     }  
  38.   
  39.     private uint GetChecksum(char[] url)  
  40.     {  
  41.         uint a = 0x9E3779B9;  
  42.         uint b = a;  
  43.         uint c = 0xE6359A60;  
  44.         int k = 0;  
  45.         int len = url.Length;  
  46.   
  47.         while (len >= 12)  
  48.         {  
  49.             a += ((uint) url[k + 0] + ((uint) url[k + 1] << 8) + ((uint) url[k + 2] << 16) + ((uint) url[k + 3] << 24));  
  50.             b += ((uint) url[k + 4] + ((uint) url[k + 5] << 8) + ((uint) url[k + 6] << 16) + ((uint) url[k + 7] << 24));  
  51.             c += ((uint) url[k + 8] + ((uint) url[k + 9] << 8) + ((uint) url[k + 10] << 16) + ((uint) url[k + 11] << 24));  
  52.   
  53.             uint[] mix = Mix(a, b, c);  
  54.             a = mix[0];  
  55.             b = mix[1];  
  56.             c = mix[2];  
  57.             k += 12;  
  58.             len -= 12;  
  59.         }  
  60.         c += (uint)url.Length;  
  61.   
  62.         switch (len)  
  63.         {  
  64.             case 11: c += ((uint) url[k + 10] << 24); goto case 10;  
  65.             case 10: c += ((uint) url[k + 9] << 16); goto case 9;  
  66.             case 9: c += ((uint) url[k + 8] << 8); goto case 8;  
  67.             case 8: b += ((uint) url[k + 7] << 24); goto case 7;  
  68.             case 7: b += ((uint) url[k + 6] << 16); goto case 6;  
  69.             case 6: b += ((uint) url[k + 5] << 8); goto case 5;  
  70.             case 5: b += ((uint) url[k + 4]); goto case 4;  
  71.             case 4: a += ((uint) url[k + 3] << 24); goto case 3;  
  72.             case 3: a += ((uint) url[k + 2] << 16); goto case 2;  
  73.             case 2: a += ((uint) url[k + 1] << 8); goto case 1;  
  74.             case 1: a += ((uint) url[k + 0]); break;  
  75.         }  
  76.   
  77.         uint[] mixx = Mix(a, b, c);  
  78.         return (uint) mixx[2];  
  79.     }  
  80.   
  81.     private char[] c32to8bit(uint[] arr32)   
  82.     {  
  83.         char[] arr8 = new char[4 * arr32.Length];  
  84.         for (int i=0; i<arr32.Length; i++)  
  85.         {  
  86.             for (int bitOrder=i*4; bitOrder<=i*4+3; bitOrder++)  
  87.             {  
  88.                 arr8[bitOrder] = (char)(arr32[i] & 255);  
  89.                 arr32[i] = ZeroFill(arr32[i], 8);  
  90.             }  
  91.         }  
  92.         return arr8;  
  93.     }  
  94.   
  95.     private uint myfmod(uint x, int y)  
  96.     {  
  97.         double d = x / 7;  
  98.         int i = (int)System.Math.Floor(d);  
  99.         return (uint)(x - i * y);  
  100.     }  
  101.   
  102.     private uint GoogleNewCh(uint ch)  
  103.     {  
  104.         ch = (((ch/7) << 2) | ((myfmod(ch, 13))&7));  
  105.         uint[] prbuf = new uint[20];  
  106.         prbuf[0] = ch;  
  107.         for(int i = 1; i < 20; i++)  
  108.         {  
  109.             prbuf[i] = prbuf[i-1]-9;  
  110.         }  
  111.         ch = GetChecksum(c32to8bit(prbuf));  
  112.         return ch;  
  113.     }  
  114.   
  115.     private uint[] Mix(uint a, uint b, uint c)  
  116.     {  
  117.         a -= b; a -= c; a = a ^ (ZeroFill(c, 13));  
  118.         b -= c; b -= a; b ^= a << 8;  
  119.         c -= a; c -= b; c = c ^ (ZeroFill(b, 13));  
  120.         a -= b; a -= c; a = a ^ (ZeroFill(c, 12));  
  121.         b -= c; b -= a; b ^= a << 16;  
  122.         c -= a; c -= b; c = c ^ (ZeroFill(b, 5));  
  123.         a -= b; a -= c; a = a ^ (ZeroFill(c, 3));  
  124.         b -= c; b -= a; b ^= a << 10;  
  125.         c -= a; c -= b; c = c ^ (ZeroFill(b, 15));  
  126.   
  127.         uint[] arr = new uint[3];  
  128.         arr[0] = a;  
  129.         arr[1] = b;  
  130.         arr[2] = c;  
  131.         return arr;  
  132.     }  
  133.   
  134.     private uint ZeroFill(uint a, int b)  
  135.     {  
  136.         uint z = 0x80000000;  
  137.         if ((z & a) > 0)  
  138.         {  
  139.             a = a >> 1;  
  140.             a = a & (~z);  
  141.             a = a | 0x40000000;  
  142.             a = a >> (b - 1);  
  143.         }  
  144.         else  
  145.             a = a >> b;  
  146.         return a;  
  147.     }  
  148.   
  149.     private string GetResponseText(string url)  
  150.     {  
  151.         string pageText = "";  
  152.   
  153.         HttpWebRequest request = null;  
  154.         WebResponse response = null;  
  155.         System.IO.Stream stream = null;  
  156.         System.IO.StreamReader reader = null;  
  157.         try  
  158.         {  
  159.             request = (HttpWebRequest) WebRequest.Create(url);  
  160.             request.UserAgent = "Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)";  
  161.             request.Timeout = 4 * 1000;  
  162.   
  163.             response = request.GetResponse();  
  164.   
  165.             stream = response.GetResponseStream();  
  166.             reader = new System.IO.StreamReader(  
  167.                 stream, System.Text.Encoding.GetEncoding(1251));  
  168.             pageText = reader.ReadToEnd();  
  169.         }  
  170.         catch (WebException)  
  171.         {  
  172.         }  
  173.         finally  
  174.         {  
  175.             if (response != null) response.Close();  
  176.             if (stream != null) stream.Close();  
  177.             if (reader != null) reader.Close();  
  178.         }  
  179.         return pageText;  
  180.     }  
  181. }  

 

来源URL:http://blog.zenme.org/?action=show&id=133

发表评论:

即刻认识你所在地区的8万帅哥美女
免费注册,简单容易!匿名电邮,既隐秘又安
全!注意:绝不含有或容许任何色情成份!
chinesefriendfinder.com

[评论最长字数:1000,查看结果请刷新]

◎请在这里发表您的看法,发言请遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。