М. Абрамзон - Яндекс для всех
(заповедник РР№РЅ-Геди) && (длиннохвостый скворец)
Примеры решений СЃ использованием Яндекс. XMLВозможности 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-8nn"; 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>nn" 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 "
сайт «$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, сумевшего РЅРµ только пережить последовавший РІ начале РЅРѕРІРѕРіРѕ века интернет-РєСЂРёР·РёСЃ, РЅРѕ Рё ставшего РѕРґРЅРёРј РёР· лидеров Рнтернета. Немаловажную роль РІ этом сыграло Рё использование РёРј РїРѕРёСЃРєРѕРІРѕР№ контекстной рекламы.