Листинг 10.7. Узнай место сайта в выдаче

#!/usr/bin/perl — w — Ilib use strict;

# модули для получения информации из XML и доступа к

# веб-ресурсам, соответственно use XML::XPath;

use LWP::UserAgent;

# верхняя и нижняя части страницы require"./page-template.pl";

# библиотека функций. Например, для обработки полей присланной

# формы

require"./xml-lib.pl";

print "Content-Type: text/html;charset=utf-8\n\n"; print &header

# обработка полей формы my %params = &parse_form;

my $host = $params {'host'}; my $query = $params {'query'}; my $query_esc = xmlescape($query); my $host_esc = xmlescape($host);

$host =~ s[Ahttp://|www\.][];

# готовим запрос

my $ua = LWP::UserAgent->new;

$ua->agent("Bond, James Bond/0.07"); my $exit = 1;

$exit = 0 if $ENV{'REQUEST_METHOD'} eq 'POST'; my $reqid = undef; my $page = 0;

my $found = 0; my $pages = 20;

print "

";

# мы должны получить место сервера в выдаче по некоему запросу.

# делаем запрос по десять ссылок на страницу и запрашиваем 50

# страниц. При нахождении сервера останавливаемся и выдаем его

# место в выдаче

while (not $exit and $page < $pages and $host)

{

my $reqid_tag = '';

$reqid_tag = " $reqid\n\n" if (defined $reqid and $reqid);

# XML запрос

my $doc = <

$query_esc

$page

$reqid_tag

0

DOC

my $req = HTTP::Request — > new

# (POST => 'http://xmlsearch.yandex.ru/cgi-bin/xmlsearch.pl'); (POST => 'http://xmlsearch.yandex.ru/cgi-bin/xmlsearch.pl'); $req — > content_type ('application/xml');

$req — > content ("$doc");

# отправляем запрос

my $response = $ua — > request ($req); if ($response->is_success)

{

#print $response — > content;

my $doc = XML::XPath — > new (xml => $response — > content);

# пробуем получить ошибку

my $error = $doc — > findvalue ('/yandexsearch/response/error'); if ("$error")

{

print "Возникла следующая ошибка: ", $error, "
\n";

$exit = 1; last;

}

$reqid = $doc — > findvalue ('/yandexsearch/response/reqid'); my $pos = 1;

my @nodes = $doc — > findnodes ('/yandexsearch/response/results/grouping/group/doc/url');

foreach (@nodes)

{

# если URL начинается с имени хоста, выходим из цикла if ($_ — > string_value =~ m^http: \/\/(www\.)?$host/i)

{

$found = $pos + $page * 10;

$exit = 1; last;

}

$pos++;

}

$page++;

}

else

{

print "внутренняя ошибка сервера^";

$exit = 1;

}

}

# если что-то найдено, то выводим результат if ($found)

{

print "

сайт «$host» находится на месте № $found по запросу «$query»

Попробуйте узнать позицию другого сайта!


\n";

} elsif (defined $host and $host)

{

print "

сайт «$host» находится далее, чем на". $pages*10." месте в выдаче «Яндекса» по запросу «$query»

Попробуйте узнать позицию другого сайта!


\n";

}

else

{

print "

Узнайте позицию сайта в выдаче «Яндекса» по запросу!

";

}

print "";

# выводим форму с запросом. print <

  Пример: волшебные травы

сервера:

  Пример: narcom.ru

value="?? скать!"/>

FORM

# дописываем html

print &footer

Перейти на страницу:

Похожие книги