Телевизоры Samsung Smart Tv Телевизоры Samsung Smart Tv
Общение объединяет!
 Помощь      Поиск      Пользователи


 Страниц (1): [1]   

> Описание: Здесь будем изучать и обсуждать новую функцию динамического обновления информации в окне описания через специальный парсер.
FIOKOM Супермодератор
Отправлено: 04 Мая, 2015 - 12:18:01
Post Id



Super Member


Покинул форум
Сообщений всего: 1358
Дата рег-ции: Апр. 2013  
Репутация: 61



Сказал спасибо: 23
Поблагодарили: 1226


В виджете есть специальная функция "parser", с помощью которой можно скачивать содержимое любых страничек и текстовых документов и обрабатывать его по заданному алгоритму.

Сама по себе эта функция сложная , но если вы её освоите , то она вам много где может пригодится.
Нужны небольшие навыки программирования и умение работать с регулярными выражениями.

Простейшая работа c "parser" без регулярных выражений :
CODE:
<parser>адрес странички|метка начала поиска|метка конца поиска<parser>

Загружается вся страничка и вырезается кусок текста между метками .
Если в полученной строке вы хотите что-то заменить или вырезать , то делается такая конструкция :
CODE:
<parser>адрес странички|метка начала поиска|метка конца поиска|что хотите заменить|на что заменить<parser>

Замен может быть сколько угодно.

Пример с применением регулярных выражений:
CODE:

<description><![CDATA[<parser>https://pogoda.yandex.ru|@RegExp=<h1 class="title title_level_1">(.*?)</div><div class="current-weather__info-row current-weather__info-row_type_time">|1|другой город||@RegExp=<span([^>]*)>|<br>|@RegExp=<\/?(a\#/div\#/i\#/span)([^>]*)>||@RegExp=<br><br>|<br>|@RegExp=<h1([^>]*)>|<h2>|@RegExp=<\/h1><br>|</h2>|&thinsp;|</parser>]]></description>


CODE:
@RegExp=<h1 class="title title_level_1">(.*?)</div><div class="current-weather__info-row current-weather__info-row_type_time">
этот код вместо метки начала поиска делает поиск в строке с помощью регулярного выражения .

"@RegExp" - это виртуальный указатель использования регулярного выражения.
Для поиска результата используется функция match().
CODE:
Результат поиска = (Полученная с сайта строка).match(new RegExp("<h1 class=\"title title_level_1\">(.*?)</div><div class=\"current-weather__info-row current-weather__info-row_type_time\">","gm"));

"Результатом поиска" будет массив из всех найденных вариаентов.
Вместо метки конца поиска можно задать порядковый номер элемента массива или символ через который суммируются все элементы массива . Если ничего не задано , то все элементы просто суммируются.
Можно ещё через "," просто перечислить нужные элементы и указать через что их суммировать.
Допустим в результате поиска с помощью регулярного выражения мы получили массив Arr из 5-ти элементов и хотим получить результирующую строку по формуле :
CODE:
Результирующая строка =Arr[0]+"<b>"+Arr[1]+Arr[3]+"<p>"+Arr[4];

Чтобы так получилось метку конца поиска надо заменить на - "1:<b>,2,4:<p>,5"

"@RegExpE" - для поиска будет применяться функция exec();
Про различия функций можно прочитать например ЗДЕСЬ.

Фильтрация и замена в найденном то же может быть произведена с помощью регулярного выражения .
Пример замены всех тегов "<span ......... >" на "<br>";

Что заменяем - "@RegExp=<span([^>]*)>"
На что заменяем - "<br>"

CODE:
результат поиска=(результат поиска).replace(new RegExp("<span([^>]*)>" ,"gm"),"<br>");



Вариант с погодой с Яндекса может работать не у всех , поэтому вот ещё два примера:
CODE:

<channel>
<title><![CDATA[pogoda]]></title>
<description><![CDATA[<parser>http://www.gismeteo.ru|@RegExp=<div class="scity">([\s\S]*?)<a class="icon fcast"||@RegExp=\n||@RegExp=<span([^>]*)>|<br>|@RegExp=<\/?(a\#/div\#/i\#/dl\#/dt\#/dd\#/span)([^>]*)>?|</parser>]]></description>
<playlist_url>stop</playlist_url>
</channel>
<channel>
<title><![CDATA[pogoda]]></title>
<description><![CDATA[<parser>http://www.gismeteo.ru|<div class="scity">|<a class="icon fcast"|@RegExp=\n||@RegExp=<span([^>]*)>|<br>|@RegExp=<\/?(a\#/div\#/i\#/dl\#/dt\#/dd\#/span)([^>]*)>?|</parser>]]></description>
<playlist_url>stop</playlist_url>
</channel>


Вариант который выводит результат в виде текста, чтобы можно было увидеть результат работы парсера :
CODE:
<channel>
<title><![CDATA[pogoda]]></title>
<description><![CDATA[<parser>http://www.gismeteo.ru|@RegExp=<div class="scity">([\s\S]*?)<a class="icon fcast"|test|@RegExp=\n||@RegExp=<span([^>]*)>|<br>|@RegExp=<\/?(a\#/div\#/i\#/dl\#/dt\#/dd\#/span)([^>]*)>?|</parser>]]></description>
<playlist_url>stop</playlist_url>
</channel>


-----
D6530, F7000, H6410, KU6400
 
 Top
Сказали спасибо:
YuS (04.05.15) RazR (05.05.15) s2t2n (06.05.15) stav (01.09.15)
stav
Отправлено: 01 Сентября, 2015 - 21:55:35
Post Id



Newbie


Покинул форум
Сообщений всего: 2
Дата рег-ции: Нояб. 2012  
Репутация: 0



Сказал спасибо: 4
Поблагодарили: 0


Подскажите , почему не работает этот вариант с погодой от sinoptik.ua ???

CODE:
<channel>
<title><![CDATA[Pogoda Kharkiv sinoptik.ua]]></title>
<description><![CDATA[<parser>https://ua.sinoptik.ua|@RegExp=<div class="scity">|<a class="icon fcast"|@RegExp=\n||@RegExp=<span([^>]*)>|<br>|@RegExp=<\/?(a\#/div\#/i\#/dl\#/dt\#/dd\#/span)([^>]*)>?|</parser>]]></description>
<playlist_url>stop</playlist_url>
</channel>
 
 Top
Сказали спасибо:
FIOKOM Супермодератор
Отправлено: 01 Сентября, 2015 - 21:57:19
Post Id



Super Member


Покинул форум
Сообщений всего: 1358
Дата рег-ции: Апр. 2013  
Репутация: 61



Сказал спасибо: 23
Поблагодарили: 1226


stav
Потому что для каждого конкретного случая нужно составлять свой парсер.

-----
D6530, F7000, H6410, KU6400
 
 Top
Сказали спасибо:
stav (26.12.15)
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« nStreamLmod_v.3.x »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.032]     [ Gzipped ]