手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜Qcloud , 注册 | 登陆

getPageRank for golang

首页 > Go >

 不多说了。其实这是一个复刻版,原来的PHP代码就在注释里面。在google play上面已经存了代码了。如果你觉得我这里的代码看起来不方便,可以移步play.golang.org。

XML/HTML代码
  1. package main  
  2.   
  3. import (  
  4.     "fmt"  
  5.     "io/ioutil"  
  6.     "net/http"  
  7.     "net/url"  
  8.     "strings"  
  9.     "unicode/utf8"  
  10. )  
  11.   
  12. /**  
  13. //https://github.com/phurix/pagerank/blob/master/pagerank2.php  
  14. function GetPageRank($q,$host='toolbarqueries.google.com',$context=NULL) {  
  15.     $seed = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Yes, I'm talking to you, scammer.";  
  16.     $result = 0x01020345;  
  17.     $len = strlen($q);  
  18.     for ($i=0; $i<$len; $i++) {  
  19.         $result ^= ord($seed{$i%strlen($seed)}) ^ ord($q{$i});  
  20.         $result = (($result >> 23) & 0x1ff) | $result << 9;  
  21.     }  
  22.     if (PHP_INT_MAX != 2147483647) { $result = -(~($result & 0xFFFFFFFF) + 1); }  
  23.     $ch=sprintf('8%x', $result);  
  24.     $url='http://%s/tbr?client=navclient-auto&ch=%s&features=Rank&q=info:%s';  
  25.     $url=sprintf($url,$host,$ch,$q);  
  26.     @$pr=file_get_contents($url,false,$context);  
  27.     return $pr?substr(strrchr($pr, ':'), 1):false;  
  28. }  
  29. */  
  30.   
  31. func main() {  
  32.     fmt.Println(getPageRank("http://neaststudio.com"))  
  33. }  
  34.   
  35. func getPageRank(urlstring string) string {  
  36.     seed := []byte("Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Yes, I'm talking to you, scammer.")  
  37.     seedlen :len(seed)  
  38.     result :0x01020345  
  39.     q := []byte(urlstring)  
  40.     qlen :len(q)  
  41.     for i :0; i < qlen; i++ {  
  42.         seedmod :i % seedlen  
  43.         seed_ascii, _ :utf8.DecodeLastRuneInString(string(seed[seedmod]))  
  44.         q_ascii, _ :utf8.DecodeLastRuneInString(string(q[i]))  
  45.         result ^= int(seed_ascii ^ q_ascii)  
  46.         result = ((result >> 23) & 0x1ff) | result<<9  
  47.     }  
  48.     result = -(^(result & 0xffffffff) + 1)  
  49.     ch :fmt.Sprintf("8%x", result)  
  50.     u, _ :url.Parse("http://toolbarqueries.google.com/tbr")  
  51.     uq :u.Query()  
  52.     uq.Set("client", "navclient-auto")  
  53.     uq.Set("ch", ch)  
  54.     uq.Set("features", "Rank")  
  55.     uq.Set("q", "info:"+string(q))  
  56.     u.RawQuery = uq.Encode()  
  57.     resp, err :http.Get(u.String())  
  58.     if nil != err {  
  59.         return err.Error()  
  60.     }  
  61.     defer resp.Body.Close()  
  62.     body, err :ioutil.ReadAll(resp.Body)  
  63.     if nil != err {  
  64.         return err.Error()  
  65.     }  
  66.     //pagerank只有一位,所以可以直接取最后一位。。。免去正则  
  67.     if len(body) <= 0 {  
  68.         return "error"  
  69.     }  
  70.     pagerankbody :strings.TrimSpace(string(body[:]))  
  71.     return pagerankbody[len(pagerankbody)-1:]  
  72. }  

play.golang的地址是:http://play.golang.org/p/uACC-1rdF3

不过,在网页上执行会报错的,说是没有权限。。本地测试成功

 




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: pagerank

« 上一篇 | 下一篇 »

只显示10条记录相关文章

关于PR的好消息 (浏览: 10833, 评论: 0)

发表评论

评论内容 (必填):