Google Page Rank Python Script

This isn’t my script but I thought it would appeal to the reader of this blog.  It’s a script that  will lookup the Google Page Rank for any website and uses the same interface as the Google Toolbar to do it. I’d like to thank Fred Cirera for writing it and you can checkout his blog about this script here.

I’m not exactly sure what I would use this for but it might have applications for anyone who wants to do some really advanced SEO work and find a real way to accomplish Page Rank sculpting. Perhaps finding the best websites to put links on.

The reason it is such an involved bit of math is that it need to compute a checksum in order to work. It should be pretty reliable since it doesn’t involve and scraping.

Example usage:

$ python pagerank.py http://www.google.com/
PageRank: 10	URL: http://www.google.com/
 
$ python pagerank.py http://www.mozilla.org/
PageRank: 9	URL: http://www.mozilla.org/
 
$ python pagerank.py http://halotis.com
PageRange: 3   URL: http://www.halotis.com/

And the script:

#!/usr/bin/env python
#
#  Script for getting Google Page Rank of page
#  Google Toolbar 3.0.x/4.0.x Pagerank Checksum Algorithm
#
#  original from http://pagerank.gamesaga.net/
#  this version was adapted from http://www.djangosnippets.org/snippets/221/
#  by Corey Goldberg - 2010
#
#  Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
 
 
 
import urllib
 
 
def get_pagerank(url):
    hsh = check_hash(hash_url(url))
    gurl = 'http://www.google.com/search?client=navclient-auto&features=Rank:&q=info:%s&ch=%s' % (urllib.quote(url), hsh)
    try:
        f = urllib.urlopen(gurl)
        rank = f.read().strip()[9:]
    except Exception:
        rank = 'N/A'
    if rank == '':
        rank = '0'
    return rank
 
 
def  int_str(string, integer, factor):
    for i in range(len(string)) :
        integer *= factor
        integer &= 0xFFFFFFFF
        integer += ord(string[i])
    return integer
 
 
def hash_url(string):
    c1 = int_str(string, 0x1505, 0x21)
    c2 = int_str(string, 0, 0x1003F)
 
    c1 >>= 2
    c1 = ((c1 >> 4) & 0x3FFFFC0) | (c1 & 0x3F)
    c1 = ((c1 >> 4) & 0x3FFC00) | (c1 & 0x3FF)
    c1 = ((c1 >> 4) & 0x3C000) | (c1 & 0x3FFF)
 
    t1 = (c1 & 0x3C0) < < 4
    t1 |= c1 & 0x3C
    t1 = (t1 << 2) | (c2 & 0xF0F)
 
    t2 = (c1 & 0xFFFFC000) << 4
    t2 |= c1 & 0x3C00
    t2 = (t2 << 0xA) | (c2 & 0xF0F0000)
 
    return (t1 | t2)
 
 
def check_hash(hash_int):
    hash_str = '%u' % (hash_int)
    flag = 0
    check_byte = 0
 
    i = len(hash_str) - 1
    while i >= 0:
        byte = int(hash_str[i])
        if 1 == (flag % 2):
            byte *= 2;
            byte = byte / 10 + byte % 10
        check_byte += byte
        flag += 1
        i -= 1
 
    check_byte %= 10
    if 0 != check_byte:
        check_byte = 10 - check_byte
        if 1 == flag % 2:
            if 1 == check_byte % 2:
                check_byte += 9
            check_byte >>= 1
 
    return '7' + str(check_byte) + hash_str
 
 
 
if __name__ == '__main__':
    if len(sys.argv) != 2:
        url = 'http://www.google.com/'
    else:
        url = sys.argv[1]
 
    print get_pagerank(url)

Technorati Tags: , , ,

  • http://www.straw-dogs.co.uk Doug

    Seems to have stopped working.

  • http://www.mattwarren.name Matt Warren

    Thanks for letting me know. I’ll look into it.

  • Ssnodgra

    Any luck sorting out why it stopped working?

  • http://www.mattwarren.name Matt Warren

    Unfortunately it doesn’t seem to be fixable. :(

    Previous versions of the Google toolbar had a simple way to get the data. But since they introduced the SideWiki they changed how the toolbar works. The new API seems to return binary data (possibly encrypted) Cracking this new scheme is not going to be easy.

  • iker

    Hi, I have tested the Page Rank IURL with my personal webpage (sniffed with whireshark):

    http://toolbarqueries.google.es/search?features=Rank&sourceid=navclient-ff&client=navclient-auto-ff&googleip=O;208.117.235.17;97&iqrn=8VdB&querytime=4P&orig=0X557&swwk=-1&ch=84f831859&q=info:http%3A%2F%2Fwww.ikeralbeniz.net%2F

    adding this headers to de http petition..

    Client.Headers.Add(“User-Agent”, “Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 GTBDFff GTB7.0 GoogleToolbarFF 7.0.20091216″);
    Client.Headers.Add(“Accept”, “text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8″);
    Client.Headers.Add(“Accept-Language”, “es-es,es;q=0.8,en-us;q=0.5,en;q=0.3″);
    Client.Headers.Add(“Accept-Encoding”, “gzip,deflate”);
    Client.Headers.Add(“Accept-Charset”, “ISO-8859-1,utf-8;q=0.7,*;q=0.7″);
    Client.Headers.Add(“Keep-Alive”, “300″);

    and works ok… i get Rank_1:1:0 (je je je)

    what i have not found is the way to get the google hash.. in my case:

    84f831859 < http://www.ikeralbeniz.net/

    but if i use your function the hash is:
    620570008487

    have you got any idea about the way google calculates the hash?

  • Pingback: PageRank API | To Be Continued

  • Pingback: 获取Google PageRank的PHP程序 | freemouse-笔记-感悟-成长

  • http://msn.com Reed

    Does this code work?

  • http://www.mattwarren.name Matt Warren

    probably not. it was relying on a private, undocumented API from google, and they seem to like changing things fairly often.

  • http://www.seoinspection.com google traffic

    I changed the url and it worked a few days ago, but now it doesn’t.

    gurl = ‘http://toolbarqueries.google.com/tbr?client=navclient-auto&features=Rank&ch=%s&q=info:%s’ % (hsh,urllib.quote(url))

    Although now that I am looking more closely, it looks like the hash isn’t returning a valid value.

  • http://www.ommrudraksha.com rudraksha

    It rocks. Very good work.

  • http://wideowtopa.pl Bobek

    Any ideas how to turn this to work after google changes ?

  • http://avi-player.net dahax

    you should use another url:

    gurl = “http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=” + hsh + “&features=Rank&q=info:” +url+”&num=100&filter=0″;

  • MZB

    Thanks – that fixed it for me.

  • Pingback: promo indonesia

  • http://twitter.com/_weyheyniallj/status/356130265892003841 donoghue

    I beloved up to you’ll receive carried out proper here. The caricature is attractive, your authored material stylish. nonetheless, you command get bought an edginess over that you would like be delivering the following. in poor health certainly come more formerly once more since precisely the same just about a lot frequently inside of case you shield this increase.

  • Pingback: Getting Google PageRank via an API (PHP) [closed] - PHP Solution - Developers Q & A