Consulta tu PageRank de Google con Python
A todos los que os interese el SEO seguramente habréis consultado alguna vez el PageRank de vuestra pagina. La forma mas sencilla de obtenerlo es instalando la ToolBar de Google en vuestro navegador. Pero seguramente si queréis realizar un seguimiento de vuestra pagina a lo largo del tiempo necesitareis automatizar un proceso que consulte el PageRank. La API de acceso al PageRank de google no es abierta, pero googleando un poco (o con Wireshark) es posible obtener el modo de consultar este dato. Parece que Google no le interesa que consultemos este dato, por lo que modifica la API bastante a menudo. En este artículo, te muestro una implementación en Python de un cliente para consultar el PageRank de una pagina, usando la API mas actual.
<br />
#!/usr/bin/env python<br />
# -*- coding: utf-8 -*-<br />
# GPL (C) 2010 Iker Perez de Albeniz<br />
# ported in Python from the Php code by HM2K (http://www.hm2k.com/projects/pagerank)<br />
# http://www.ikeralbeniz.net/2010/03/05/contulta-tu-pagerank-de-google-con-python/</p>
<p>import sys<br />
import urllib</p>
<p>from urllib import urlencode<br />
from pprint import pprint</p>
<p>def strToNum(Str, Check, Magic):<br />
Int32Unit = 4294967296<br />
length = len(Str);<br />
for i in range(0,length):<br />
Check *= Magic;<br />
if (Check >= Int32Unit):<br />
Check = (Check - Int32Unit * int(Check/Int32Unit))<br />
if Check < -2147483648:<br />
Check = Check + Int32Unit</p>
<p> Check += ord(Str[i])<br />
return Check</p>
<p>def hashURL(string):<br />
check1 = strToNum(string, 0x1505, 0x21)<br />
check2 = strToNum(string, 0, 0x1003F)</p>
<p> check1 >>= 2<br />
check1 = ((check1 >> 4) & 0x3FFFFC0 ) | (check1 & 0x3F)<br />
check1 = ((check1 >> 4) & 0x3FFC00 ) | (check1 & 0x3FF)<br />
check1 = ((check1 >> 4) & 0x3C000 ) | (check1 & 0x3FFF)</p>
<p> T1 = ((((check1 & 0x3C0) << 4) | (check1 & 0x3C)) <<2 ) | (check2 & 0xF0F )<br />
T2 = ((((check1 & 0xFFFFC000) << 4) | (check1 & 0x3C00)) << 0xA) | (check2 & 0xF0F0000 )</p>
<p> return (T1 | T2);</p>
<p>def checkHash(hashnum):<br />
checkByte = 0;<br />
flag = 0;</p>
<p> HashStr = '%s' % hashnum<br />
length = len(HashStr)</p>
<p> for i in range(0,length):<br />
Re = int(HashStr[(length - 1)-i])<br />
if (1 == (flag % 2)):<br />
Re += Re<br />
Re = int((Re / 10) + (Re % 10))</p>
<p> checkByte += int(Re)<br />
flag = flag + 1</p>
<p> checkByte %= 10<br />
if (0 != checkByte):<br />
checkByte = 10 - checkByte<br />
if (1 == (flag % 2) ):<br />
if (1 == (checkByte % 2)):<br />
checkByte += 9</p>
<p> checkByte >>= 1<br />
return '7%s%s' %(checkByte,HashStr)</p>
<p>def getCh(url):<br />
return checkHash(hashURL(url))</p>
<p>def main():</p>
<p> response = "Error: No URL defined.\nUsage: googrng.py <url> [[proxyuser:proxypass@]proxyhost:poxyport]"<br />
if len(sys.argv) > 1:<br />
myurl = sys.argv[1]<br />
url = "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=%s&q=info:%s" %(getCh(myurl),urllib.quote_plus(myurl))<br />
if len(sys.argv) > 2:<br />
proxies = {'http': 'http://'+sys.argv[1]}<br />
f = urllib.urlopen(url, proxies=proxies)<br />
else:<br />
f = urllib.urlopen(url)<br />
response = f.read()<br />
f.close()<br />
print response</p>
<p>if __name__ == "__main__":<br />
main()<br />