X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Допилить код вывода релевантных страниц на основе Яндекс XML
Xstroy
Xstroy
Topic Starter сообщение 12.12.2013, 11:24; Ответить: Xstroy
Сообщение #1


Участник
***

Группа: User
Сообщений: 112
Регистрация: 13.1.2010
Поблагодарили: 21 раз
Репутация:   2  


Собственно суть вопроса в следующем:
Есть желание прикрутить к сайту вывод релевантных страниц сайта на основе ранжирования в поиске Яндекса по сайту.
Начало реализации положено smile.gif, но допилить код без достаточных знаний не удаётся.

Исходник нашёл в сети (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 раза smile.gif
Не смотрим на ошибки кодировки и т.д. Жмакаем кнопку поиск до ответа.


Нужно:
1) Привести в соответствие кодировку. У сайта кодировка windows-1251
2) Убрать лишнее из кода. Постраничный вывод выпилил, но какие-то переменные остались...
3) Настроить, чтобы работало с пол-пинка.

4) Объяснить, как реализовать замену отправки запроса из формы на подстановку фразы ( в идеале бы поисковый запрос из реферера, который скоро отменят) при загрузке любой страницы.

Сразу оговорюсь: базы нет, поэтому варианты с ней не обсуждаются.


--------------------
Xstroy Полезный сервис: Регионы Гугл
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Увеличение посещаемости сайта (яндекс, гугл, соц сети) - реальные люди
13 SANR 757 Сегодня, 17:14
автор: anchous
Открытая тема (нет новых ответов) Мобильный «Яндекс.Диск» стал безлимитным
7 MissContent 979 Сегодня, 16:01
автор: RICHHost
Открытая тема (нет новых ответов) Как пройти модерацию в Яндекс Директ, тематика Майнеры криптовалюты
3 rownong27 1073 Сегодня, 15:59
автор: RICHHost
Открытая тема (нет новых ответов) Стоит ли подавать платную заявку в Яндекс Каталог для регионального издания?
11 DVORYAN 1605 Вчера, 17:48
автор: RICHHost
Открытая тема (нет новых ответов) Настройка и ведение ваших кампаний по контекстной рекламе Яндекс Директ и Гугл Эдвордс
2 AvramLincoln 472 Вчера, 13:18
автор: AvramLincoln


 



RSS Текстовая версия Сейчас: 12.12.2017, 18:07
Дизайн