![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Вставить ник | Быстрая цитата | Сообщение
#1
|
|
![]() Desktop designer ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 565 Регистрация: 1.09.2004 Пользователь №: 4552 ![]() |
Собственно, начал самостоятельно изучать perl, и для практики написал простой ftp-индексатор
Что уже есть: На данный момент индексатор умеет только рекурсивно ползать по папкам и выводить результаты сканирования в порядке попадания в базу ( как это выглядит - можно посмотреть тут: ]]>http://80.92.103.18/cgi-bin/check.pl]]> - само сканирование пока выключил - берёт готовые результаты из базы) Что хочется сделать: Нужна возможность вводить настройки фтп-сервера, который будем сканировать, и БД, куда будут записываться результаты сканирования. Мне это представляется в качестве странички с ]]>вот такой]]> разметкой (верстальщик из меня не ахти, конструктивная критика приветствуется ![]() Пытался нагуглить что-нибудь по формированию динамических страниц с помощью 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? И вообще, можно ли как-нибудь проще сделать? |
|
|
![]()
Вставить ник | Быстрая цитата | Сообщение
#2
|
|
![]() Постоялец форума ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 967 Регистрация: 17.08.2004 Пользователь №: 4400 ![]() |
Собственно, начал самостоятельно изучать perl, и для практики написал простой ftp-индексатор Что уже есть: На данный момент индексатор умеет только рекурсивно ползать по папкам и выводить результаты сканирования в порядке попадания в базу ( как это выглядит - можно посмотреть тут: ]]>http://80.92.103.18/cgi-bin/check.pl]]> - само сканирование пока выключил - берёт готовые результаты из базы) Что хочется сделать: Нужна возможность вводить настройки фтп-сервера, который будем сканировать, и БД, куда будут записываться результаты сканирования. Мне это представляется в качестве странички с ]]>вот такой]]> разметкой (верстальщик из меня не ахти, конструктивная критика приветствуется ![]() Пытался нагуглить что-нибудь по формированию динамических страниц с помощью 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 |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.05.2025 - 23:55 |