Получите информацию о значках с помощью веб-парсера Rainmeter

Я пытаюсь сделать скин для Rainmeter, который отображает оценку репутации и количество значков на странице профиля пользователя. Все отлично работает, если у пользователя есть хотя бы по одному значку из каждой категории (золотой, серебряный, бронзовый), но в моем случае, например, у меня еще нет золотых значков, а скин выглядит примерно так введите здесь описание изображения. Желаемый результат будет примерно таким: Stack Overflow 401 0 1 7. Мой фактический код выглядит следующим образом.

[Rainmeter]
Author=Dragos Sandu
Update=1000
DynamicWindowSize=1

[Metadata]
Name=Stack Overflow Stats
Author=Dragos Sandu
Version=28 March 2015 rev 1
License=Creative Commons Attribution-Non-Commercial-Share Alike 3.0
Information=Simple stats displaying for Stack Overflow

[Variables]
FontName=Trebuchet MS
FontSize=12

[MeasureAll]
Measure=Plugin
Plugin=Plugins\WebParser.dll
URL=http://stackoverflow.com/users/2691507/dragos-sandu
RegExp=(?siU)<span class="reputation-score">(.*)</span>.*<span class="badgecount">(.*)</span>.*<span class="badgecount">(.*)</span>.*<span class="badgecount">(.*)</span>

[MeasureReputation]
Measure=Plugin
Plugin=WebParser
URL=[MeasureAll]
StringIndex=1

[MeasureGold]
Measure=Plugin
Plugin=WebParser
URL=[MeasureAll]
StringIndex=2

[MeasureSilver]
Measure=Plugin
Plugin=WebParser
URL=[MeasureAll]
StringIndex=3

[MeasureBronze]
Measure=Plugin
Plugin=WebParser
URL=[MeasureAll]
StringIndex=4

[MeterText]
Meter=String
Prefix="Stack Overflow  "
FontFace=#FontName#
FontColor=#FFF
FontSize=#FontSize#
StringAlign=Left

[MeterReputation]
Meter=String
MeasureName=MeasureReputation
FontFace=#FontName#
FontColor=F0F0F0
FontSize=#FontSize#
StringAlign=Left
StringStyle=bold
X=120

[MeterGold]
Meter=String
MeasureName=MeasureGold
X=195
FontFace=#FontName#
FontColor=FFCC00
FontSize=#FontSize#
StringStyle=bold
StringAlign=Left

[MeterSilver]
Meter=String
MeasureName=MeasureSilver
X=235
FontFace=#FontName#
FontColor=C5C5C5
FontSize=#FontSize#
StringStyle=bold
StringAlign=Left

[MeterBronze]
Meter=String
MeasureName=MeasureBronze
X=285
FontFace=#FontName#
FontColor=CC9966
FontSize=#FontSize#
StringStyle=bold
StringAlign=Left

Я читал что-то об утверждениях Webparser Lookahead и пытался сделать работающее регулярное выражение, но безуспешно. Лучший результат, который у меня был, был (?siU)<span class="reputation-score">(.*)</span>(?(?=.*<span title="(.*) gold))(?(?=.*<span title="(.*) silver))(?(?=.*<span title="(.*) bronze)), но он не дал того, что я хочу. Каким должно быть правильное RegExp? Спасибо!


person Dragos Sandu    schedule 29.03.2015    source источник


Ответы (1)


Я отказался от этого маленького проекта, но сегодня я, наконец, добился успеха. Недавно Stackoverflow немного изменил свой внешний вид, а также свои классы и HTML. Итак, теперь я смог разобрать информацию о желании, используя метод Lookahead Assertions в Документы Rainmeter. Для всех, кому это интересно, я опубликую свой рабочий RegExp ниже. Кроме того, скоро будет доступна ссылка на весь скин Rainmeter.

RegExp=(?siU)<div class="reputation" title="reputation">(.*)<span.*(?(?=.*class="badge1-alternate").*<span class="badge1"></span><span class="badgecount">(.*)</span></span>).*(?(?=.*class="badge2-alternate").*<span class="badge2"></span><span class="badgecount">(.*)</span></span>).*(?(?=.*class="badge3-alternate").*<span class="badge3"></span><span class="badgecount">(.*)</span></span>)
person Dragos Sandu    schedule 19.04.2015