Собственно суть вопроса в следующем:Есть желание прикрутить к сайту вывод релевантных страниц сайта на основе ранжирования в поиске Яндекса по сайту.
Начало реализации положено
, но допилить код без достаточных знаний не удаётся.
Исходник нашёл в сети (free-ishodniki.ru/src-php/ya-xml.php), чуть попытал его методом научного тыка, кое-что убрав:
<form method='POST' accept-charset='utf-8'>
<input type='text' name='query' id='query' value='<?php print iconv('UTF-8','cp1251',$_REQUEST['query']); ?>' style='width:80%;margin-left:5%'/>
<input type="hidden" name="page" value=0 />
<input type="hidden" name="host" value=''/>
<input type="submit" value="Искать"/>
</form>
<?php
function ya_srch($query,$host)
{
$page = $_REQUEST['page'];
if (!$page) $page = 0;
$host = 'www.drevmast.ru';
$ehost = htmlspecialchars($host);
$search_tail = htmlspecialchars(" host:$ehost");
if (!$host) $host = '';
$found = 0;
$out = ''; //30
$esc = htmlspecialchars($query);
if($host=='')
{
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$esc</query>
<page>$page</page>
</request>
DOC;
}
else
{
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$esc $search_tail</query>
<groupings>
<groupby attr="" mode="flat" groups-on-page="5" docs-in-group="1" />
</groupings>
<page>$page</page>
</request>
DOC;
}
$context = stream_context_create(array('http' => array('method'=>"POST",'header'=>"Content-type: application/xml\r\n"
."Content-length: " .strlen($doc),'content'=>$doc)));
$response = file_get_contents('ссылка-из-Яндекс-XML', true, $context);
if ($response)
{
$xmldoc = new SimpleXMLElement($response);
$error = $xmldoc->response->error;
$found_all = $xmldoc->response->results->grouping->found;
$found = $xmldoc->xpath("response/results/grouping/group/doc");
if ($error) {$out = "Ошибка: " . $error[0];}
else
{
$from=$page * 5 + 1; if(($found_all-$from)>9) $to=$page * 5 + 5;else $to=$found_all;
$out = "<h4 align=center>По запросу <font color=green>" .iconv('UTF-8','cp1251',$query) ."</font> <font color=red>Я</font>ндекс нашёл ";
if($host=='') $out = $out ." в <font color=green>интернете ";
else $out = $out ." на сайте: <font color=green>" .$host;
$out = $out ."</font> <font color=red>" .$found_all ."</font> страниц<br>показаны результаы с <font color=red>"
.$from ."</font> по <font color=red>" .$to ."</font></h4>\n";
$out = $out ."<ol start='" .($page * 10 + 1) ."'>\n";
foreach ($found as $item)
{
$rez1 = iconv('UTF-8','cp1251',highlight_words($item->title)); // moj kod
$out = $out . "<li><a href='" .$item->url ."'>" .$rez1 ."</a><br>\n";
if ($item->passages)
{
foreach ($item->passages->passage as $passage)
{
$rez2 = iconv('UTF-8','cp1251',highlight_words($passage)); // moj kod
if($host=='')
$out = $out . $rez2 ."<br>\n";
else
$out = $out . $rez2 ."<br></li>\n";
}
}
if($host=='')
$out = $out . "<font color=red>» </font><a href='?page=0" ."&query=" .$query ."&host=" .$item->domain
."'><b>ещё с сайта:</b></a> <font color=green>" .$item->domain ."</font></li>\n";
}
$out = $out . "</ol>\n";
$out = $out . print_pager ($found_all,$query,$page,$host);
}
}
else {$out = "Внутренняя ошибка сервера.\n";}
return $out;
}
function highlight_words($node)
{
$stripped = preg_replace('/<\/?(title|passage)[^>]*>/','',$node->asXML());
return str_replace('</hlword>','</strong>',preg_replace('/<hlword[^>]*>/','<strong>',$stripped));
}
function print_pager($found_links,$query,$page,$host)
{
$links_on_page = 5;
$query = urlencode($query);
}
if($_REQUEST['query'])
echo ya_srch($_REQUEST['query'],$_REQUEST['host']);
?>
Сейчас для настройки скрипт живёт по адресу
http://www.drevmast.ru/remont.phpВ данный момент при вводе запроса ответ выводится со 2-5 раза
Не смотрим на ошибки кодировки и т.д.
Жмакаем кнопку поиск до ответа.
Нужно:
1)
Привести в соответствие кодировку. У сайта кодировка windows-1251
2)
Убрать лишнее из кода. Постраничный вывод выпилил, но какие-то переменные остались...
3)
Настроить, чтобы работало с пол-пинка.
4)
Объяснить, как реализовать замену отправки запроса из формы на подстановку фразы ( в идеале бы поисковый запрос из реферера, который скоро отменят) при загрузке любой страницы.
Сразу оговорюсь: базы нет, поэтому варианты с ней не обсуждаются.
Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
|