Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Perl: сделать интерфейс к ftp-индексатору, страничку с формой настройки и результатами
Pacific
сообщение 2.02.2009 - 22:15

Desktop designer
*****
орден I степениорден I степени
Группа: Участник
Сообщений: 565
Регистрация: 1.09.2004
Пользователь №: 4552


Собственно, начал самостоятельно изучать perl, и для практики написал простой ftp-индексатор

Что уже есть:
На данный момент индексатор умеет только рекурсивно ползать по папкам и выводить результаты сканирования в порядке попадания в базу ( как это выглядит - можно посмотреть тут: ]]>http://80.92.103.18/cgi-bin/check.pl]]> - само сканирование пока выключил - берёт готовые результаты из базы)

Что хочется сделать:
Нужна возможность вводить настройки фтп-сервера, который будем сканировать, и БД, куда будут записываться результаты сканирования.
Мне это представляется в качестве странички с ]]>вот такой]]> разметкой (верстальщик из меня не ахти, конструктивная критика приветствуется smile.gif )

Пытался нагуглить что-нибудь по формированию динамических страниц с помощью perl, но мало что понял..
За основу брал этот пример: ]]>http://www.cs.tut.fi/~jkorpela/perl/cgi.html]]>
Результаты экспериментов тут: ]]>http://80.92.103.18/cgi-bin/indexer_full.pl]]>
Как видно, при незаполнении полей формы (кроме логина/пароля для фтп - там anonymous подставляется если поля пустые) - появляются сообщения об ошибках (как и задумывалось), но при этом косячится html-код (две шапки <html><head>....<head><body>, со всеми стилями и прочей лабудой)

Весь код здесь: ]]>http://pacific.zelnet.ru/indexer_full.zip]]>

Вопрос такой: как сделать динамическую страницу "правильно", чтобы не было косяков с html? И вообще, можно ли как-нибудь проще сделать?
Перейти в начало страницы
 
+Цитировать сообщение
leah
сообщение 3.02.2009 - 09:45

Постоялец форума
*****

Группа: Модератор
Сообщений: 967
Регистрация: 17.08.2004
Пользователь №: 4400


Цитата(Pacific @ 2.02.2009 - 22:15) *
Собственно, начал самостоятельно изучать perl, и для практики написал простой ftp-индексатор

Что уже есть:
На данный момент индексатор умеет только рекурсивно ползать по папкам и выводить результаты сканирования в порядке попадания в базу ( как это выглядит - можно посмотреть тут: ]]>http://80.92.103.18/cgi-bin/check.pl]]> - само сканирование пока выключил - берёт готовые результаты из базы)

Что хочется сделать:
Нужна возможность вводить настройки фтп-сервера, который будем сканировать, и БД, куда будут записываться результаты сканирования.
Мне это представляется в качестве странички с ]]>вот такой]]> разметкой (верстальщик из меня не ахти, конструктивная критика приветствуется smile.gif )

Пытался нагуглить что-нибудь по формированию динамических страниц с помощью perl, но мало что понял..
За основу брал этот пример: ]]>http://www.cs.tut.fi/~jkorpela/perl/cgi.html]]>
Результаты экспериментов тут: ]]>http://80.92.103.18/cgi-bin/indexer_full.pl]]>
Как видно, при незаполнении полей формы (кроме логина/пароля для фтп - там anonymous подставляется если поля пустые) - появляются сообщения об ошибках (как и задумывалось), но при этом косячится html-код (две шапки <html><head>....<head><body>, со всеми стилями и прочей лабудой)

Весь код здесь: ]]>http://pacific.zelnet.ru/indexer_full.zip]]>

Вопрос такой: как сделать динамическую страницу "правильно", чтобы не было косяков с html? И вообще, можно ли как-нибудь проще сделать?


1) Тебе лучше отделить логику от отображения - это называется дизайном кода с использованием паттерна (шаблона программирования) MVC - для перла есть куча фреймворков с реализацией MVC (Model-View-Controller) - например ]]>http://www.usegantry.org/]]>

2) Более того, так как сканирование может занимать прооооодолжительное время, то лучше еще и применить двухуровневую модель построения своего приложения - один уровень отвечает за ползанье, второй, за отображение результатов этого ползанья - это можно сделать разными путями: через базу данных, через событийную модель (посылка сигнала/сообщения), через очередь сообщений, или комбинацией всех этих методов сразу :-) . Преимущество в скорости отображения информации для пользователя, лучшей управляемости, гибкости при разработке - если сайт индексируется, то пользователь не ждет результата вывода, а стазу получает сообщение, что сайт еще не проиндексирован, если проиндексирован, то видит время последнего обновления индекса....

В общем, если без всей мути выше, то предлагаю так:

1) crawler - программа-индексатор запускается для каждого сайта (в параллельном режиме из CGI, по крону, ручками, или как угодно)
- результат сканирования записывает в базу данных
- сканируемый сайт помечается соответствующей меткой в базе данных с отметкой времени начала сканирования
- просканированный сайт помечается соответствующей меткой в базе данных с отметкой времени окончания сканирования
- в базе данных также запоминаются ошибки последнего сканирования (и возможно счетчик ошибок - чтобы в дальнейшем не сканировать заведомо ошибочные сайты - алгоритм здесь можно улучшать до бесконечности)

2) CGI-скрипт (может работать по модели MVC) отображает из базы данных индекс отсканированных сайтов, сообщения, формы поиска, запросы на повторное сканирование и прочее...
- состоит из двух частей кода
- одна часть отвечает за прием данных от пользователя и обработку запросов к базе данных (Model-Controller)
- вторая часть отвечает за отображение подготовленных данных (View) - в реальной жизни выглядит как теплейт - хтмл-код со вставками переменных, переданных из контроллера.


Чем все это хорошо? Все можно отлаживать по отдельности! Ничего не тормозит - особенно отображение результатов! Можно регулировать нагрузку по индексации сайтов - например не разрешать запускать больше 10 краулеров одновременно! Шаблоны отдельно - код отдельно, и по этому читабельно и не косячно! Все хранится в базе данных. Авторизацию можно делать на уровне обращений к контроллеру! И прочее, прочее, прочее...

Какие проблемы нужно будет решить?
- если краулер отвалился без записи в базу данных конечных результатов - помнить номер процесса и проверять, что краулер еще работает - принудительно ставить ошибку и т.д.
- очистка базы данных
- переиндексация "устаревших" сайтов
- выкидывание из индекса ошибочных сайтов

Все это можно сделать скриптами, запускаемыми по расписанию из крона.

Сообщение отредактировано leah - 3.02.2009 - 09:58
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 18.04.2024 - 22:35