Twitter ВКонтакте RSS
Сегодня: Четверг, 28.03.2024, 19:50
  • Страница 1 из 1
  • 1
Форум » Персонализация » Rainmeter » WebParser Primer (Перевод CMS статьи)
WebParser Primer
wasek
Олег
ID:8
Регистрация:
17.09.2011
Страна:
Российская Федерация
Профиль на сайте
394 | 68
Четверг, 29.03.2012, 22:36
1
Этот небольшой учебник предназначен, чтобы пролить свет на использование плагина WebParser.dll. в Rainmeter он используется для получения информации с веб-сайтов и использовании этой инфы в ваших скинах.Многие из нас создавая скин RSS или погодник просто редактируют уже созданные скины и не понимают как это работает и не знают как создать этот страшный "RegExp", который является основой во всех скинах работающих с WebParser.

Это пособие не является полным мануалом по плагину .Вы узнаете как
анализировать веб-страницы в целом,научитесь создавать простые регулярные
выражения(RegExp).

Приступая к работе.
скачайте архив,в нем все что нужно для этого урока.INI-файл,несколько текстовых файлов которые будем использовать и некоторые графические изображения которые вы должны иметь. Распакуйте это в папку Skins,у вас должна получиться папка Skins \ IPLookup,которая будет иметь все необходимое.
Перезагрузите Rainmeter.
Скачать

RegExp
Давайте поговорим о ключевой части кода,"RegExp =" параметра.WebParser использует эти "Регулярные выражения",чтобы найти информацию,которую вы хотите получить и размещает её в StringIndex (как бы ячейка памяти в плагине).

Давайте разберем одну из этих таинственных "RegExp".Сначала попробуем
использовать простой шаблон.
Code
RegExp="(?siU)Search1(.*)Search2.*"

(?siU) -"варианты" команд для RegExp
Search1 -Текст который будет перед инфой которая вам нужна.
(.*) -Данные которые вы хотите загрузить в плагин для дальнейшего использования в скине.(Загрузить все между Search1 и Search2)
Search2 -Текст который будет после нужной инфы.
.* -Содержит данные с вебсайта,которые находятся между набором Search1(.*)Search2. Эти данные не будут загружены и использованны как StringIndex пока не заключим .* в скобки.

?siU -Что это?
"?s" Говорит RegExp игнорировать строки при выполнении поиска.Таким образом,если вы ищете предложение которое делиться в HTML коде на две строки все равно будет совпадать.

"i" Поиск будет осуществляться игнорируя маленькие и большие(заглавные) буквы.

"U" Означает- Загрузить только первый найденный результат на странице.

Как нам найти и загрузить нужную инфу на странице.
Есть два варианта.Можно использовать много месур с отдельными RegExp или можете использовать одну месуру и один RegExp - получить все между Search1 и Search2 использовав несколько StringIndex(предпочтительнее).

Важным моментом является то, что "(.*)" "загружает" данные в StringIndex а ".*" "Пропускает" (данные не нужны, искать дальше.)

Добавлено (29.03.2012, 22:28)
---------------------------------------------
Небольшой пример:
У вас есть веб-страница надо получить её "Название" из XTML кода . В RegExp вы должны использовать:
Code
RegExp="(?siU)<TITLE>(.*)</TITLE>"

Мы сказали RegExp-Надо найти тег "TITLE" и загрузить в StringIndex 1 все до "/TITLE",после чего остановиться.

Пример скина.
Для примера мы будем разбирать этот сайт. Получим наш IP и информацию о местоположении.
Вот информация, которую мы собираемся извлечь (выделено):

Так должен будет выглядеть скин который мы создадим:

Первое, что нужно сделать, это перейти на веб-страницу в браузере, щелкните правой кнопкой мыши, выберите "Просмотр исходного кода страницы", скопируйте все, вставьте в текстовый редактор и сохраните как текстовый файл а не HTML.Для удобства текст сохранен как "Webpage.txt" в архиве webparser_tutorial.

Первая инфа которую мы хотим получить это наш IP адрес.Откройте Webpage.txt,ищем в коде слова находящиеся перед нужными нам данными,то есть "IP Address to locate",раздел в котором это находиться выглядит так:
Code
<td>   
   <div align="left">   
   <form method="POST" action="IpLocator.htm?GetLocation">   
            <input type="hidden" name="cid" value="0">   
            <input type="hidden" name="c" value="0">   
            <input type="hidden" name="Template" value="iplocator.htm">   
            <h3>IP Address to locate:<input type="text" name="ipaddress" size="15" value="72.205.26.142"> <input type="submit" value="Submit">   
            </h3>

