Поиск по FTP - тоже не сложно !Эта статья является логическим продолжением статьи " Поиск по сайту - нет ничего проще ( http://webscript.ru///www.codenet.ru/webmast/cgi/search.php )". В ней мы рассмотрим способ организации поиска по FTP серверу. Конечно, он не претендует на "правильность", но зато прост в установке и использовании. Сразу оговорюсь, что будет отсутствовать возможность поиска по маске (*.mp3) но можно будет искать, введя отдельно расширение (mp3) или имя файла (music). В прошлой статье я рассказал о том, как установить и настроить CNSearch Pro ( http://webscript.ru///www.cn-software.com/cnsearch_pro/ ). К сожалению, эта система не имеет возможности индексации FTP серверов, но зато при индексации страниц может изменять адреса (URL) обрабатываемого сайта. Благодаря этому задача индексации FTP сервера сводится к написания врапера FTP->HTTP и индексации по HTTP с хитрым параметром подмены адреса. Пишем враперВрапер - это CGI приложение, запускаемое из каталога cgi-bin HTTP сервера (например, Apache) Задача врапера - считать каталог с FTP сервера и создать HTML страницу, где в заголовке будет указано название каталога на FTP сервере, а в теле страницы список файлов в этом каталоге. Приведенный ниже код выводит содержимое FTP сервера ftp.chg.ru и запускается следующим образом: //www.site.com/cgi-bin/ftp.pl #!/usr/bin/perl sub escape { ($_)=@_; s/([^a-zA-Z0-9_\-\/.])/uc sprintf("%%%02x",ord($1))/eg; $_; } sub unescape { ($_)=@_; tr/+/ /; s/%(..)/pack("c",hex($1))/ge; $_; } $dir=unescape($ENV{QUERY_STRING}); if ($dir eq "") {$dir="/";} print "Content-Type: text/html\n\n"; print "<HTML><TITLE>$dir</TITLE></HEAD><BODY>\n\n"; $a=`(echo cd \\\"$dir\\\";echo ls) | ftp ftp://mp3.int.ru/`; #print $a; if ($a=~/(.*)usage:(.*)/ || $a=~/(.*)No\ssuch\sfile\sor\sdirectory(.*)/) { print "not found"; print "</BODY></HTML>"; } else { print "<H1>".$dir."</H1>"; @d=split("\n",$a); for ($i=0;$i<scalar(@d);$i++) { if ($d[$i]=~/.{10}\s+\d+\s+.+\s+.+\s+\d+\s+.+\d+\s+[\d\:]+\s+(.*)/) { $s=$1; } if (substr(@d[$i],0,1) eq "d") { if ($dir eq "/") { print "<a href=ftp.pl?/".escape($s).">".$s."</a><br>\n"; } else { print "<a href=ftp.pl?".escape($dir)."/".escape($s).">".$s."</a><br>\n"; } } else { print $s."<br>\n"; } } } print "</BODY></HTML>\n"; Результат работы врапера выглядит следующим образом: Настройка индексатора.Теперь остается только настроить индексатор CNSearch ( http://webscript.ru///www.cn-software.com/cnsearch_pro/ ), и сделать это совсем не сложно. Ниже приведен конфигурационный файл search.conf [Job ftp] URL //www.server.com/cgi-bin/ftp.pl?/ AFrom //www.server.com/cgi-bin/ftp.pl?/ ATo ftp://mp3.int.ru/ Вот вроде и все. Если у вас есть какие-то вопросы - задавайте в форуме ( http://webscript.ru///forum.codenet.ru/ ), всегда отвечу. Еще раз повторюсь, что если вы располагаете временем и средствами то лучше написать свою систему поиска - это не так сложно и при определенных навыках не займет более дня. |