есть проще решение..без апи яндекса..
Fublin (14.04.2013 / 22:21)
есть проще решение..без апи яндекса..
Да там не сложно, всё нормально написано в документации. там только ключ вписал, пагинацию дописал и вывод сделал и всё..
Вот практически готовый скрипт поиска под джон для личного пользования, с возможностью добавления в браузер нового средства поиска (не всё отфильтровано и есть уязвимости, на рабочий сайт не ставить)
define('_IN_JOHNCMS', 1);
$rootpath = file_exists('login.php') ? '' : (file_exists('../login.php') ? '../' : (file_exists('../../login.php') ? '../../' : print('произошла ошибка')));
require_once $rootpath.'incfiles/core.php';
require_once $rootpath.'incfiles/head.php';
//include "template_header.html";
// обработка полей формы
$host = array_key_exists('host', $_REQUEST) ? $_REQUEST['host'] : 'johncms.com';
$query = array_key_exists('query', $_REQUEST) ? $_REQUEST['query'] : '';
$esc = htmlspecialchars($query);
$ehost = htmlspecialchars($host);
$search_tail = htmlspecialchars(" host:$ehost");
if ($_SERVER["REQUEST_METHOD"] =='GET') {
$page = array_key_exists('page', $_GET) ? $_GET['page'] : 0;
} else $page = 0;
$found = 0;
$pages = 10;
?>
<div class="phdr">Поиск по заданному сайту</div>
<div class="menu">
<form method='POST' accept-charset='utf-8'>
Где ищем:<br/>
<input type='text' name='host' id='host' value='<?php echo $host ?>'/><br/>
Что ищем:<br/>
<input type='text' name='query' id='query' value='<?php echo $query ?>'/><br/>
<input type="submit" value=" Искать "/>
</form>
</div>
<?php
if ($query) {
// XML запрос
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$esc $search_tail</query>
<groupings>
<groupby attr="" mode="flat" groups-on-page="10" 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('http://xmlsearch.yandex.ru/xmlsearch?user=логин_на_Яндекс&key=ваш_ключ', true, $context);
if ( $response ) {
$xmldoc = new SimpleXMLElement($response);
$error = $xmldoc->response->error;
$found_all = $xmldoc->response->found;
$found = $xmldoc->xpath("response/results/grouping/group/doc");
if ($error) {
echo "Ошибка: " . $error[0];
} else {
echo "<div class='list1'><p class='gmenu'>Результат поиска: страниц — <b>$found_all</b></p><br/>\n";
echo "<ol start='" . ($page * 10 + 1) . "'>\n";
foreach ($found as $item) {
echo "<li>";
echo "<a target='_blank' href='{$item->url}'>" . highlight_words($item->title) . "</a><br/>\n";
echo "<ul>";
if ($item->passages) {
foreach ($item->passages->passage as $passage) {
echo "<li style='font-size: 80%'>" . highlight_words($passage) . "</li><br/>\n";
}
}
echo "<span style='color: gray; font-size: 80%'>{$item->url}</span>";
echo "</ul></li><br/>\n";
}
echo "</ol>\n";
print_pager ($found_all, $query, $host, $page);
}
} else {
echo "Внутренняя ошибка сервера.\n";
}
}
echo "</div>";
//include "template_footer.html";
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, $host, $page = 0, $links_on_page = 10)
{
$query = htmlspecialchars($query);
$host = htmlspecialchars($host);
if ($page != 0)
echo "<a href='?page=" . ($page - 1) . "&query={$query}&host={$host}'>← предыдущая</a> ";
echo " страница № " . ($page + 1);
if ($found_links > ($page + 1) * $links_on_page)
echo " <a href='?page=" . ($page + 1) . "&query=$query&host={$host}'>следующая →</a> ";
}
require_once $rootpath.'incfiles/end.php';
Pillott, а зачем там Где ищем если выше есть сам адресс сайта ?
Fublin, вверху сайт по умолчанию, а "где ищем" можно и убрать, то просто чтобы можно было искать по любому нужному сайту.