Сегодня: 23:11:2024 Доброго вам дня!

I live ExBB and CMS Limbo!  I live ExBB and CMS Limbo!
Логин :
Пароль :
Регистрация?  Забыли пароль? 
 


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

> Без описания

  Супермодератор
Отправлено: 23 марта 2017 — 22:26
ответить цитировать Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Для эффективного использования плагина WebParser в целях получения повторяющихся данных из RSS-ленты или сайта погоды, следует использовать параметр StringIndex2 .

В мануале про этот параметр можно прочитать следующее:
StringIndex2
Этот параметр используется для RegExp параметра в Мере, использующую данные из другой Меры WebParser (т. е. URL-адрес указывает на родительскую меру). В этом случае StringIndex определяет индекс результата выражения родительской меры, а StringIndex2 определяет индекс RegExp выражения (т. е. определяет строку, возвращаемую меру).

Для примера давайте получим некоторые данные со страницы https://docs.rainmeter.net/

Исходный код этой страницы на момент написания данной статьи выглядел так:
Спойлер (Показать)

Код скина, который будем разбирать, выглядит так:
Спойлер (Показать)

В результате выполнения этого кода получаем такой результат.



Давайте теперь пошагово разберём, что делает этот код.

Во первых определены две переменные, причем одна из них используется в RegExp
PHP:
[Variables]
Url=https://docs.rainmeter.net
Item=.*<h2>(.*)</h2>

Затем в коде используется плагин WebParser для получения информации с сайта.

PHP:
[MeasureSite]
Measure=Plugin
Plugin=WebParser
Url=#Url#
RegExp="(?siU)<title>(.*)</title>#Item##Item##Item#.*"


В формировании параметра RegExp использована заранее объявленная переменная Item. Если эту переменную заменить её значением, то в итоге видим 4 точки захвата кода.
 Цитата:
RegExp="(?siU)<title>(.*)</title>.*<h2>(.*)</h2>.*<h2>(.*)</h2>.*<h2>(.*)</h2>.*"

Обратите внимание на одну особенность. Вместо того, что бы сразу разобрать весь сайт на многочисленные StringIndexes, мы только в первом StringIndexes сразу получаем результат, а вот в StringIndexes 2, 3 и 4 захватываем куски сырого кода между тегами <h2> и </h2>.
Вот этими кусками сырого кода мы в дальнейшем и займёмся.

PHP:
[MeasureItem1Title]
Measure=Plugin
Plugin=WebParser
Url=[MeasureSite]
DecodeCharacterReference = 1
RegExp="(?siU)">(.*)</a>"
StringIndex=2
StringIndex2=1

Мы видим, что снова используется плагин WebParser, но в качестве параметра Url используется указание на другую месуру MeasureSite
В этом случае параметр StringIndex определяет индекс куска кода, который следует взять из MeasureSite и уже к этому куску кода применяется свой RegExp
В результате этого может быть захвачено снова несколько элементов и уже на эти элементы ссылается другой параметр - StringIndex2

Применительно к конкретному примеру из MeasureSite будет взят кусок кода с индексом 2 (StringIndex=2) и после поиска будет выбран элемент с индексом 1 (StringIndex2=1).

Следующая месура работает аналогично, но имеет свой RegExp
PHP:
[MeasureItem1Link]
Measure=Plugin
Plugin=WebParser
Url=[MeasureSite]
RegExp="(?siU)<a (.*)">"
StringIndex=2
StringIndex2=1
Substitute='href="':"#Url#"

Аналогично повторим те же операции, но для StringIndex=3 и StringIndex=4

В общем можно дать совет использовать плагин WebParser именно по такой схеме.
Первая, главная месура делает запрос к сайту и захватывает максимально необходимое количество даных (зачастую это может быть вся страница сайта целиком). А затем создаются вспомогательные месуры, которые ссылаются на главную и разбирают её данные. Этим достигается минимум запросов к интернет ресурсу, т.к. при слишком частых запросах сервер может принять работу WebParser за атаку на ресурс. Так же использование подобной схемы позволяет обойти ограничение в 99 StringIndex для одной месуры.
 
 Top

  Супермодератор
Отправлено: 21 ноября 2024 — 06:43
ответить цитировать Post Id


 Покинул wasek
Новичёк
Сообщений: 2
Регистрация: 04.2016

StringIndex=2
StringIndex2=1

Никогда так не делал, не вижу смысла . Как по мне , так проще главной мессурой захватить сразу определенный кусок кода сайта и его разобрать а не весь код целиком .
1. Проще со скином работать
2. Если на сайте произойдет изменение кода , "ляжет" не весь скин а только та часть где были изменения.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Rainmeter - изменяем интерфейс рабочего стола »


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


> Создание ответа в тему "WebParser: использование StringIndex2"
Имя: Гость   Вы зарегистрированы?
Помощь по ExBBCodes
С помощью кодов можно очень легко применять различные виды стилей к выделенному тексту.
Смайлики

smilie smilie smilie smilie smilie
smilie smilie smilie smilie smilie
smilie smilie smilie smilie smilie

все смайлики
Опции сообщения Вы хотите разрешить смайлики в этом сообщении?
   

> Темы, похожие на тему "WebParser: использование StringIndex2"
Темы Форум Информация о теме Обновление
Релизы ExBB - ссылки и обсуждение
Публикация ссылок на неофициальные релизы ExBB
ExBB Community Ответов: 116
Автор темы: Yamaliya
27 мая 2018 — 05:11
Автор: Yamaliya
Доработка модуля регистрации на форуме
Ввод подтверждения принятия лицензионного соглашения
ExBB Community Ответов: 0
Автор темы: технарь
9 декабря 2015 — 00:08
Автор: технарь
Пожелания развития Limbo cms
Чего не хватает в Limbo cms чтобы она была пригодна к использованию?
Limbo CMS Ответов: 20
Автор темы: Asmod
2 ноября 2012 — 09:37
Автор: технарь
 


Powered by ExBB v1.1.180311