Яндекс для всех - Абрамзон М. Г (2007)
-
Год:2007
-
Название:Яндекс для всех
-
Автор:
-
Жанр:
-
Язык:Русский
-
Издательство:БХВ-Петербург
-
Страниц:245
-
ISBN:978-5-9775-0144-6
-
Рейтинг:
-
Ваша оценка:
Для людей которые только начинают пользоваться сетью Интернет.
Яндекс для всех - Абрамзон М. Г читать онлайн бесплатно полную версию книги
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 "<table width='100 %'><tr><td width='16 %'/><td>";
# мы должны получить место сервера в выдаче по некоему запросу.
# делаем запрос по десять ссылок на страницу и запрашиваем 50
# страниц. При нахождении сервера останавливаемся и выдаем его
# место в выдаче
while (not $exit and $page < $pages and $host)
{
my $reqid_tag = '';
$reqid_tag = " <reqid>$reqid</reqid>\n\n" if (defined $reqid and $reqid);
# XML запрос
my $doc = <<DOC;
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$query_esc</query>
<page>$page</page>
$reqid_tag
<maxpassages>0</maxpassages>
<groupings>
<groupby attr='d' mode='deep' groups-on-page='10' docs-in-group='1' curcateg='-1'/>
</groupings>
</request>
DOC
my $req = HTTP::Request — > new
# (POST => '
); (POST => '
); $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, "<br/>\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 "<p>сайт &laquo;$host&raquo; находится на месте № $found по запросу &laquo;$query&raquo;</p><p>Попробуйте узнать позицию другого сайта!</p><br/>\n";
} elsif (defined $host and $host)
{
print "<p>сайт &laquo;$host&raquo; находится далее, чем на". $pages*10." месте в выдаче &laquo;Яндекса&raquo; по запросу &laquo;$query&raquo;</p><p>Попробуйте узнать позицию другого сайта!</p><br/>\n";
}
else
{
print "<p>Узнайте позицию сайта в выдаче &laquo;Яндекса&raquo; по запросу!</p>";
}
print "</td></tr></table>";
# выводим форму с запросом. print <<FOKM;
<form method='POST' accept-charset='utf-8'>
<table width='100 %'>
<tr>
<td width="16\%"/>
<td width="75\%">
<table>
<tr>
<td><label for='query'>Запрос:</label></td>