Get Google PageRank From Shell
December 23rd, 2006
Domain name in, Google PageRank (toolbar value) out. Examples of usage:
[~]$ pr rubyonrails.com 8 [~]$ pr del.icio.us 8 [~]$ pr http://script.aculo.us 7 [~]$ pr dairon.net 4 [~]$ pr apple.com 10
Here is a Ruby code:
1 #!/usr/bin/env ruby -w 2 3 # Google PageRank 4 # K.Kodama 2004-09-01 5 # Original: http://blog.outer-court.com/archive/2004_06_27_index.html#108834386239051706 6 # modified by dairon 7 8 9 10 11 M = 0x100000000 # modulo for unsigned int 32bit(4byte) 12 13 # mix/power mod 14 return (((a+(M-b)+(M-c))%M)^(d%M))%M 15 end 16 17 # char codes to int. Little Endian 18 return ((s[k+3].to_i*0x100+s[k+2].to_i)*0x100+s[k+1].to_i)*0x100+s[k].to_i 19 end 20 21 22 a = a%M; b = b%M; c = c%M 23 a = m1(a, b, c, c >> 13); b = m1(b, c, a, a << 8); c = m1(c, a, b, b >> 13); 24 a = m1(a, b, c, c >> 12); b = m1(b, c, a, a << 16); c = m1(c, a, b, b >> 5); 25 a = m1(a, b, c, c >> 3); b = m1(b, c, a, a << 10); c = m1(c, a, b, b >> 15); 26 return [a,b,c]; 27 end 28 29 30 a = 0x9E3779B9; b = 0x9E3779B9; c = 0xE6359A60; 31 iurl = "info:"+url; len = iurl.size; k=0; 32 while(len >= k+12) do 33 a += c2i(iurl,k); 34 b += c2i(iurl,k+4); 35 c += c2i(iurl,k+8); 36 a,b,c = mix(a,b,c); 37 k = k+12 38 end 39 a += c2i(iurl,k); 40 b += c2i(iurl,k+4); 41 c += (c2i(iurl,k+8)<<8)+len; 42 a,b,c = mix(a,b,c); 43 return c; 44 end 45 46 # get Google PageRank 47 port = 80 48 ch = check_sum(url); 49 g_path = sprintf("/search?client=navclient-auto&failedip=216.239.51.102;821&ch=6%u&q=info:%s", ch, url); 50 p = "" # rank 51 Net::HTTP::new("toolbarqueries.google.com", port).get(g_path) do |line| 52 pos = line.index("<RK>") # format: <RK>(rank)</RK> 53 if pos != nil 54 p = (line[pos+4,2]).to_i; 55 break; 56 end; 57 end 58 if p.size > 0 59 return p.to_i 60 elsif (url[-1,1] != "/") 61 return get_pr(url+"/"); 62 else return -1; 63 end 64 end 65 66 if ARGV.empty? 67 puts <<-T 68 google pagerank by dairon 69 usage: pr <url> 70 T 71 exit 72 end 73 74 puts get_pr(ARGV[0])
