|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
проблема такая: надо организовать поиск по указанному сайту при помощи яндекс-машины.
не могу никак решить что же лучше использовать JavaScript или ASP
сделала код на JavaScript - получаю ответ req.responseXML (где req- отправленный запрос) и req.responseText, причем req.responseText нормально отображается в текстовом окне. а вот как req.responseXML сохранить куда-нибудь и вытащить из него теги не могу понять...
если же делать на асп возникает проблема со статусом req.readyState. сервер получает ответ req.readyState=1 (загрузка) и отправляет это браузеру. и все. тут бы как нибудь сделать, чтоб страничка перегенерировалась каждый раз при смене статуса. и это тоже не могу найти как сделать.
подскажите хотябы что лучше использовать и куда копать, а то и там и там тупик для меня...
|
|
|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
в общем в продолжение темы.
я решила делать на асп, чтоб файл сохранялся на сервер например в 1.xml а потом показывался при помощи таблицы стилей. но тут появилаь другая беда:
MSXML2.ServerXMLHTTP.3.0 не работает через прокси-сервер,
а WinHttp.WinHttpRequest.5.1 видимо кодирует все в 1251, а так как с яндекса приходит ответ в utf-8 получается набор символов. да еще и не имеет такого объекта типа responseXML, а только responseText и соответственно у него нет метода save().
ну а JavaScript естественно сохранять в файл на сервере не может и не хочет...
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
MXSML умеет работать через прокси
http://relib.com/blogs/smalig/archive/2005/02/04/170.aspx
Для работы с XML не обязательно сохранять его на диск, можно выполнять XSLT преобразования с документом в памяти.
В моен понимании тебе надо создать объект MSXML2.ServerXMLHTTP, сделать запрос на сервер, получить ответ, загрузить локальный XSLT файл, выполнить преобразование выводя результаты в браузер.
|
|
|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
Спасибо,
в общем теперь я могу получить responseXML.
у нас сайт организован таким образом, что при помощи асп мы получаем даные , формируем из них xml-модель, а потом при помощи xslt отображаем.
так вот я хотела прикрепить полученный responseXML в модель, ну там например сделать новый нод и к нему прицепить responseXML как вложенный нод
только вот никак не могу найти метод, который бы мог это сделать.
importNode не работает, createElement тоже не позволяет такого и getElementByTagName и подобные ему тоже не работают.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Попробуй создать копию нужного узла методом cloneNode, после чего добавь его в другой документ методом appendChild.
|
|
|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
Ура! чудо почти свершилось. теперь у меня поиск работает, только вот возникла проблема с кодировками. я получаю первую страницу и хочу сделать переход на др страницу, но для этого мне надо переслать еще раз текст запроса и номер страницы. сейчас у меня выглядит так:
.........
По запросу "" найдено:
Строгих соответствий:
Всего:
|<
ну и вот в этой самой последней ссылке param получается равен какой-то белеберде и соответственно новый запрос формируется также коряво.
вот такой код асп делает поиск
<%@ Language=JScript Codepage="1251" %>
<%
var param = getParam('param', '1');
var host = 'XXX.ru';
var url = 'http://xmlsearch.yandex.ru/xmlsearch?'+param;
var page = getParam('p', '0');
var req = new ActiveXObject("MSXML2.ServerXMLHTTP.3.0");
var Xxml = ('"'+param+'" host="'+host+'"'+page+''+param+'0');
req.open("POST", "http://xmlsearch.yandex.ru/xmlsearch?"+param, false);
req.setTimeouts(30000, 30000, 30000, 30000);
req.send(Xxml);
var strHTML = req.responseText;
strXML = req.responseXML;
var xml_doc = new ActiveXObject("Microsoft.XMLDOM");
xml_doc.async = false;
xml_doc.load(strXML);
var xml = xmlDOM;
var parentNode = xmlDOM.documentElement;
var curr_node = strXML.lastChild;
parentNode.appendChild(curr_node);
browseXML('2');
%>
почему именно ссылка передает такие корявости, ведь до этого тотже элемент выдается правильно По запросу "" найдено:
и как быть?
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Похоже на несовпадение кодировок. У тебя xml документ использует windows-1251, а запрос к Яндексу выполняется в UTF-8. Я бы попробовал выполнять перекодирование с помощью ADODB.Stream. Создаем Stream объект, ставим свойство Charset в windows-1251, пишем unicode текст методом WriteText, перематываем на начало и читаем результат методом ReadText. Вроде так. Не проверял в деле, но должно работать.
|
|
|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
в общем случилось странное: проблемы с кодировкой как-то сами собой исчезли, пока я яву скрипт дописывала. и теперь все нормально.
но тут возникла новая проблема: все идеально работает локально и на одном хостинге, а вот на другом хостинге (я тестировала на двух сайтах один и тот же код) при попытке искать русский текст выпадает ошибка 500. причем там же ищет английские буквы и цифры без проблем. на другом хостинге такого нет.
что может быть не то? я даже не могу представить в каком направлении искать ошибку. похоже что проблемы с хостингом, но вот какие?...
|
|
| |