SWE-ART
ГЛАВНАЯ

Управление сайтом

4.gif

Компоненты системы

4.gif

Интерфейс cms

4.gif

Оформление

4.gif

Видео архив

4.gif

Новости cms sspro

4.gif

Вопросы по cms

4.gif

Задать вопрос

4.gif

Тематические статьи

4.gif

Он - лайн демо

4.gif

Скачать CMS SSPRO

4.gif

Партнерам

4.gif

Условия

4.gif

Отправить заявку

4.gif

Обратная связь

4.gif

Вакансии

4.gif

О компании

4.gif

Реквизиты

4.gif

Он - лайн демо

4.gif

Скачать CMS SSPRO

4.gif

Управление сайтом

Компоненты системы

4.gif

Интерфейс cms

4.gif

Оформление

4.gif

Видео архив

4.gif

Обратная связь

4.gif

Вакансии

4.gif

О компании

4.gif

Реквизиты

4.gif

Партнерам

Условия

4.gif

Отправить заявку

4.gif

Новости cms sspro

4.gif

Вопросы по cms

4.gif

Задать вопрос

4.gif

Тематические статьи

4.gif

Корреспонденция

4.gif

Статистика посещений

4.gif

Список интернет провайдеров

4.gif

Схема проезда

4.gif
Применение SSPro
Сайты-визитки
Интернет-магазины
Корпоративные сайты
Внутрикорпоративные системы
Лучшее решение!

Выезд демонстратора

Удобно
Демо-версия SSPro Наглядно
Он-лайн консультация:
 ICQ#: 213-446

Сертификат 1С

Свидетельство

Создание и продвижение сайта
Cве Арт


         
  +7 (495) 988 0968, 778 83 39

Создание индекса для сайта

 

Опубликовано:
29.11.05

Создание индекса для сайта

 

Вы, может, знаете, что HTML разрешает вставлять META-тэги в заголовок документа. Тогда вы, я просто уверен, знаете для чего они нужны. Кто не в курсе - кратенько поясню: Существуют поисковые сервера, которые ползают по зарегистрировавшимся в их базе сайтах и индексируют странички. При этом они обращают пристальное внимание на МЕТА-тэги, а особенно на keywords и description (<ключевые слова> и <описание>).

Синтаксис этих двух МЕТА-тэгов выглядит так:

<meta name=description content="CGI&Perl- Документация и скрипты">
<meta name=keywords content="perl cgi documentationscripts скрипты документация перл">

Ключевые слова также могут быть разделены запятой.

Ну а теперь непосредственно о скрипте. Скрипт осматривает все странички сайта на предмет meta description и meta keywords и составляет итоговую таблицу - индекс, или предметный указатель.

Строки 1-3: Обычное начало программы.

5-26: Часть скрипта, которую нужно сконфигурировать под свои нужды.

7: Список URLов, которые необходимо проиндексировать. Но если все страницы сайта связаны гиперссылками - то необходима лишь один URL.

9-24: Определение процедуры OK_TO_FOLLOW. Принимает URI-объект (http), возвращает единицу, если эту ссылку надо сканировать и нуль, если не надо.

11-13: Необходимо, чтобы скрипт не выходил за пределы сайта.

14-16: Не нужно также запускать никакие CGI-скрипты

17-22: Убираем из процесса индексации картинки и другие не-HTML файлы.

Отметьте небольшую хитрость: цикл for здесь вовсе не цикл, он нужен лишь для того, чтобы переменная $_ равнялась тому, что внутри скобок for ()

23: Передано то, что необходимо проиндексировать - вернем единицу.

28-31: Подключаем модули: CGI::Pretty - стандартный, LWP::UserAgent, HTML:Entities, WWW::Robot - входят в библиотеку LWP.

33-35: Определение глобальных переменных. %description - хэш, ключами которого являются URLы, а значениями - описания (meta description). %keywords - URL- >ключевые слова (keywords). %keywords_caps содержит регистр (верхний или нижний) написания ключевого слова.

37-45: Настройки индексатора. За подробностями обратитесь к документации по WWW::Robot. Здесь же устанавливаем, что индексатор идентифицирует себя как MetaBot, версии 0.15, ну и e-mail адрес. USERAGENT - будет LWP::UserAgent, отключена проверка MIME-типов.

47: Включает проверку конфигурации прокси-сервера, вобщем-то это и не нужно. 49-54: Одна из двух callback-функций, которую вызывает WWW::Robot. Как только найден URL, вызывается follow-url-test callback. Здесь вызываем функцию OK_TO_FOLLOW, чтобы отсеять лишнее.

55-76: Вытаскиваем информацию с каждой странички.

58-61: Нам нужны только keywords и description

63-67: Сохраним описание, предварительно очистив его от переносов строк и символов табуляции, заменив их на пробелы.