Надеюсь,не стоит упоминать что ваш IP адрес будет отличаться от того что в руководстве.
Давайте разберем месуру:
Code
[MeasureIPAddress]   
Measure=Plugin   
Plugin=Plugins\WebParser.dll   
UpdateRate=1800   
Url="http://www.geobytes.com/IpLocator.htm?GetLocation"   
RegExp="(?siU)<h2>IP Address to locate:<input type="text" name="ipaddress" size="15" value="(.*)">.*"   
StringIndex=1

Добавлено (29.03.2012, 22:36)
---------------------------------------------
UpdateRate=1800 частота обновления,если не в курсе смотрите раздел Using UpdateDivider/UpdateRate

Url="http://www.geobytes.com/IpLocator.htm?GetLocation" URL(адрес)веб сайта.Он может быть установлен в качестве переменной в [Variables],чтобы сделать его более доступным для редактирования.

Code
RegExp="(?siU)<h2>IP Address to locate:<input type="text" name="ipaddress" size="15" value="(.*)">"

Команда для поиска IP-адреса (см.выше).Найти на странице

Code
<h2>IP Address to locate:<input type="text" name="ipaddress" size="15" value="

-загрузить все до
Code
">[/code]
Другими словами заменяем 72.205.26.142 на (.*),таким образом мы загружаем 72.205.26.142 в ячейку памяти плагина WebParser.

Теперь нужно отобразить загруженные месурой данные в метре.
[code][MeterIPAddress]  
  MeasureName=MeasureIPAddress  
  Meter=STRING  
  X=2  
  Y=2  
  FontColor=0,0,0,255  
  FontSize=12  
  StringAlign=LEFT  
  FontFace=Tahoma  
  Antialias=1  
  Prefix="IP Address: "

Следующая нужная инфа "Код страны".Находим в коде
Code
<tr>  
  <td align="right">Country Code</td>  
  <td align="right"><input name="ro-no_bots_pls12" value="US" size="20" readonly></td>

Даем задание RegExp- Найти код страны и загрузить в следующий StringIndex
Code
RegExp="(?siU)<h2>IP Address to locate:<input type="text" name="ipaddress" size="15" value="(.*)">.*ro-no_bots_pls12" value="(.*)" size="20".*

То есть дописываем в RegExp
Code
.*ro-no_bots_pls12" value="(.*)" size="20".*

.*-пропустить все,пока не найдешь ro-no_bots_pls12" value=" и загрузить все до
" size="20" и загрузить в StringIndex 2.
Code
[MeasureCountryCode]  
  Measure=Plugin  
  Plugin=Plugins\WebParser.dll  
  Url=[MeasureIPAddress]  
  StringIndex=2

Параметр URL заменяем на имя мусуры где находиться RegExp и дописываем в скин еще один метер для отображения информации:
Code
[MeterCountryCode]  
  MeasureName=MeasureCountryCode  
  Meter=STRING  
  X=2  
  Y=17r  
  FontColor=0,0,0,255  
  FontSize=12  
  StringAlign=LEFT  
  FontFace=Tahoma  
  Antialias=1  
  Prefix="Country Code: "

Таким образом дописывая в RegExp данные и добавляя Measure/Meter вы получите все недходимое для своего скина.
buha
buha
ID:163116
Регистрация:
20.12.2014
Страна:
Российская Федерация
Профиль на сайте
19 | 0
Среда, 14.01.2015, 09:46
2
Как получить информацию с сайта требующего логин и пароль?
AZbor1
Александр
ID:6026
Регистрация:
28.03.2012
Страна:
Российская Федерация
Профиль на сайте
137 | 27
Среда, 14.01.2015, 14:20
3
Цитата buha ()
Как получить информацию с сайта требующего логин и пароль?
Увы, но никак.
Хотя может кто плагин сваял, я не в курсе. На сам Rainmeter авторизовываться не умеет.
А мне много не надо: власть над миром и чего-нибудь покушать.
xyz-CHAOS-zyx
Андрей
ID:223240
Регистрация:
26.04.2015
Страна:
Российская Федерация
Профиль на сайте
1 | 0
Воскресенье, 30.08.2015, 05:24
4
Цитата wasek ()
Приступая к работе. скачайте архив,в нем все что нужно для этого урока.INI-файл,несколько текстовых файлов которые будем использовать и некоторые графические изображения которые вы должны иметь. Распакуйте это в папку Skins,у вас должна получиться папка Skins \ IPLookup,которая будет иметь все необходимое.
Перезагрузите Rainmeter.
Скачать

