Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с yandex.xml, Не могу получить количество результатов 
:(
    Опции темы
DmitryTs
  Дата 22.5.2007, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.3.2007
Где: Moscow

Репутация: нет
Всего: нет



У меня вот такая проблема.. не могу получить количество результатов запроса..
Хочу сделать постраничный вывод.. но встал в ступор..
Видел в сети похожие скрипты но они на DOM под PHP5 а у меня 4.. smile 
я так понял что кол-во результатов лежит гдето здесь 
$path = xpath_eval($context,"/yandexsearch/response/found[@priority='all']");


Кто сталкивался помогите.. 
Вот собственно код скрипта:

Код

    
function makeSearchList(&$out,&$dd){
$docs = $dd->get_elements_by_tagname('doc');
if(count($docs) < 1){
$out = '<p>По вашему запросу ничего не найдено</p>';
return;
}

foreach($docs as $doc){
$out.= '<p><a href="'.getFirst($doc,'url').'">'.iconv('UTF-8', 'windows-1251', getFirst($doc,'title')).'</a><br />'.iconv('UTF-8', 'windows-1251', getFirst($doc,'passage')).'</p>';
}
}

 function getFirst($parent,$tag_name){
$e = $parent->get_elements_by_tagname($tag_name);
if(isset($e[0])) return $e[0]->get_content();
else return '';
}



 $search_string = isset($_POST['search_string']) ? $_POST['search_string'] : 'php'; //строка запроса
//номер страницы, в каждом ответе поумолчанию мне приходило по 10
//найденых страниц, здесь я так понял номер очередного десятка
$page_num = 4;
//адрес сайта на котором производим поиск
$host = 'xakep.ru';

// XML запрос
$request = '<?xml version="1.0" encoding="windows-1251"?>
<request>
 <query>'.htmlspecialchars($search_string.' << host=\'www.'.$host.'\'').'</query>
    <page>'.$page_num.'</page>
</request>';


// POST заголовок
$request_header = '
POST /xmlsearch/ HTTP/1.0
Host: xmlsearch.yandex.ru
Content-Type: text/plain
Content-length: '.strlen($request).'

';

$request = $request_header.$request;

//устанавливаем соединение
$fp = fsockopen('xmlsearch.yandex.ru',80,$errno,$errstr,30);
if($fp){
//отправляем запрос
fwrite($fp,$request);
//получаем ответ
$xml_respose = '';
while(!feof($fp)){
$xml_respose.= fgets($fp,128);
}
fclose($fp);
//отрезаем заголовок ответа, чтобы остался только XML
$xml_respose = substr($xml_respose,strpos($xml_respose,'<?xml'));
// Создаем DOM Document
$dd = domxml_open_mem($xml_respose);
}

}

//парсим запрос и делаем HTML
makeSearchList($out,$dd);

echo $out;    



Заранее благодарен.. smile 

Это сообщение отредактировал(а) DmitryTs - 24.5.2007, 10:36
PM MAIL   Вверх
PARROT
Дата 22.5.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



http://xml.yandex.ru/examples.xml?id=343506
http://ru2.php.net/manual/ru/ref.domxml.php
а число найденных документов описывается здесь http://help.yandex.ru/xml/?id=362990


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
DmitryTs
Дата 23.5.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.3.2007
Где: Moscow

Репутация: нет
Всего: нет



ДА я всё это излазил.. чел ты мне кинул ссылки на яндекс.. СМЫСЛ? там примеры на perl'e.. 

А по поводу справки. 

$root = $dom->document_element();
if ($attribute = $root->get_attribute_node('priority')) {
     echo $attribute->value(); 
}

и он выведет алл... а вот как вывести значение?? 




Это сообщение отредактировал(а) DmitryTs - 24.5.2007, 10:44
PM MAIL   Вверх
Golda
Дата 23.5.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 5
Всего: 42



схема такая 

Код

$context = xpath_new_context($dd);
$path = xpath_eval($context,"/yandexsearch/response/found[@priority='all']");
$foundObj = $path->nodeset[0];
$found = $foundObj->get_content();



--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
DmitryTs
Дата 24.5.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.3.2007
Где: Moscow

Репутация: нет
Всего: нет



Я уже разобрался..но всеравно спасибо за помощь.. 
Кстати почему яндекс выдаёт каждый раз разное кол-во результатов?? Правильное кол-во получается только-при запросе страниц которые больше страниц результатов или равная последней стр..пришлось схитрить..  smile 
результаты работы сдесь пока не проиндексировали ищет по сайту xakep.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.