Новый алгоритм получения Google PageRank
Буквально на днях Google поменял алгоритм, по которому генерировалась ссылка для получения показателей Google PageRank. В результате этого отвалились многие сервисы, вспомогательные программы, сторонние тулбары, счетчики и еще бессчетное количество сеошного барахла. Мне было бы глубоко фиолетово на их проблемы, но у меня на сайте тоже используется система автоматического съема значений Google PR. Поэтому пришлось быстренько адаптироваться к новым условиям. Я установил себе гугловский тулбар, быстренько выпотрошил его и получил алгоритм генерации ссылки для получения Google PageRank. Вот как он выглядит на JavaScript:Code (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>
Code (JavaScript) : Убрать нумерацию
- <script type="text/javascript">
- // Пример использования
- st='http://www.manhunter.ru/'
- alert(getPageRankLink(st));
- </script>
Например, вот моя реализация на Ассемблере. В секции данных предварительно подготовим следующие данные:
Code (Assembler) : Убрать нумерацию
- 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
Code (Assembler) : Убрать нумерацию
- ; Записать первую часть ссылки
- 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
Просмотров: 7183 | Комментариев: 12
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Gleb
(30.10.2013 в 18:12):
Скажите пожалуйста, а если мне нужно проверить сайт на разных датацентрах и у меня есть их айпишники, то куда необходимо вставить адрес датацентра?
Я вставлял сюда вместо "toolbarqueries.google.ru" но, к сожалению не работает.
Я вставлял сюда вместо "toolbarqueries.google.ru" но, к сожалению не работает.
ManHunter
(22.10.2013 в 17:27):
Никак не называется. Гугловская самоделка.
Gleb
(22.10.2013 в 17:26):
Отлично, JS работает.
Мне бы на С# реализацию...
Как называется использованный алгоритм кодирования?
Мне бы на С# реализацию...
Как называется использованный алгоритм кодирования?
Jon
(20.10.2011 в 18:22):
Шикарно, респект.
ManHunter
(17.10.2011 в 16:40):
Jon, выложил решение на Ассемблере.
ManHunter
(17.10.2011 в 14:43):
deadlink, ты прежде чем тут подобную хуйню постить, проверил бы на каком-нибудь примере. И не просто проверил, а сравнил бы с результатами работы скрипта на JS, попробовал бы получить данные с гугла и т.д.
deadlink
(17.10.2011 в 14:39):
<?php
//by deadlink
/* --- весь бред на PHP вырезан --- */
?>
//by deadlink
/* --- весь бред на PHP вырезан --- */
?>
Jon
(15.10.2011 в 00:29):
Буду очень признателен за сорцы на асме ;)
DROOPY
(14.10.2011 в 15:38):
Реализация на TCL ;)
set HASH_SEED "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Yes, I'm talking to you, scammer."
proc awesomeHash a {
global HASH_SEED
set b 16909125
for {set c 0} {$c < [string length $a]} {incr c} {
set b [expr $b ^ [scan [string index $HASH_SEED [expr $c % [string length $HASH_SEED]]] %c] ^ [scan [string index $a $c] %c]]
set b [expr ($b >> 23 | $b << 9) % 4294967296]
}
return "8[format %08x $b]"
}
set HASH_SEED "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Yes, I'm talking to you, scammer."
proc awesomeHash a {
global HASH_SEED
set b 16909125
for {set c 0} {$c < [string length $a]} {incr c} {
set b [expr $b ^ [scan [string index $HASH_SEED [expr $c % [string length $HASH_SEED]]] %c] ^ [scan [string index $a $c] %c]]
set b [expr ($b >> 23 | $b << 9) % 4294967296]
}
return "8[format %08x $b]"
}
ManHunter
(10.10.2011 в 16:20):
Такие вещи стоят денег, с учетом того, сколько инструментария буквально в один день стало бесполезным. Решение на Ассемблере могу выложить бесплатно :)
semenov
(10.10.2011 в 16:19):
Было бы неплохо реализацию на PHP увидеть
Добавить комментарий
Заполните форму для добавления комментария
http://msurf.ru/tools/prbydcgoogle/
Видимо надо проверять не по ip, а по доменам с максимальным разбросом.
toolbarqueries.google.com.br -> 74.125.143.103
toolbarqueries.google.com.ar -> 74.125.143.147
toolbarqueries.google.com -> 173.194.71.105
toolbarqueries.google.ua -> 173.194.71.99
toolbarqueries.google.gl -> 74.125.143.99
toolbarqueries.google.com.fj -> 74.125.143.105
toolbarqueries.google.mg -> 74.125.143.103
и так далее