Новый алгоритм получения Google PageRank

Буквально на днях Google поменял алгоритм, по которому генерировалась ссылка для получения показателей Google PageRank. В результате этого отвалились многие сервисы, вспомогательные программы, сторонние тулбары, счетчики и еще бессчетное количество сеошного барахла. Мне было бы глубоко фиолетово на их проблемы, но у меня на сайте тоже используется система автоматического съема значений Google PR. Поэтому пришлось быстренько адаптироваться к новым условиям. Я установил себе гугловский тулбар, быстренько выпотрошил его и получил алгоритм генерации ссылки для получения Google PageRank. Вот как он выглядит на JavaScript:
<script type="text/javascript">
 
// Программисты Google явно с юмором :)
var HASH_SEED = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. "+
                 "Yes, I'm talking to you, scammer.";
 
// Расчет хэша строки запроса
awesomeHash = function(a) {
    var b = 16909125;
    for (c = 0; c < a.length; c++) {
        b ^= HASH_SEED.charCodeAt(c % HASH_SEED.length) ^ a.charCodeAt(c);
        b = b >>> 23 | b << 9;
    }    
    return '8'+hexEncodeU32(b);
};
 
// Перевод числа в HEX-значение
hexEncodeU32 = function(a) {
    var b = toHex8(a >>> 24);
    b += toHex8(a >>> 16 & 255);
    b += toHex8(a >>> 8 & 255);
    return b + toHex8(a & 255)
};
toHex8 = function(a) {
    return (a < 16 ? "0": "") + a.toString(16)
};
 
// Функция получения ссылки для запроса Google PR
getPageRankLink = function(a) {
    return 'http://toolbarqueries.google.ru/tbr?features=Rank'+
           '&client=navclient-auto-ff&ch='+awesomeHash(a)+'&q=info:'+
           encodeURIComponent(a);
}
</script>

Функция вызывается следующим образом. На входе подается ссылка на страницу, для которой требуется рассчитать Google PageRank, на выходе получаем ссылку, по которой можно узнать результат.
<script type="text/javascript">
 
// Пример использования
st='http://www.manhunter.ru/'
alert(getPageRankLink(st));
 
</script>

Результат запроса к гугловскому серверу возвращается в виде строки, например, "Rank_1:1:2". Последняя цифра и есть искомое значение рейтинга страницы. Алгоритм можно без особого труда перевести на другие языки программирования.

Например, вот моя реализация на Ассемблере. В секции данных предварительно подготовим следующие данные:
section '.data' data readable writeable
 
buff1   rb 500h         ; Буфер для исходной ссылки
buff2   rb 500h         ; Буфер для готовой ссылки
buff3   rb 100h         ; Хэш
 
mask    db '%.8X',0
 
p1      db 'http://toolbarqueries.google.ru/tbr?features='
        db 'Rank&client=navclient-auto-ff&ch=8',0
p2      db '&q=info:',0
 
HASH    db "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. "
        db "Yes, I'm talking to you, scammer."
h_len   = $-HASH

А вот так вычисляется хэш и составляется ссылка. Код прокомментирован, остальное можно наглядно посмотреть в варианте JavaScript. Подразумевается, что в buff1 уже содержится исходная ссылка.
        ; Записать первую часть ссылки
        invoke  lstrcpy,buff2,p1
 
        ; Инициализация хэша
        mov     ebx,1020345h
        xor     ecx,ecx
 
        ; Вычисление хэша
.loc_encode:
        mov     al,byte [buff1+ecx]
        or      al,al
        jz      .loc_end_encode
 
        xor     bl,al
 
        push    ecx
        xor     edx,edx
        mov     eax,h_len
        xchg    eax,ecx
        div     ecx
        mov     al,byte [HASH+edx]
        xor     bl,al
        pop     ecx
 
        mov     eax,ebx
        shr     ebx,23
        shl     eax,9
        or      ebx,eax
 
        inc     ecx
        jmp     .loc_encode
 
.loc_end_encode:
 
        ; Добавить в ссылку строку хэша
        invoke  wsprintf,buff3,mask,ebx
        add     esp,12
        invoke  lstrcat,buff2,buff3
 
        ; Добавить вторую часть ссылки
        invoke  lstrcat,buff2,p2
        mov     edi,buff2
        invoke  lstrlen,buff2
        add     edi,eax
        mov     esi,buff1
 
        ; URL-encoded ссылка
.loc_scan:
        lodsb
        or      al,al
        jz      .loc_end
 
        cmp     al,':'
        jne     @f
 
        mov     eax,'%3A'
        stosd
        dec     edi
        jmp     .loc_scan
@@:
        cmp     al,'/'
        jne     @f
 
        mov     eax,'%2F'
        stosd
        dec     edi
        jmp     .loc_scan
@@:
        cmp     al,'?'
        jne     @f
 
        mov     eax,'%3F'
        stosd
        dec     edi
        jmp     .loc_scan
@@:
        cmp     al,'&'
        jne     @f
 
        mov     eax,'%26'
        stosd
        dec     edi
        jmp     .loc_scan
@@:
        stosb
        jmp     .loc_scan
 
.loc_end:
        xor     eax,eax
        stosb
        ; В buff2 теперь находится ссылка для получения PR

В приложении готовый пример программы на Ассемблере, получающий из исходной ссылки новую ссылку для определения Google PageRank.
Теги:
алгоритм, PageRank, Google
Добавлено: 17 Сентября 2013 07:44:05 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...