уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Athene

Продолжаем рассматривать вопросы применения Delphi в Internet. И сегодня я рад представить Вам очередной компонент для Delphi 2010. На этот раз компонент предназначен для определения даты регистрации и возраста домена. Если воспользоваться всеми рассмотренными в блоге компонентами, включая этот, то уже можно писать небольшую программку по аудиту сайтов :)

В прошлой статье я рассмотрел небольшую программку, реализующую алгоритм подобный тому, который реализован в компоненте. Но, на самом деле основной целью написания программы было освоение навыков работы с RegExp в Delphi. Поэтому и над передачей данных особо не заморачивался и использовал простое сохранение данных в файл и дальнейшую обработку. Компонент работает несколько иначе.

1. Модель компонента DomainAge

component modelВся работа с получением исходного текста от whois-сервера проходит в отдельном потоке, что избавляет приложение от лишних «зависаний», использования Application.ProcessMessages и пр. Далее, после того как поток завершает свою работу, проводится работа с объектом RegExp и определяется дата регистрации и возраст домена. В случае, если необходимо сохранить исходный текст страницы whois-сервера, весь текст сохраняется в текстовом файле с названием домена.

Для получения данных о дате регистрации и возрасте домена необходимо воспользоваться единственным событием компонента — OnAcceptData. Все просто как три копейки.
Остается установить компонент и воспользоваться им :) Кстати, с установкой тоже проблем возникнуть не должно, но на всякий случай рассмотрим некоторые моменты, связанные с установкой компонентов в Delphi 2010.

2. Установка компонента. Обзор основных свойств и события.

Установка компонента как и всегда возможна либо с использованием прилагаемого bpl-файла, либо с помощью pas-файлов из собственного пакета Package.

При использовании pas-файлов в пакет необходимо включить файлы uDomains.pas и InetThread.pas.

Также следует обратить внимание на то, что компонент использует в своей работе объект TRegExp, поэтому перед установкой самого компонента не забудьте импортировать в Delphi 2010 библиотеку Microsoft VBScript Regular Expressions 5.5. Как это сделать я подробно рассматривал здесь.

После того, как компонент будет установлен, он станет доступен на вкладке WebDelphi.ru палитры компонентов.

В компоненте определены следующие свойства:

1. Domain: string — анализируемый домен. Следует отметить, что анализируется именно домен, а не хост. То есть, если Вы зададите свойство, например так:

Domain:=bvv36.ya.ru

то анализироваться будет ya.ru (домен), а не bvv36.ya.ru (хост).

2. Pattern: string — регулярное выражение, используемое в RegExp при анализе страницы и поиске данных по домену. По умолчанию используется регулярное выражение следующего вида:

'^CD+(d{4}.d{2}.d{2})|Cw{7,8}sw{4}:D+(d{4}-d{2}-d{2})'

Если Вы не имеете навыков по составлению регулярных выражений, то не рекомендую Вам изменять это свойство. На всякий случай в модуле uDomains.pas определена константа:

PatternConst = '^CD+(d{4}.d{2}.d{2})|Cw{7,8}sw{4}:D+(d{4}-d{2}-d{2})';

В случае необходимости можете ей воспользоваться для восстановления регулярного выражения для RegExp.

3. SaveSource : boolean — опция, определяющая будет ли содержимое потока сохраняться в отдельный текстовый файл. Если SaveSource равно true, то по окончании работы поток сохранит все полученные данные в текстовый файл с названием домена. То есть данные для webdelphi.ru сохраняются в файл webdelphi.ru.txt и т.д.

4. WhoisPattern: string — строка-шаблон, определяющая адрес whois-сервера по которому можно получить необходимые данные. В определении этого свойства необходимо помнить, что в WhoisPattern обязательно должна присутствовать директива %s — вместо неё будет подставляться имя домена. В случае ошибочного задания этого свойства, Вы можете восстановить исходное значение воспользовавшись константой из модуля uDomains.pas:

URLPatternConst = 'http://www.who.is/whois/%s';

Также в компоненте определено единственное событие onAcceptData, которое возникает в случае, если поток удачно завершает работу и передает данные на обработку в RegExp.

Для получения данных о дате регистрации и возрасте домена рекомендую Вам пользоваться именно этим событием, либо, если Вы уверены, что компонент удачно отработал все операции, пользоваться свойствами только для чтения Age и RegDate.

Для того, чтобы запустить поток в работу, необходимо использовать метод Activate, который создает отдельный поток и блокирует все обращения к компоненту до момента срабатывания события onAcceptData.

Ну, а теперь, рассмотрим применение компонента при разработке собственных приложений.

3. Пример использования компонента DomainAge

Я не стал изобретать что-то новое и воспользовался заготовкой программы из прошлой статьи, только добавил ещё один компонент на форму:

DomainAge_primerСостояние CheckBox определяет будет ли сохраняться исходник страницы в отдельный файл.

Теперь, если у Вас есть под рукой исходный текст этого приложения, то можете перейти к событию onButtonClick и смело удалить оттуда весь код. Он нам больше не пригодится.

Теперь уложите на форму компонент DomainAge и на событие onClick напишите вот такие строки:

DomainAge1.Domain:=Edit1.Text;
DomainAge1.SaveSource:=CheckBox1.Checked;
DomainAge1.Activate;

Здесь мы определили домен для анализа, задали свойство SaveSource и запустили компонент на выполнение.

Теперь перейдите на вкладку Events компонента DomainAge, сделайте двойной клик на событии onAcceptData и напишите такой обработчик события:

procedure TForm2.DomainAge1AcceptData(Age: Integer; RegDate: TDate);
begin
  label7.Caption:=IntToStr(Age);
  label5.Caption:=DateToStr(RegDate);
end;

Вот и все. То, что ещё вчера расписывалось на соню с лишним строк, теперь уместилось всего в 5 строк кода, написанного Вами. Теперь можете запустить приложение и протестировать работу компонента.

К сожалению, на момент написания этой статьи у who.is были проблемы с доступом к MySQl, поэтому результат работы программы показать не могу. Но, в случае, если дата регистрации домена и его возраст не определены, то в переменных Age и RegDate вернуться значения -1.

Можете использовать другие whois-сервера для работы — это не принципиально, главное — составьте правильное регулярное выражение :) Например, можете воспользоваться следующей настройкой компонента:

WhoisPattern:='http://whois.domaintools.com/%s';
Pattern:='(?:created|creation date):.*?(d{4}[.-]{1}d{2}[.-]{1}d{2})';
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
2 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Роман
01/10/2009 11:11

Так для других серверов нужно другое регулярное выражение, получается?