sharma I
Joined: 13 Jun 2008 Posts: 130
|
Posted: Sat May 22, 2010 7:26 am Post subject: How to find google page rank using rails |
|
|
Hi Friends,
Recently I have worked with social networking web application. In that, I need to implement calculate the google page rank for the given website.
For this, I took a new .rb file and placed in lib folder of my rails application.
lib/google_rank.rb
module RANK
class GooglePR
def initialize(uri)
@uri = uri
end
M=0x100000000 # modulo for unsigned int 32bit(4byte)
def m1(a,b,c,d)
(((a+(M-b)+(M-c))%M)^(d%M))%M # mix/power mod
end
def i2c(i)
[i&0xff, i>>8&0xff, i>>16&0xff, i>>24&0xff]
end
def c2i(s,k=0) ((s[k+3].to_i*0x100+s[k+2].to_i)*0x100+s[k+1].to_i)*0x100+s[k].to_i
end
def mix(a,b,c)
a = a%M; b = b%M; c = c%M
a = m1(a,b,c, c >> 13); b = m1(b,c,a, a << 8 ); c = m1(c,a,b, b >> 13)
a = m1(a,b,c, c >> 12); b = m1(b,c,a, a <<16); c = m1(c,a,b, b >> 5)
a = m1(a,b,c, c >> 3); b = m1(b,c,a, a <<10); c = m1(c,a,b, b >> 15)
[a, b, c]
end
def old_cn(iurl = 'info:' + @uri)
a = 0x9E3779B9; b = 0x9E3779B9; c = 0xE6359A60
len = iurl.size
k = 0
while (len >= k + 12) do
a += c2i(iurl,k); b += c2i(iurl,k+4); c += c2i(iurl,k+8 )
a, b, c = mix(a, b, c)
k = k + 12
end
a += c2i(iurl,k); b += c2i(iurl,k+4); c += (c2i(iurl,k+8 ) << 8 ) + len
a,b,c = mix(a,b,c)
return c
end
def cn
ch = old_cn
ch = ((ch/7) << 2) | ((ch-(ch/13).floor*13)&7)
new_url = []
20.times { i2c(ch).each { |i| new_url << i }; ch -= 9 }
('6' + old_cn(new_url).to_s).to_i
end
def request_uri
"http://toolbarqueries.google.com/search?client=navclient-auto&hl=en&ch=#{cn}&ie=UTF-8&oe=UTF-8&features=Rank&q=info:#{URI.escape(@uri, /[^-.!~*'()a-zA-Z\d]/)}"
end
def page_rank(uri = @uri)
@uri = uri if uri != @uri
open(request_uri) { |f| return $1.to_i if f.string =~ /Rank_1:\d : (\d+)/ }
nil
end
private :m1, :i2c, :c2i, :mix, :old_cn
attr_accessor :uri
end
end
After this, I include this module in my controller like this....
class ArticleController < ApplicationController
include FINDPAGERANK
def find_pagerank
rank = RANK::GooglePR.new("http://www.facebook.com").page_rank
render :text => rank and return
end
end
Thank you,
Sharma |
|