Не скачивает, выдаёт: 301 Moved Permanently. sad
AnyMouSe
Alexander
ID:27286
Регистрация:
28.11.2012
Страна:
Российская Федерация
Профиль на сайте
9 | 0
Вторник, 29.09.2015, 20:26
5

Можно ли вывести только одно слово вместо всей строчки?
Callisto
Ксюша
ID:28895
Регистрация:
23.12.2012
Страна:
Российская Федерация
Профиль на сайте
93 | 19
Среда, 30.09.2015, 00:52
6
Можно.
Код
(?siU)<dnam>(.*),
AnyMouSe
Alexander
ID:27286
Регистрация:
28.11.2012
Страна:
Российская Федерация
Профиль на сайте
9 | 0
Среда, 30.09.2015, 16:50
7
Цитата Callisto ()
Можно. Код: (?siU)<dnam>(.*),
странно, но отображаются сторонние символы



На всякий случай
Код

[MeasureLocationCurrent]Measure=Plugin
Plugin=Plugins\WebParser.dll
Url=
[MeasureCurrent]RegExp="(?siU)<dnam>(.*),"
Callisto
Ксюша
ID:28895
Регистрация:
23.12.2012
Страна:
Российская Федерация
Профиль на сайте
93 | 19
Среда, 30.09.2015, 18:39
8
AnyMouSe, Каков вопрос, таков ответ. И тот кусок кода, который мне привел, ни о чем не говорит. Извини, но мои экстрасенсорные способности скромны и я не могу знать, что ты там парсишь и как. Приводи весь код и адрес страницы, с которой получаешь инфу.
AnyMouSe
Alexander
ID:27286
Регистрация:
28.11.2012
Страна:
Российская Федерация
Профиль на сайте
9 | 0
Среда, 30.09.2015, 19:27
9
Callisto
Инфа

Код

[MeasureCurrent]Measure=Plugin
Plugin=Plugins\WebParser.dll
UpdateRate=1800
Url=http://xml.weather.com/weather/local/#Location#?cc=*&unit=#Unit#&dayf=1
RegExp="(?siU).*<locale>(.*)</locale>.*<ut>(.*)</ut>.*<ud>(.*)</ud>.*<us>(.*)</us>.*<up>(.*)</up>.*<ur>(.*)</ur>.*<loc id="(.*)">.*<dnam>(.*)</dnam>.*<tm>(.*)</tm>.*<lat>(.*)</lat>.*<lon>(.*)</lon>.*<sunr>(.*)</sunr>.*<suns>(.*)</suns>.*<zone>(.*)</zone>.*<cc>.*<lsup>(.*)</lsup>.*<obst>(.*)</obst>.*<tmp>(.*)</tmp>.*<flik>(.*)</flik>.*<t>(.*)</t>.*<icon>(.*)</icon>.*<bar>.*<r>(.*)</r>.*<d>(.*)</d>.*<wind>.*<s>(.*)</s>.*<gust>(.*)</gust>.*<d>(.*)</d>.*<t>(.*)</t>.*<hmid>(.*)</hmid>.*<vis>(.*)</vis>.*<uv>.*<i>(.*)</i>.*<t>(.*)</t>.*<dewp>(.*)</dewp>.*<moon>.*<icon>(.*)</icon>.*<t>(.*)</t>.*"

[MeasureLocationCurrent]Measure=Plugin
Plugin=Plugins\WebParser.dll
Url=
[MeasureCurrent]RegExp="(?siU)<dnam>(.*),"

[MeterLocationCurrent]MeasureName=MeasureLocationCurrent
Meter=String
X=80
Y=110
MeterStyle=TXTLTL
Callisto
Ксюша
ID:28895
Регистрация:
23.12.2012
Страна:
Российская Федерация
Профиль на сайте
93 | 19
Четверг, 01.10.2015, 22:41
10
Как и предполагалось, не то и не туда прописываешь.
Замени на это
Форум » Персонализация » Rainmeter » WebParser Primer (Перевод CMS статьи)
  • Страница 1 из 1
  • 1
Поиск: