Модуль для определения google pagerank на delphi. Сам модуль и описание дальше.
Привет! Мне однажды потребовалось определить тИЦ и pagerank в одной программе на delphi. Полез в интернет, посмотрел, как происходит определение. Вот для тИЦ проблем нет – нужно всего лишь подставить адрес нужного сайта в запрос и пропарсить xml результат. С pagerank ситуация другая: google не хочет, чтобы каждый мог определить pr в своей программе
Помимо адреса проверяемого сайта нужно передать контрольную сумму, которую нужно рассчитать. Думаю, это сделано против массовых проверок.
Порывшись в интернете, нашел работающий php-скрипт без копирайта (и 10 неработающих
), перевёл на delphi пересчёт контрольной суммы, добавил немного winsock’а и, вуаля, получился работающий модуль расчёта pagerank для delphi.
В модуле всего две функции:
- function GetPR(host: string; var res: integer): integer;
Всё очень просто, передаём нужный нам адрес сайта и числовую переменную. Функция GetPR возвращает значение google pagerank от 0 до 10. В переменную res записывается ответ сервера, 200 в случае успеха. Если в res 0, значит ошибка загрузки, код можно узнать с помощью WSAGetLastError. Сайт можно писать как с http://, так и без. Впрочем, на правильность этот параметр проверяй сам, так как в случае написания в этот параметр какой-нибудь другой строки, функция вернёт 0, а ответ от сервера будет 403.
Пример использования:program prparsers; uses pagerank, winsock; {$apptype console} var res, pr: integer; begin pr:=GetPR('parsers.info', res); if res=200 then writeln('pr: ', pr) else if res=0 then writeln('socket error #', WSAGetLastError) else writeln('error, HTTP ', res); readln; end. - function GetCheckSum(url: string): string;
Просто возвращает контрольную сумму. Это если хочешь сам составить запрос и парсить ответ.
Модуль для определения pagerank написан на чистом winapi и занимает меньше 3,5Кб. Сокет синхронный, при желании можно использовать в потоке.
Ссылка:
Скачать модуль pagerank.dcu и прилагающиеся файлы
Буду рад, если тебе пригодится, а также благодарен, если упомянешь старину Димаса ![]()
(c) crystalbit, http://parsers.info
И да, буду рад обменяться постовыми с незаброшенными блогами по программированию
Как я понимаю, модуль для Delphi 7? А я всё для 2010 хочу найти))
Или хотя бы работающий алгоритм подсчета контрольной суммы
Нашел какой-то алгоритм, но почему-то он считает контрольную сумму далеко не для всех доменов верно(
Подскажи, где бы добыть этот работающий скрипт
Написан на delphi 7, почему бы ему не работать и на 2010?
Мне всегда казалось, что совместимо, разве не работает? Попробуешь?
Попробовал) dcu – это же компилированный pas. А если он скомпилирован в семерке, то в десятке не идет, говорит, что не может скомпилировать(
Кстати, когда только начинал вести блог, пробовал написать такой вот модуль для Delphi 2010. И, что самое нехорошее и непонятное – под 7-кой всё работеат, причем как с вариантом как у тебя так и через простой TWebBrowser при помощи JavaScript, а на 2010 – вупор отказался правильно определять PR для сайтов с PR ниже 5-ки. Так я и забил на этот модуль, не дописав аго до конца
Контрольную сумму у меня вроде и на 2010 правильно считает, а вот winsock функция getaddrinfo у Zdez Bil Ya (d2010 + vista) возвращает всегда host not found. Надеюсь, разберёмся
Мб для 2010 перепишу под gethostbyname, хоть msdn его и не рекомендует
А каким алгоритмом хэш и чексум считаете?
Каким-то
С php перевёл, потом всё выложу
Привет)
Даже скомпилированный код довольно читабелен
Zdez Bil Ya, в принципе можно любым снифером хттп посмотреть урл запроса к гуглу
Собственно, как и к другим сервисам
crystalbit, надеюсь не спалил тему
Thank you.
Привет! Там только константы, в принципе, читабельны
Запрос подсмотреть можно, но сумму для каждого uri надо разную – google следит
Еще планирую добавить проверку тИЦ, там всё просто, вот как только домучаю модуль для d2010
Хорошее дело
Delphi 2k10 комплит в бинарный код сразу или управляемый байт код?
Было бы хорошо использовать код и на других компилируемых языках
а кто его знает
намёк про dll понял^^
Привет, crystalbit !
Если хочешь спрятать алгоритм, то с DCU надо быть очень осторожным – он довольно легко декомпилируется, с полным восстановлением интерфейсных частей модуля.
Кроме того, DCU воспринимается только тем компилятором. под которым собирался.
Лучше компилить в голый код (DLL)
Привет
Спасибо за отзыв, я особо и не стремлюсь спрятать алгоритм, не я делал google
Просто хочется сохранить авторство, пока что подобных модулей не встречал (с оговоркой на достаточно тяжёлый компонент)
> только тем компилятором. под которым собирался.
Разве? Я встречал модули, совместимые с разными версиями delphi.
DLL скоро будет, единственное, что модуль иногда удобней, так как в результате у нас никакие файлы не болтаются вместе с программой. Поэтому постараюсь и для других версий delphi собрать, а может и просто исходник выложу – посмотрим
У меня не получилось собрать проект, так как компилятор запросил pr_socket.dcu
Хм, думал, он собрался с ним. Прошу прощения, выложил.
Спасибо, теперь работает.
Обращаюсь к автору! Я – идейный сторонник Линукса.
))
Поэтому предлагаю автору блога несколько расширить тематику, охватив такой аспект как FreePascal и линуксовую среду Lazarus. Отличий от Delphi не так уж много, а вот привлечь большое количество программистов можно. Я бы и сам с удовольствием почитал…
Так что: афтар пиши, а то мне самому придется еще блог делать!!!
Поставлю как-нибудь линукс, меня практически все к этому тянут, так что спасибо за идею, аспект будет рассмотрен обязательно, тем более уже есть некоторый материал
А пока меня ждёшь, можешь почитать vlad‘а, он на lazarus как раз и пишет
Под Web пишу на Delphi в основном. Лазарус – это насущная необходимость
Ну конечно это все неплохо, но хотелось бы ещё такой плагин на c++
Конечно неплохо, очень даже хорошо
Скоро будет dll, надеюсь на совместимость с C++
Хорошая статья, yandexу понравилась)).
Чёрт, какое волнение, какое волнение, сам яндекс!
тИЦ и yandex rang тоже скоро прикручу, не обойду тебя стороной, друг! Точнее уже прикрутил и скоро выложу всё в одном, да и dll в придачу
Попробовал) dcu – это же компилированный pas. А если он скомпилирован в семерке, то в десятке не идет, говорит, что не может скомпилировать))))всем спасибо
На десятке некоторые проблемы возникли, как разберусь, будет и для десятки
Спасибо за отзыв
А посмотреть как работает гугльБар слабо. Я на его основе забацал программу для определения PR проще не бывает
Если сбацал, то ты должен был заметить наличие подсчёта контрольной суммы
Или как-то с использованием его самого?
Не понял?
Интересный вопрос, подумаю ещё, но склоняюсь к тому, что ты действительно не понял
> Я на его основе забацал программу
Спали тему, это может быть интересно
Может проще кинуть прогу?
Прога это готовый продукт, в теории интересней
Верной дорогой идете товарищ
Я просто посмотрел какие запросы отсылает гугльБар для получения PR и все.
Странный у тебя гуглбар
Я смотрел, так там помимо сайта в запросе еще один меняющийся параметр, который зависит как раз от адреса сайта. Если брать эту контрольную сумму одну, а сайт другой, то гугл ругается.
Не покажешь сам запрос?
А вот ты про что
Так и есть проверял только свой сайт
А это разве контрольная сумма, а не закодированный адрес сайта?
хах
Скажите если так легко узнать тИЦ, может тогда можно расчитать его алгоритм?
А то прям тайна века)))
Пока будете рассчитывать он поменяется 10 раз, овчинка выделки нестоит.
Гуглу невыгодно часто менять алгоритм, так как у большого количества людей стоит гугл тулбар, который придётся заменять в таком случае
не гуглу, миша писал про тИЦ
Не тайна, выложу потом)
Если все будут знать алгоритм ТИЦа то смысл в нём пропадёт.
под Delphi 6 не компилится. можно выложить под неё?
Дойдёт очередь и до этого, выложу
Спасибо! А можно еще ссылочку на рабочий php-вариант, который Вы нашли?
уже посеял где-то
Эммм.Я на php писал парсер ..но намного проще можно реалзовать парсер пр на Php )))))))
В один запрос ,правда я юзал ещё бд mysql(для записи значений)