lib/seo_info/google.rb in seo_info-0.0.1 vs lib/seo_info/google.rb in seo_info-0.0.2

- old
+ new

@@ -1,5 +1,7 @@ +require 'cgi' + module SeoInfo class Google attr_accessor :site_url attr_reader :results @@ -8,16 +10,70 @@ @results = {} end def indexed_pages results[:indexed_pages] ||= begin - page = Nokogiri::HTML(get_page) + page = Nokogiri::HTML(indexed_pages_page) page.xpath('//div[@id="subform_ctrl"]/div/b/text()')[2].text.gsub(/[^\d]/,'').to_i end end + def page_rank + page_rank_page.split(':').last.to_i rescue nil + end + private - def get_page + def indexed_pages_page open("https://www.google.com/search?hl=en&safe=off&q=site%3A#{site_url}&btnG=Search").read + end + + def page_rank_page + open("http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=#{checksum(site_url)}&ie=UTF-8&oe=UTF-8&features=Rank&q=info:#{CGI::escape(site_url)}").read + end + + def checksum(str) + check1 = str_to_num(str, 0x1505, 0x21) + check2 = str_to_num(str, 0, 0x1003F) + check1 >>= 2 + check1 = ((check1 >> 4) & 0x3FFFFC0) | (check1 & 0x3F) + check1 = ((check1 >> 4) & 0x3FFC00) | (check1 & 0x3FF) + check1 = ((check1 >> 4) & 0x3C000) | (check1 & 0x3FFF) + t1 = ((((check1 & 0x3C0) << 4) | (check1 & 0x3C)) << 2) | (check2 & 0xF0F) + t2 = ((((check1 & 0xFFFFC000) << 4) | (check1 & 0x3C00)) << 0xA) | (check2 & 0xF0F0000) + hash = (t1 | t2) + check_byte = 0 + flag = 0 + hash_str = sprintf('%u', hash) + (hash_str.size - 1).downto(0) do |i| + re = hash_str[i..i].to_i + if (1 == (flag % 2)) + re += re + re = (re / 10).to_i + (re % 10) + end + check_byte += re + flag += 1 + end + check_byte %= 10 + if (0 != check_byte) + check_byte = 10 - check_byte + if (1 == (flag % 2)) + check_byte += 9 if (1 == (check_byte % 2)) + check_byte >>= 1 + end + end + return '7' + check_byte.to_s + hash_str; + end + + def str_to_num(str, check, magic) + int32 = 4294967296 # 2^32 + str.each_byte do |char| + check *= magic + if check >= int32 + check = (check - int32 * (check / int32).to_i) + check = (check < -2147483648) ? check + int32 : check + end + check += char + end + return check end end end \ No newline at end of file