Шрифт:
Начиная с середины 2006 года сервис Яндекс XML стал искать не только документы, опубликованные на веб-сайтах, но и изображения. При этом результаты поиска будут такими же, как если бы вы искали на Яндекс. Картинках.
Количество запросов на поиск картинок учитывается в общем количестве запросов (все запросы "принадлежат" одному и тому же IP-адресу). Кроме этого, в результатах "обычного" XML-поиска теперь можно показывать одно наиболее релевантное изображение, так, как это происходит в результатах поиска на Яндексе. В этом случае запрос будет выглядеть примерно так (листинг 10.7).
Листинг 10.7. Пример запроса с выводом изображения I
<request>
<query>anoHbK/query>
<groupings>
<groupby attr="ih" mode="deep" />
<groupby attr="d" mode="deep" />
</groupings>
</request>
Поиск в найденном — это обычное уточнение запроса. Для реализации такого варианта достаточно к первоначальному поисковому выражению добавить новое. Например, если первоначально вы искали заповедник Эйн-Геди, а затем уточняете запрос поиском информации о длиннохвостых скворцах, то ваш запрос будет выглядеть следующим образом:
(заповедник Эйн-Геди) && (длиннохвостый скворец)
Возможности XML-поиска оказались востребованными. Их использует, например, такая поисковая система, как Nigma.ru, визуальная поисковая система Quintura, система "Телеграф" — поиск по белорусским сайтам и другие поисковые системы.
Кроме того, на основе этого варианта поиска разработано несколько простых, но весьма занятных игр, например, "Отчество", в которой по имени и фамилии, вводимой пользователем, ищется наиболее часто встречающееся для этой пары данных отчество. Или игра "Какого оно цвета", в которой для введенного названия предмета подыскивается наиболее часто употребляемый с ним цвет. Почему-то тыкву большинство пользователей Интернета связывают с черным цветом, но вот огурец точно оказался зеленым.
Вы можете сами придумать интересные варианты использования XML-поиска и, если они покажутся интересными и Яндексу, их могут опубликовать с указанием фамилии разработчика. Чем не успех?
Вот интересный пример (листинг 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 => ' ; (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 "сайт «$host» находится на месте № $found по запросу «$query»Попробуйте узнать позицию другого сайта!<br/>\n";
} elsif (defined $host and $host)
{
print "сайт «$host» находится далее, чем на". $pages*10." месте в выдаче «Яндекса» по запросу «$query»Попробуйте узнать позицию другого сайта!<br/>\n";
}
else
{
print "Узнайте позицию сайта в выдаче «Яндекса» по запросу!";
}
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, сумевшего не только пережить последовавший в начале нового века интернет-кризис, но и ставшего одним из лидеров Интернета. Немаловажную роль в этом сыграло и использование им поисковой контекстной рекламы.
Возвращаясь к Яндексу отметим, что различают несколько вариантов размещения рекламных материалов на Яндексе и ресурсах, входящих в его рекламную сеть:
статическое расположение — как правило, это размещение баннеров, использующееся для того, чтобы сообщить как можно большему числу людей о рекламируемой компании или продукте (услуге). Выбранное заказчиком рекламное место выделяется ему на определенное время эксклюзивно, но при этом не гарантируется количество показов и, тем более, переходов. Такую рекламу называют имиджевой ;
динамическое расположение — реклама показывается на определенных местах рекламных площадок, но случайным образом, вне зависимости от того, что ищет на поисковой системе посетитель. Заказчик указывает, сколько раз в сутки должна быть показана его реклама (баннеры или текст), и сколько всего должно быть обеспечено показов. Система вывода рекламы распределяет показ объявления равномерно в течение суток (или того временного интервала, который выбран заказчиком). По своей сути это тоже имиджевая реклама;