68-75: Запомним ключевые слова и их регистр. В данном скрипте предполагается, что слова разделены запятыми. Можно разделителями сделать пробелы, заменив split(/,/,... на split (/ /, ... Или и пробелы и запятые - split (/[, ]/,...

77: Запуск индексации. Для большого сайта займет довольно длительное время.

В строке 81 содержится оператор print, который продолжается до конца скрипта и выводит таблицу-индекс.

79: хэш %seen_letter нужен для того чтобы вверху странички выдать ссылки в виде букв алфавита, например: <Jump to: A B K L P R S W Z>

Для каждого ключевого слова выдается ссылка на документ, где оно встречается и описание из этого документа (3 колонки в таблице).

Вот и все.

Листинг:
=1= #!/usr/bin/perl -w
=2= use strict;
=3= $|++;
=4=
=5= ## config
=6=
=7= my @URL = qw();
=8=
=9= sub OK_TO_FOLLOW {

1000
=10= my $uri = shift; # URI object, known to be http only
=11= for ($uri->host) {
=12= return 0 unless /\.stonehenge\.Xcom$/i;
=13= }
=14= for ($uri->query) {
=15= return 0 if defined $_ and length;
=16= }
=17= for ($uri->path) {
=18= return 0 if /^\/(cgi|fors|-)/;
=19= return 0 if /col\d\d|index/;
=20= return 0 if /Pictures/;
=21= return 0 unless /(\.html?|\/)$/;
=22= }
=23= return 1;
=24= }
=25=
=26= ## end config
=27=
=28= use WWW::Robot;
=29= use LWP::UserAgent;
=30= use CGI::Pretty qw(-no_debug :html);
=31= use HTML::Entities;
=32=
=33= my %description;
=34= my %keywords;
=35= my %keyword_caps;
=36=
=37= my $robot = WWW::Robot->new
=38= (
=39= NAME => 'MetaBot',
=40= VERSION => '0.15',
=41= EMAIL => 'merlyn@stonehenge.Xcom',
=42= USERAGENT => LWP::UserAgent->new,
=43= CHECK_MIME_TYPES => 0,
=44= ## VERBOSE => 1,
=45= );
=46=
=47= $robot->env_proxy;
=48=
=49= $robot->addHook
=50= ("follow-url-test" => sub {
=51= my ($robot, $hook, $url) = @_;
=52= return 0 unless $url->scheme eq 'http';
=53= OK_TO_FOLLOW($url);
=54= });
=55= $robot->addHook
=56= ("invoke-on-contents" => sub {
=57= my ($robot, $hook, $url, $response, $structure) = @_;
=58= my %meta = map {
=59= my $header = $response->header("X-Meta-$_");
=60= defined $header ? ($_, $header) : ();
=61= } qw(Description Keywords);
=62= return unless %meta;
=63= if (exists $meta{Description}) {
=64= $_ = $meta{Description};
=65= tr/ \t\n/ /s;
=66= $description{$url} = $_;
=67= }
=68= if (exists $meta{Keywords}) {
=69= for (split /,/, $meta{Keywords}) {
=70= s/^\s+//;
=71= s/\s+$//;
=72= $keywords{lc $_}{$url}++;
=73= $keyword_caps{lc $_} = $_;
=74= }
=75= }
=76= });
=77= $robot->run(@URL);
=78=
=79= my %seen_letter;
=80=
=81= print
=82= table({ Cellspacing => 0, Cellpadding => 10, Border => 2 },
=83= do {
=84= my %letters;
=85= @letters{map /^([a-z])/, keys %keywords} = ();
=86= %letters ?
=87= Tr(td({Colspan => 3},
=88= p("Jump to:",
=89= map a({Href => "#index_$_"}, uc $_), sort keys %letters)))
=90= : 0;
=91= },
=92= map {
=93= my $key = $_;
=94= my @value =
=95= map {
=96= my $url = $_;
=97= my $text = exists $description{$url} ?
=98= $description{$url} : "(no description provided)";
=99=
=100= [a({Href => encode_entities($url)}, encode_entities($url)),
=101= encode_entities($text),
=102= ];
=103= } sort keys %{$keywords{$key}};
=104= my $key_text = $keyword_caps{$key};
=105= if ($key =~ /^([a-z])/ and not $seen_letter{{Var : Text}}++ ) {
=106= $key_text = a({ Name => "index_{Var : Text}" }, $key_tex
639
t);
=107= }
=108=
=109= map {
=110= Tr(($_ > 0 ? () : td({Rowspan => scalar @value}, $key_text)),
=111= td($value[$_]));
=112= } 0..$#value;
=113= } sort keys %keywords
=114= );


Автор: Randal L. Schwartz
Перевод Анисимова Михаила


Версия для печати

Назад

         
Каталог ссылок
SWE-ART
Москва, ул. Угрешская, д. 2 (Технопарк "Синтез"), стр. 31
+7 (495) 988-0968 (многоканальный), 778 83 39
Реклама: