S
Satell
Поставил Active Perl 5.8.8 под винды, при выполнении скрипта ошибка
Can't locate XML::XPath, нету такого модуля
скачал его со span.org, как его установить в мой дистрибутив, просто скопировать в папку XML или нет?
и оттуда ли я его скачал?
я просто скопировал модуль в папку XML, прога выдаёт ошибку Undefined subroutine &main::xmlescape line32
тут такого модуля нет
Can't locate XML::XPath, нету такого модуля
скачал его со span.org, как его установить в мой дистрибутив, просто скопировать в папку XML или нет?
и оттуда ли я его скачал?
я просто скопировал модуль в папку XML, прога выдаёт ошибку Undefined subroutine &main::xmlescape line32
тут такого модуля нет
Ссылка скрыта от гостей
Код:
#!/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 $host='riabinoviy.info';
my $query='шансон';
#замена символов на ескейп последовательности, возможно библа xml встала неправильно
my $query_esc = xmlescape($query);
my $host_esc = xmlescape($host);
#тут узнать что делает
$host =~ s[^http://|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 => '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, "<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 "внутренняя ошибка сервера\n";
$exit = 1;
}
}
# если что-то найдено, то выводим результат
if ($found)
{
print "<p>сайт «$host» находится на месте № $found по запросу «$query»</p><p>Попробуйте узнать позицию другого сайта!</p><br/>\n";
}
elsif (defined $host and $host)
{
print "<p>сайт «$host» находится далее, чем на ". $pages*10 ." месте в выдаче «Яндекса» по запросу «$query»</p><p>Попробуйте узнать позицию другого сайта!</p><br/>\n";
}
else
{
print "<p>Узнайте позицию сайта в выдаче «Яндекса» по запросу!</p>";
}
print "</td></tr></table>";
# выводим форму с запросом.
print <<FORM;
<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>
<td><input type='text' name='query' id='query' value='$query_esc'/> Пример: волшебные травы</td>
</tr>
<tr>
<td><label for='host'>?Имя сервера:</label></td>
<td><input type='text' name='host' id='query' value='$host_esc'/> Пример: narcom.ru</td>
</tr>
<tr>
<td/>
<td><input type="submit" value="??скать!"/></td>
</tr>
</table>
</td>
<td width="9\%">
</tr>
</table>
</form>
FORM
# дописываем html
print &footer;