|
Форум » Персонализация » Rainmeter » WebParser Primer (Перевод CMS статьи) |
WebParser Primer |
Этот небольшой учебник предназначен, чтобы пролить свет на использование плагина 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) 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 вы получите все недходимое для своего скина. |
xyz-CHAOS-zyx
Андрей
ID:223240
1 | 0
Приступая к работе. скачайте архив,в нем все что нужно для этого урока.INI-файл,несколько текстовых файлов которые будем использовать и некоторые графические изображения которые вы должны иметь. Распакуйте это в папку Skins,у вас должна получиться папка Skins \ IPLookup,которая будет иметь все необходимое. Перезагрузите Rainmeter. Скачать Не скачивает, выдаёт: 301 Moved Permanently. |
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 |
Как и предполагалось, не то и не туда прописываешь.
Замени на это Код [MeasureCurrent] Measure=Plugin Plugin=Plugins\WebParser.dll UpdateRate=1800 Url=http://xml.weather.com/weather/local/#Location#?cc=*&unit=#Unit#&dayf= RegExp="(?siU).*<locale>(.*)</locale>.*<ut>(.*)</ut>.*<ud>(.*)</ud>.*<us>(.*)</us>.*<up>(.*)</up>.*<ur>(.*)</ur>.*<loc id="(.*)">.*<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] StringIndex=8 |
| |||
| |||