Reading:Python et Google PageRank

Python et Google PageRank

pythonSuite à mes recherches pour trouver un script de calcul de Pagerank en python, je souhaitais vous présenter deux pages qui me sont tombées sous les yeux.

Script de vérification de Pagerank en Python :

Ce script permet d’aller chercher la valeur de Pagerank Google d’un site donné en argument. Cela sert pour toutes sortes de choses dans le monde du SEO. La page en question est là :

http://blogmag.net/blog/read/91/Python_code_to_check_your_Google_PageRank

Testé aujourd’hui (1er Juillet 2009), le script fonctionne parfaitement bien. Ceux que j’ai pu trouver en php ne marchaient pas ( google me considère comme un pirate vous savez). Si vous en possédez en PHP, je suis preneur

Script de calcul de PageRank ( Google-like)

La page suivante se base sur un article publié à l’AMS, mais dont le principe ne décrit pas exactement le fonctionnement de Google.

Le script écrit en python tente de reproduire le fonctionnement d’un algorithme de Pagerank. Je ne l’ai pas testé, mais ça peut interesser du monde :

http://www.eioba.com/a69792/the_google_pagerank_algorithm_in_126_lines_of_python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# (C) 2008 Fred Cirera
# ported in Python from the Ruby code by Vsevolod S. Balashov
# http://snippets.dzone.com/posts/show/3284

import urllib2
import re
import time
import sys

from urllib import urlencode
from pprint import pprint

HOST = "toolbarqueries.google.com"

def mix(a, b, c):
    M = lambda v: v % x100000000 # int32 modulo
    a, b, c = (M(a), M(b), M(c))

    a = M(a-b-c) ^ (c >> 13)
    b = M(b-c-a) ^ (a <<  8)
    c = M(c-a-b) ^ (b >> 13)

    a = M(a-b-c) ^ (c >> 12)
    b = M(b-c-a) ^ (a << 16)
    c = M(c-a-b) ^ (b >> 5)

    a = M(a-b-c) ^ (c >>  3)
    b = M(b-c-a) ^ (a << 10)
    c = M(c-a-b) ^ (b >> 15)

    return a, b, c

def checksum(iurl):
    C2I = lambda s: sum(c << 8*i for i, c in enumerate(s[:4]))
    a, b, c = x9e3779b9, x9e3779b9, xe6359a60
    lg  = len(iurl)
    k = 
    while k <= lg-12:
        a = a + C2I(iurl[k:k+4])
        b = b + C2I(iurl[k+4:k+8])
        c = c + C2I(iurl[k+8:k+12])
        a, b, c = mix(a, b, c)
        k += 12

    a = a + C2I(iurl[k:k+4])
    b = b + C2I(iurl[k+4:k+8])
    c = c + (C2I(iurl[k+8:])<<8) + lg
    a, b, c = mix(a, b, c)
    return c

def GoogleHash(value):
    I2C = lambda i: [i & xff, i >> 8 & xff,  i >> 16 & xff, i >> 24 & xff]
    ch = checksum([ord(c) for c in value])
    ch = ((ch % x0d) & 7) | ((ch/7) << 2)
    return "6%s" % checksum(sum((I2C(ch-9*i) for i in range(20)), []))

def make_url(host, site_url):
    url = "info:" + site_url
    params = dict(client="navclient-auto", ch="%s" % GoogleHash(url),
                  ie="UTF-8", oe="UTF-8", features="Rank", q=url)
    return "http://%s/search?%s" % (host, urlencode(params))

# Where the fun begins

if __name__ == "__main__":
    if len(sys.argv) != 2:
        url = 'http://www.google.com/'
    else:
        url = sys.argv[1]

    if not url.startswith('http://'):
        url = 'http://%s' % url

    # print make_url(HOST, url)
    req = urllib2.Request(make_url(HOST, url))
    try:
        f = urllib2.urlopen(req)
        response = f.readline()
    except Exception, err:
        print err
        # print err.read()
        sys.exit(1)

    try:
        rank = re.match(r'^Rank_\d+:\d+:(\d+)', response.strip()).group(1)
    except AttributeError:
        print "This page is not ranked"
        rank = -1

    print "PagerRank: %d\tURL: %s" % (int(rank), url)