-
Google的PR值查询[asp,php,c#] - 2008/12/28 17:35:26 发布:walf_man
-
ASP/Visual Basic代码
- <%@LANGUAGE="JAVAscript"%>
- <title>Google PR值查询 asp程序</title>
- <%
- 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 = "http://toolbarqueries.google.com/search?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="http://directory.google.com/Top/"+cat
- return cat;
- }
- var site;
- site=Request.Form("site");
- if(site!="undefined"){
- var google=getGoogleHostInfo(site);
- var pagerank=getPageRank(google);
- var directory=getDirectory(google);
- Response.Write("PageRank:"+pagerank+"<br>");
- Response.Write("PageRank:<img src=\"images/pr"+pagerank+".png\" alt=\"PageRank:"+pagerank+"\"><br>");
- Response.Write("Site:"+site+"<br>");
- if(directory!="")Response.Write("Site:<a href="+directory+">"+directory+"</a><br>");
- }
- %>
[asp]: http://blog.zenme.org/demo/pr.asp
PHP代码- <?php
- define('GOOGLE_MAGIC', 0xE6359A60);
- //unsigned shift right
- 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) /* all the case statements fall through */
- {
- 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 = mix($a,$b,$c);
- /*-------------------------------------------- report the result */
- return $mix[2];
- }
- //converts a string into an array of integers containing the numeric value of the char
- function strord($string) {
- for($i=0;$i<strlen($string);$i++) {
- $result[$i] = ord($string{$i});
- }
- return $result;
- }
- function get_pr($url) {
- $result=array("",-1);
- if (($url.""!="")&&($url.""!="http://")):
- // check for protocol
- if (substr(strtolower($url),0,7)!="http://"):
- $url="http://".$url;
- endif;
- $url="info:".$url;
- $checksum=GoogleCH(strord($url));
- $google_url=sprintf("http://www.google.com/search?client=navclient-auto&ch=6%u&features=Rank&q=".$url,$checksum); // url to get from google
- $contents="";
- $handle = fopen($google_url, "rb");
- $contents = '';
- while (!feof($handle)) {
- $contents.= fread($handle, 8192);
- }
- fclose($handle);
- $p=explode(":",$contents);
- if (isset($p[2])):
- $result[1]=$p[2];
- endif;
- endif;
- return $result;
- }
- function getPR_url($url)
- {
- global $db;
- if (eregi('^http://www.',$url)) {
- $url_www = str_replace('http://www.','http://',$url);
- } else {
- $url_www = str_replace('http://','http://www.',$url);
- }
- $pr=get_pr($url);
- $output=$pr[0];
- $pagerank=$pr[1];
- sleep(1);
- $pr=get_pr($url_www);
- $output_www=$pr[0];
- $pagerank_www=$pr[1];
- if ($pagerank<$pagerank_www) {
- $pagerank=$pagerank_www;
- }
- if ($pagerank==-1) {
- $pagerank=0;
- }
- return intval($pagerank);
- }
- $site=$_POST['url'];
- if(isset($_POST['url'])){
- $pagerank=getPR_url($site);
- echo("PageRank:{$pagerank}<br>");
- echo("PageRank:<img src=\"images/pr{$pagerank}.png\" alt=\"PageRank:{$pagerank}\"><br>");
- echo("Site:{$site}<br>");
- }
- //echo $_GET['url'].' '.getPR_url($_GET['url']);
- ?>
[php]: http://blog.zenme.org/demo/pr.php
C#代码- using System.Net;
- using System.Text.RegularExpressions;
- public class GooglePageRank
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- if (Request.Form["url"] != null )
- {
- string site=Request.Form["url"].ToString();
- string r = string.Empty;
- string pr=GetPageRank(site).ToString();
- r = "PageRank:" + pr + "<br/>PageRank:<img src=\"images/pr" + pr + ".png\" alt=\"PageRank:" + pr + "\"><br>Site:" + site;
- Response.Write(r);
- }
- }
- public int GetPageRank(string url)
- {
- if (!url.ToLower().StartsWith("http://"))
- url = "http://" + url;
- url = "info:" + url;
- uint checksum = GetChecksum(url.ToCharArray());
- checksum = GoogleNewCh(checksum);
- string googleUrl = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=6" + checksum
- + "&ie=UTF-8&oe=UTF-8&features=Rank:FVN&q=" + url;
- string pageText = GetResponseText(googleUrl);
- string pageRankString = "0";
- Regex re = new Regex("Rank_.*?:.*?:(?<1>\\d+)\\n", RegexOptions.Singleline | RegexOptions.IgnoreCase);
- Match m = re.Match(pageText);
- if (m.Success) pageRankString = m.Groups[1].ToString();
- int pageRank = int.Parse(pageRankString);
- return pageRank;
- }
- private uint GetChecksum(char[] url)
- {
- uint a = 0x9E3779B9;
- uint b = a;
- uint c = 0xE6359A60;
- int k = 0;
- int len = url.Length;
- while (len >= 12)
- {
- a += ((uint) url[k + 0] + ((uint) url[k + 1] << 8) + ((uint) url[k + 2] << 16) + ((uint) url[k + 3] << 24));
- b += ((uint) url[k + 4] + ((uint) url[k + 5] << 8) + ((uint) url[k + 6] << 16) + ((uint) url[k + 7] << 24));
- c += ((uint) url[k + 8] + ((uint) url[k + 9] << 8) + ((uint) url[k + 10] << 16) + ((uint) url[k + 11] << 24));
- uint[] mix = Mix(a, b, c);
- a = mix[0];
- b = mix[1];
- c = mix[2];
- k += 12;
- len -= 12;
- }
- c += (uint)url.Length;
- switch (len)
- {
- case 11: c += ((uint) url[k + 10] << 24); goto case 10;
- case 10: c += ((uint) url[k + 9] << 16); goto case 9;
- case 9: c += ((uint) url[k + 8] << 8); goto case 8;
- case 8: b += ((uint) url[k + 7] << 24); goto case 7;
- case 7: b += ((uint) url[k + 6] << 16); goto case 6;
- case 6: b += ((uint) url[k + 5] << 8); goto case 5;
- case 5: b += ((uint) url[k + 4]); goto case 4;
- case 4: a += ((uint) url[k + 3] << 24); goto case 3;
- case 3: a += ((uint) url[k + 2] << 16); goto case 2;
- case 2: a += ((uint) url[k + 1] << 8); goto case 1;
- case 1: a += ((uint) url[k + 0]); break;
- }
- uint[] mixx = Mix(a, b, c);
- return (uint) mixx[2];
- }
- private char[] c32to8bit(uint[] arr32)
- {
- char[] arr8 = new char[4 * arr32.Length];
- for (int i=0; i<arr32.Length; i++)
- {
- for (int bitOrder=i*4; bitOrder<=i*4+3; bitOrder++)
- {
- arr8[bitOrder] = (char)(arr32[i] & 255);
- arr32[i] = ZeroFill(arr32[i], 8);
- }
- }
- return arr8;
- }
- private uint myfmod(uint x, int y)
- {
- double d = x / 7;
- int i = (int)System.Math.Floor(d);
- return (uint)(x - i * y);
- }
- private uint GoogleNewCh(uint ch)
- {
- ch = (((ch/7) << 2) | ((myfmod(ch, 13))&7));
- uint[] prbuf = new uint[20];
- prbuf[0] = ch;
- for(int i = 1; i < 20; i++)
- {
- prbuf[i] = prbuf[i-1]-9;
- }
- ch = GetChecksum(c32to8bit(prbuf));
- return ch;
- }
- private uint[] Mix(uint a, uint b, uint c)
- {
- a -= b; a -= c; a = a ^ (ZeroFill(c, 13));
- b -= c; b -= a; b ^= a << 8;
- c -= a; c -= b; c = c ^ (ZeroFill(b, 13));
- a -= b; a -= c; a = a ^ (ZeroFill(c, 12));
- b -= c; b -= a; b ^= a << 16;
- c -= a; c -= b; c = c ^ (ZeroFill(b, 5));
- a -= b; a -= c; a = a ^ (ZeroFill(c, 3));
- b -= c; b -= a; b ^= a << 10;
- c -= a; c -= b; c = c ^ (ZeroFill(b, 15));
- uint[] arr = new uint[3];
- arr[0] = a;
- arr[1] = b;
- arr[2] = c;
- return arr;
- }
- private uint ZeroFill(uint a, int b)
- {
- uint z = 0x80000000;
- if ((z & a) > 0)
- {
- a = a >> 1;
- a = a & (~z);
- a = a | 0x40000000;
- a = a >> (b - 1);
- }
- else
- a = a >> b;
- return a;
- }
- private string GetResponseText(string url)
- {
- string pageText = "";
- HttpWebRequest request = null;
- WebResponse response = null;
- System.IO.Stream stream = null;
- System.IO.StreamReader reader = null;
- try
- {
- request = (HttpWebRequest) WebRequest.Create(url);
- request.UserAgent = "Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)";
- request.Timeout = 4 * 1000;
- response = request.GetResponse();
- stream = response.GetResponseStream();
- reader = new System.IO.StreamReader(
- stream, System.Text.Encoding.GetEncoding(1251));
- pageText = reader.ReadToEnd();
- }
- catch (WebException)
- {
- }
- finally
- {
- if (response != null) response.Close();
- if (stream != null) stream.Close();
- if (reader != null) reader.Close();
- }
- return pageText;
- }
- }
- 来源URL:http://blog.zenme.org/?action=show&id=133
发表评论:
给我留言