Расчет Google PR на Python

Автор: admin. 18 Сен 2009 в 0:59

Долго искал процедуру получаения PR у сайта. Нашел на ресурсе почившем, а именно в вебархиве. Итак - процесс получения PR состоит из 2 этапов - нужно подсчитать хэш код URL и дерзуть гугловский запрос:

Код вычисляющий хеш:


#!/usr/bin/env python

"""
Google Toolbar 3.0.x/4.0.x Pagerank Checksum Algorithm

Author's webpage:
http://pagerank.gamesaga.net/
"""

def IntStr(String, Integer, Factor):
for i in range(len(String)) :
Integer *= Factor
Integer &= 0xFFFFFFFF
Integer += ord(String[i])
return Integer

def HashURL(Str):
C1 = IntStr(Str, 0×1505, 0×21)
C2 = IntStr(Str, 0, 0×1003F)

C1 >>= 2
C1 = ((C1 >> 4) & 0×3FFFFC0) | (C1 & 0×3F)
C1 = ((C1 >> 4) & 0×3FFC00) | (C1 & 0×3FF)
C1 = ((C1 >> 4) & 0×3C000) | (C1 & 0×3FFF)

T1 = (C1 & 0×3C0) << 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 CheckHash(HashInt):
HashStr = "%u" % (HashInt)
Flag = 0
CheckByte = 0

i = len(HashStr) - 1
while i >= 0:
Byte = int(HashStr[i])
if 1 == (Flag % 2):
Byte *= 2;
Byte = Byte / 10 + Byte % 10
CheckByte += Byte
Flag += 1
i -= 1

CheckByte %= 10
if 0 != CheckByte:
CheckByte = 10 - CheckByte
if 1 == Flag % 2:
if 1 == CheckByte % 2:
CheckByte += 9
CheckByte >>= 1

return ‘7′ + str(CheckByte) + HashStr

if __name__ == ‘__main__’:
import sys

if len(sys.argv) < 2:
print 'No URL specified.'
sys.exit()

print CheckHash(HashURL(sys.argv[1]));

Запрос к google:

function GooglePagerank($url) {
$fp = fsockopen("toolbarqueries.google.com", 80, $errno, $errstr, 30);
if (!$fp) {
return 'Service not available';
} else {
$out = "GET /search?client=navclient-auto&ch=".Checkhash(hashURL($url))."&features=Rank&q=info:".$url."&num=100&filter=0 HTTP/1.1\r\n";
print($out."\n");
$out .= "Host: toolbarqueries.google.com\r\n";
$out .= "User-Agent: Mozilla/4.0 (compatible; googleToolbar 2.0.114-big; Windows XP 5.1)\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);

$data = '';
while (!feof($fp)) {
$data .= fgets($fp, 128);
}
fclose($fp);

$pos1 = strrpos($data, ':');
if ($pos1 !== false) {
if (($pos2 = strpos($data, ' ', $pos1))===false) { $pos2 = 2; }
$pagerank = trim(substr($data, $pos1+1, $pos2));
return $pagerank;
}
}

return 'unranked';
}

Тоесть перый хеш считает, второй запрос делает к google. Код женить не стал, мне на будущее нада будет - щас не до этого.

Популярность: 51%

Рубрики: Программирование


Отзывов пока нет.

Ваш отзыв