Имя: Пароль:
1C
1С v8
уф Как прочитать страницу HTML
0 rikodroo
 
28.02.13
12:41
Привет!

Изучаю работу с HTML на управляемой форме. Решил сделать парсинг яндекс маркета, но тут возникло несколько вопросов.

Пишу так:


Соединение = Новый HTTPСоединение("m.market.yandex.ru");
Соединение.Получить("search.xml?cvredirect=1&text=" + СтрокаПоиска, ВремHTML);
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ВремHTML, КодировкаТекста.UTF8);
Текст = Текст.ПолучитьТекст();

Если передаю конкретный товар, типа СтрокаПоиска = "Apple+iPhone+5+16Gb"  , то тут происходит следующее - возвращается страница с одним товаром (который и передали в запросе), и значение Текст будет пустой строкой. Если тоже самое проделать в браузере, то видно, что при этом просто происходит редирект на страницу (http://m.market.yandex.ru/model.xml?modelid=8454852&hid=91491&text=Apple%20iPhone%205%2016Gb&srnum=195). На форме сделал реквизит строкового типа и элемент формы вида "Поле HTML документа" (собственно у Текст это оно и есть). Понятно, что в этом случае не отображается ничего. Однако, если написать так:

Текст = "http://m.market.yandex.ru/search.xml?cvredirect=1&text=" + СтрокаПоиска;

то страница нормально отображается, причем уже редиректнутая. Моя задача программно прочесть эту страницу, но обратиться через ПолучитьТекст() к элементу формы не получается (это вроде только для обычных форм). Подскажите как в этом случае прочитать страничку?
1 Asmody
 
28.02.13
12:48
у Я.Маркета есть API http://api.yandex.ru/market/content/doc/dg/concepts/about.xml
чем парсить страницы, используй его
2 rikodroo
 
28.02.13
13:13
(1) Спасибо. Действительно, я что-то не подумал (((
3 rikodroo
 
04.03.13
08:40
Что-то, для использования яндекс - апи пишут, что необходимо у неих рег.код получить - не высылают.. Ну да ладно, фиг с ним с апи.
сейчас вопросы такие:

1) Почему событие поля ХТМЛ документа ДокументСформирован() вызывается по два раза? Как это обходить и нужноли обходить?

2) на форме сделал две вкладки с полями ХТМЛ документа - Карточка товара (это куда загружаются странички вида http://m.market.yandex.ru/model.xml?modelid=8454852&hid=91491&text=Apple%20iPhone%205%2016Gb&srnum=190) и Характеристики товара (СтраницаХарактеристик = "http://m.market.yandex.ru/spec.xml?modelid=8454852"). Странички загружаются во вкладки одна за другой, но когда обработку запускаю первый раз, то в первую вкладку (Карточка товара) данные загружаются, а во вторую (с характеристиками), только после того, как на нее перейти. Далее, если начать работать с другим товаром, то на вкладку характеристик все загружается нормально (правда событие по два раза происходит зачем то?). Как сделать, чтобы и в первый раз страница характеристик нормально грузилась?

Вот код, который я использую:
&НаКлиенте
Процедура Поиск(Команда)  // кнопка, нажимаемая при выборе товара в справочнике
   
   СтраницаХарактеристик="";
   СтраницаРисунков="";
   
   Товар = Элементы.Товары.ТекущиеДанные.Наименование;
   Если СокрЛП(Товар) = "" Тогда
       Предупреждение("Не выбран товар");
       Возврат;
   КонецЕсли;    
   
   СтрокаПоиска = СтрЗаменить(СокрЛП(Товар), "/", "%2F");
   СтрокаПоиска = СтрЗаменить(СокрЛП(СтрокаПоиска), " ", "+");
   

   //Карточка товара
   Страница = "http://m.market.yandex.ru/search.xml?cvredirect=1&text=" + СтрокаПоиска;
       
КонецПроцедуры
 
&НаКлиенте
Процедура СтраницаДокументСформирован(Элемент)
   
   Адрес = Элемент.Документ.URLUnencoded;  // поле на форме со строкой УРЛ  
       
КонецПроцедуры

&НаКлиенте
Процедура Выбрать(Команда)
   
   Если СокрЛП(Адрес) = "" или Адрес = "about:blank" тогда
       Предупреждение("Страница загрузки не определена. Дальнейшая работа невозможна!");
       Возврат;    
   КонецЕсли;    
   
   Попытка
       мRegExp = Новый COMОбъект("VBScript.RegExp");
       мRegExp.IgnoreCase = Истина;
       мRegExp.Global = Истина;
   Исключение    
       Предупреждение("Не удалось создать объект ""VBScript.RegExp"". Дальнейшая работа невозможна!");
       Возврат;
   КонецПопытки;

       
   
   РегулярноеВыражение = "modelid=[0-9]*";
   
   мRegExp.Pattern = РегулярноеВыражение;
   Matches = мRegExp.Execute(Адрес);
   Вхождений = Matches.Count;
   Для Сч = 0 По Вхождений-1 Цикл
       ИдВМаркете = Matches.Item(Сч).value;
       ИдВМаркете = СтрЗаменить(СокрЛП(ИдВМаркете), "modelid=", "");
       Если ИдВМаркете <> "-1" И ИдВМаркете <> "" Тогда
           Прервать;
       КонецЕсли;
   КонецЦикла;


   Если ИдВМаркете = "-1" Или ИдВМаркете = Неопределено Тогда
       Предупреждение("По данной ссылке товар загрузить невозможно. Загрузка происходит из основной карточки товара.");
       Возврат;
   Иначе
           
   КонецЕсли;

   //Характеристики товаров
   СтраницаХарактеристик = "http://m.market.yandex.ru/spec.xml?modelid=" + ИдВМаркете;
   
   
   
КонецПроцедуры

&НаКлиенте
Процедура СтраницаХарактеристикДокументСформирован(Элемент)
   
   Если Элемент.Документ.URLUnencoded = "about:blank" Тогда
       Возврат;
   КонецЕсли;    
           
   Сообщить("оп"); // вызывается по два раза?
       
КонецПроцедуры