Вот интересный пример (листинг 10.7), который вы можете разместить на своем сайте (при условии, что ваш сайт не является коммерческим).
Листинг 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 "<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 "внутренняя ошибка сервера^";
$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 <<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>
<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;
10.3. Яндекс как рекламная площадка
В том, что реклама — двигатель торговли, что реклама приносит прибыль владельцам площадок, где она размещается, убеждать никого не надо. Как не надо убеждать и в том, что рекламу желательно размещать на тематических площадках, где ее содержание совпадает с представленной на рекламной площадке иной информацией. (Вряд ли реклама даров моря будет более уместна на сайте, посвященном альпинизму, нежели на сайте, приглашающем в морские круизы.) Вот и стараются размещать рекламу товаров на тематических сайтах, где вероятность ее целевого попадания значительно выше. Но особенность Интернета заключается в том, что наиболее посещаемыми проектами являются не тематические сайты, а поисковые.
Впервые эта особенность при размещении рекламы была учтена поисковым сервисом Infoseek, который еще в 1994 году, вскоре после своего создания, стал показывать баннерную рекламу в зависимости от запросов, задаваемых пользователями. Спустя четыре года такой способ рекламы был опробован и в России, а первопроходцем стал Яндекс. Это решение оказалось абсолютно верным, что подтвердил спустя несколько лет взлет поисковика Google, сумевшего не только пережить последовавший в начале нового века интернет-кризис, но и ставшего одним из лидеров Интернета. Немаловажную роль в этом сыграло и использование им поисковой контекстной рекламы.
Возвращаясь к Яндексу отметим, что различают несколько вариантов размещения рекламных материалов на Яндексе и ресурсах, входящих в его рекламную сеть:
□ статическое расположение — как правило, это размещение баннеров, использующееся для того, чтобы сообщить как можно большему числу людей о рекламируемой компании или продукте (услуге). Выбранное заказчиком рекламное место выделяется ему на определенное время эксклюзивно, но при этом не гарантируется количество показов и, тем более, переходов. Такую рекламу называют имиджевой;
□ динамическое расположение — реклама показывается на определенных местах рекламных площадок, но случайным образом, вне зависимости от того, что ищет на поисковой системе посетитель. Заказчик указывает, сколько раз в сутки должна быть показана его реклама (баннеры или текст), и сколько всего должно быть обеспечено показов. Система вывода рекламы распределяет показ объявления равномерно в течение суток (или того временного интервала, который выбран заказчиком). По своей сути это тоже имиджевая реклама;