It is currently March 29th, 2024, 1:57 pm

Web-parsing with "condition"

Get help with creating, editing & fixing problems with skins
Bundi
Posts: 20
Joined: October 11th, 2016, 6:46 am

Web-parsing with "condition"

Post by Bundi »

Hi,

I am trying make a skin for checking bus departures from a specific bus stop. There is an open API generated page from where I am trying to get the needed information. The trick for me is to filter out the other stops that I am not interested in.
The URL is this:

http://www.labs.skanetrafiken.se/v2.2/stationresults.asp?selPointFrKey=80118

The stop I am interested in is seen in the code like this <StopPoint>G</StopPoint>

And each block for each departing bus looks like this:

Code: Select all

<Line>
<Name>5</Name>
<No>5</No>
<JourneyDateTime>2017-01-27T13:52:00</JourneyDateTime>
<IsTimingPoint>false</IsTimingPoint>
<StopPoint>G</StopPoint>
<LineTypeId>8</LineTypeId>
<LineTypeName>Stadsbuss</LineTypeName>
<Towards>Västra Hamnen via Centralen</Towards>
<RealTime>
<RealTimeInfo>
<DepTimeDeviation>1</DepTimeDeviation>
<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect>
</RealTimeInfo>
</RealTime>
<TrainNo>0</TrainNo>
<Deviations/>
<RunNo>160</RunNo>
</Line>
The trick for me is that I need to identify that it is the right "StopPoint" which is "G", but I want to parse out the time of course from <JourneyDateTime>2017-01-27T13:52:00</JourneyDateTime> which precedes the StopPoint in the code.
And it would also be good to be able to grab the name / nr of the bus from <Name>5</Name>

I suppose one would need to use some sort of lookahead or reveresed lookahead maybe?

Thankful for suggestions on how to do this webparsing.

Best,
Bundi
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5384
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Web-parsing with "condition"

Post by eclectic-tech »

Due to the amount of info and the limit of 99 indexes in WeParser, I would use StringIndex2 to get what you want.

The main WebParser measure will get up to 99 line schedules.

Then child measures will extract the 12 bits of info in each. I have only coded enough child measures for the first 10 line schedules (120 measures); you can copy and paste those to expand the measure used to the 99 maximum.
- Look at my code section naming and just rename the measures using the scheme I used, point each to the next StringIndex, and change the 5th measure in each, to show/hide the corresponding group 'Stop#' of meters.

If you expand the measures, you will need to expand the meters to match. Again pay attention to the section naming, it allows the use of MeterStyles.

I created a 'StopLetter' variable and tested with several letters. Result with 'StopLetter=g' (case insensitive):
bus.png
Let us know if you have any questions?

Code: Select all

[Rainmeter]
Update=1000
AccurateText=1
DynamicWindowSize=1
Group=#RootConfig#
; *** Background options
; Background=
BackgroundMode=2
BackgroundMargins=4,4,4,4
SolidColor=220,220,220
; SolidColor2=
; GradientAngle=
; BevelType=

; ========= Metadata ==========
[Metadata]
Name=
Author=
Information=
License=Creative Commons Share-Alike NC 4
Version=

; ========= Variables ==========
[Variables]
; 'StopLetter' examples: g  h  i  d
StopLetter=h
Get=(?(?=<Line>)<Line>(.*)</Line>)

; ========= Measures ==========
[MeasureWebParser]
Measure=Plugin
Plugin=WebParser
URL=http://www.labs.skanetrafiken.se/v2.2/stationresults.asp?selPointFrKey=80118
;file://#CurrentPath#stationresults.asp.xml
RegExp=(?siU).*<Lines><Line>(.*)</Line>#Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get##Get#
; Substitute=
; StringIndex=
; UpdateRate=600
; Debug=
; Debug2File=
; Download=
; DownloadFile=
; DecodeCharacterReference=
; ForceReload=
; CodePage=
; ErrorString=
; ProxyServer=
FinishAction=[!UpdateMeter *][!Redraw]
; OnConnectErrorAction=
; OnRegExpErrorAction=
; OnDownloadErrorAction

;Station1

;<Name>6</Name>
[MeasureWebParserChild1-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild1-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild1-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild1-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild1-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=1
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop1]
IfNotMatchAction=[!HideMeterGroup Stop1]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild1-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild1-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild1-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild1-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild1-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild1-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild1-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=1
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station2

;<Name>6</Name>
[MeasureWebParserChild2-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild2-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild2-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild2-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild2-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=2
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop2]
IfNotMatchAction=[!HideMeterGroup Stop2]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild2-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild2-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild2-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild2-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild2-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild2-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild2-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=2
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station3

;<Name>6</Name>
[MeasureWebParserChild3-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild3-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild3-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild3-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild3-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=3
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop3]
IfNotMatchAction=[!HideMeterGroup Stop3]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild3-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild3-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild3-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild3-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild3-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild3-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild3-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=3
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station4

;<Name>6</Name>
[MeasureWebParserChild4-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild4-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild4-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild4-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild4-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=4
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop4]
IfNotMatchAction=[!HideMeterGroup Stop4]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild4-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild4-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild4-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild4-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild4-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild4-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild4-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=4
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station5

;<Name>6</Name>
[MeasureWebParserChild5-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild5-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild5-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild5-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild5-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=5
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop5]
IfNotMatchAction=[!HideMeterGroup Stop5]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild5-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild5-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild5-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild5-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild5-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild5-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild5-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=5
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station6

;<Name>6</Name>
[MeasureWebParserChild6-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild6-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild6-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild6-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild6-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=6
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop6]
IfNotMatchAction=[!HideMeterGroup Stop6]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild6-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild6-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild6-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild6-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild6-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild6-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild6-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=6
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station7

;<Name>6</Name>
[MeasureWebParserChild7-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild7-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild7-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild7-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild7-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=7
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop7]
IfNotMatchAction=[!HideMeterGroup Stop7]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild7-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild7-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild7-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild7-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild7-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild7-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild7-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=7
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station8

;<Name>6</Name>
[MeasureWebParserChild8-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild8-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild8-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild8-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild8-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=8
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop8]
IfNotMatchAction=[!HideMeterGroup Stop8]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild8-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild8-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild8-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild8-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild8-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild8-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild8-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=8
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station9

;<Name>6</Name>
[MeasureWebParserChild9-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild9-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild9-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild9-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild9-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=9
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop9]
IfNotMatchAction=[!HideMeterGroup Stop9]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild9-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild9-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild9-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild9-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild9-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild9-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild9-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=9
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

;Station10

;<Name>6</Name>
[MeasureWebParserChild10-1]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Name>(.*)</Name>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<No>6</No>
[MeasureWebParserChild10-2]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<No>(.*)</No>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<JourneyDateTime>2017-01-27T15:24:00</JourneyDateTime>
[MeasureWebParserChild10-3]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<JourneyDateTime>(.*)</JourneyDateTime>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<IsTimingPoint>false</IsTimingPoint>
[MeasureWebParserChild10-4]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<IsTimingPoint>(.*)</IsTimingPoint>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<StopPoint>D</StopPoint>
[MeasureWebParserChild10-5]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<StopPoint>(.*)</StopPoint>
StringIndex=10
StringIndex2=1
IfMatch=(?i)#StopLetter#
IfMatchAction=[!ShowMeterGroup Stop10]
IfNotMatchAction=[!HideMeterGroup Stop10]
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeId>8</LineTypeId>
[MeasureWebParserChild10-6]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeId>(.*)</LineTypeId>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<LineTypeName>Stadsbuss</LineTypeName>
[MeasureWebParserChild10-7]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<LineTypeName>(.*)</LineTypeName>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<Towards>Videdal via Triangeln</Towards>
[MeasureWebParserChild10-8]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<Towards>(.*)</Towards>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RealTime><RealTimeInfo><DepTimeDeviation>3</DepTimeDeviation>
[MeasureWebParserChild10-9]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepTimeDeviation>(.*)</DepTimeDeviation>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<DepDeviationAffect>NON_CRITICAL</DepDeviationAffect></RealTimeInfo></RealTime>
[MeasureWebParserChild10-10]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<DepDeviationAffect>(.*)</DepDeviationAffect>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<TrainNo>0</TrainNo><Deviations />
[MeasureWebParserChild10-11]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<TrainNo>(.*)</TrainNo><Deviations />
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;
;<RunNo>177</RunNo>
[MeasureWebParserChild10-12]
Measure=Plugin
Plugin=WebParser
Url=[MeasureWebParser]
RegExp=(?siU)<RunNo>(.*)</RunNo>
StringIndex=10
StringIndex2=1
; RegExpSubstitute=1
; Substitute=
; DecodeCharacterReference=
;

; Repeat the 12 measures for each possible stop (up to 99 ~ WebParser Limit)
; The 5th measure in each stop group tests for 'g' and if not found, hides the group of meters for that stop

; ========= Meter Styles ==========
[LineStyle]
MeasureName=MeasureWebParserChild#CurrentSection#
X=4
Y=R
SolidColor=0,0,0,1

; You must name the meter sections using the measure name scheme to allow for this meterstyle to work; [1-1] [1-2] ... [99-1] [99-2] etc.

; ========= Meters ==========

[1-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop1

[1-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop1

[1-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop1

[1-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop1

[1-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop1

[1-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop1

[1-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop1

[1-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop1

[1-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop1

[1-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop1

[1-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop1

[1-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop1

[Spacer1]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop1

[2-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop2

[2-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop2

[2-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop2

[2-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop2

[2-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop2

[2-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop2

[2-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop2

[2-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop2

[2-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop2

[2-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop2

[2-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop2

[2-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop2

[Spacer2]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop2

[3-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop3

[3-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop3

[3-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop3

[3-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop3

[3-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop3

[3-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop3

[3-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop3

[3-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop3

[3-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop3

[3-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop3

[3-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop3

[3-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop3

[Spacer3]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop3

[4-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop4

[4-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop4

[4-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop4

[4-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop4

[4-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop4

[4-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop4

[4-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop4

[4-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop4

[4-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop4

[4-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop4

[4-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop4

[4-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop4

[Spacer4]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop4

[5-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop5

[5-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop5

[5-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop5

[5-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop5

[5-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop5

[5-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop5

[5-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop5

[5-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop5

[5-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop5

[5-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop5

[5-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop5

[5-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop5

[Spacer5]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop5

[6-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop6

[6-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop6

[6-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop6

[6-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop6

[6-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop6

[6-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop6

[6-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop6

[6-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop6

[6-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop6

[6-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop6

[6-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop6

[6-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop6

[Spacer6]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop6

[7-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop7

[7-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop7

[7-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop7

[7-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop7

[7-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop7

[7-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop7

[7-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop7

[7-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop7

[7-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop7

[7-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop7

[7-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop7

[7-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop7

[Spacer7]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop7

[8-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop8

[8-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop8

[8-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop8

[8-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop8

[8-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop8

[8-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop8

[8-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop8

[8-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop8

[8-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop8

[8-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop8

[8-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop8

[8-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop8

[Spacer8]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop8

[9-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop9

[9-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop9

[9-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop9

[9-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop9

[9-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop9

[9-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop9

[9-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop9

[9-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop9

[9-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop9

[9-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop9

[9-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop9

[9-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop9

[Spacer9]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop9

[10-1]
Meter=String
MeterStyle=LineStyle
PreFix="Name: "
Group=Stop10

[10-2]
Meter=String
MeterStyle=LineStyle
PreFix="No: "
Group=Stop10

[10-3]
Meter=String
MeterStyle=LineStyle
PreFix="JourneyDateTime: "
Group=Stop10

[10-4]
Meter=String
MeterStyle=LineStyle
PreFix="IsTimingPoint: "
Group=Stop10

[10-5]
Meter=String
MeterStyle=LineStyle
PreFix="StopPoint: "
Group=Stop10

[10-6]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeID: "
Group=Stop10

[10-7]
Meter=String
MeterStyle=LineStyle
PreFix="LineTypeName: "
Group=Stop10

[10-8]
Meter=String
MeterStyle=LineStyle
PreFix="Towards: "
Group=Stop10

[10-9]
Meter=String
MeterStyle=LineStyle
PreFix="DepTimeDeviation: "
Group=Stop10

[10-10]
Meter=String
MeterStyle=LineStyle
PreFix="DepDeviationEffect: "
Group=Stop10

[10-11]
Meter=String
MeterStyle=LineStyle
PreFix="TrainNo: "
Group=Stop10

[10-12]
Meter=String
MeterStyle=LineStyle
PreFix="RunNo: "
Group=Stop10

[Spacer10]
Meter=Image
X=r
Y=R
W=1
H=20
Group=Stop10

You do not have the required permissions to view the files attached to this post.
Bundi
Posts: 20
Joined: October 11th, 2016, 6:46 am

Re: Web-parsing with "condition"

Post by Bundi »

Fantastic eclectic-tech!!

I just had a look at it now and tried it out. Very comprehensive job you have done.
More than I could ask for, many many thanks for doing this.

Will take me quite some time to grasp that code.

Again thank you for your time and work!!!!

Best regards,
Bundi
User avatar
FreeRaider
Posts: 826
Joined: November 20th, 2012, 11:58 pm

Re: Web-parsing with "condition"

Post by FreeRaider »

Good job eclectic-tech.

Another solution can be using Lua (it is a bit complicated but it also works well)

buses.ini

Code: Select all

[Rainmeter]
Update=1000
AccurateText=1
DynamicWindowSize=1

[Variables]
stopbus=G
buslinestocapture=7
uprate=600

[MeasureSite]
Measure=Plugin
Plugin=WebParser
URL=http://www.labs.skanetrafiken.se/v2.2/stationresults.asp?selPointFrKey=80118
RegExp=(?siU)^(.*)$
StringIndex=1
UpdateRate=#uprate#
FinishAction=[!CommandMeasure MeasureScript "WebparseSite()"]

[MeasureScript]
Measure=Script
ScriptFile=#CURRENTPATH#Buses.lua
StopPoint=#stopbus#
MaxLines=#buslinestocapture#
UpdateDivider=-1

[MeterLineName1]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line1
Hidden=1

[MeterJourneyDT1]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line1
Hidden=1

[MeterLineName2]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line2
Hidden=1

[MeterJourneyDT2]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line2
Hidden=1

[MeterLineName3]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line3
Hidden=1

[MeterJourneyDT3]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line3
Hidden=1

[MeterLineName4]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line4
Hidden=1

[MeterJourneyDT4]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line4
Hidden=1

[MeterLineName5]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line5
Hidden=1

[MeterJourneyDT5]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line5
Hidden=1

[MeterLineName6]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line6
Hidden=1


[MeterJourneyDT6]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line6
Hidden=1

[MeterLineName7]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line7
Hidden=1

[MeterJourneyDT7]
Meter=String
Y=0R
FontSize=11
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Group=All|Line7
Hidden=1
Buses.lua

Code: Select all

function Initialize()

	inputMeasure = SKIN:GetMeasure('MeasureSite')
	LinePattern = '<Line>.-</Line>'
	NamePattern = '<Name>(.-)</Name>'
	JourneyDTPattern = '<JourneyDateTime>(.-)</JourneyDateTime>'
		
end
	
function Update()
		
end

function WebparseSite()

	SKIN:Bang('!HideMeterGroup', 'All')
	
	StopPointLetter = SELF:GetOption('StopPoint', 'None')
	maxLines = tonumber(SELF:GetOption('MaxLines', '1'))
	
	entireFeed = inputMeasure:GetStringValue()
	dummyString, LineCount = string.gsub(entireFeed, '<Line>', '')
	startPos = 0
	meterNumber = 1
	
	for i = 1, LineCount do
	
		LineStart, LineEnd = string.find(entireFeed, LinePattern, startPos)
		oneLine = string.sub(entireFeed, LineStart, LineEnd)
		LineName = string.match(oneLine, NamePattern)
		JourneyDT = string.match(oneLine, JourneyDTPattern)
		StopPointLine = string.match(oneLine, '<StopPoint>('..StopPointLetter..')</StopPoint>')
		
		if StopPointLine then
			
			SKIN:Bang('!SetOption', 'MeterLineName'..meterNumber, 'Text', LineName)
			SKIN:Bang('!SetOption', 'MeterJourneyDT'..meterNumber, 'Text', JourneyDT)
			SKIN:Bang('!ShowMeterGroup', 'Line'..meterNumber)
			meterNumber = meterNumber + 1
			
		end
		
		if meterNumber > maxLines then break end
		
		startPos = LineEnd + 1
		
	end
	
end
Without detracting from the response of our sage, I post this response only for knowledge.
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5384
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Web-parsing with "condition"

Post by eclectic-tech »

@FreeRaider
Alternatives are always welcome, and Lua may be a better way to go at this. :thumbup:
Thanks!

When I have the time, I'm going to learn Lua! :D
Bundi
Posts: 20
Joined: October 11th, 2016, 6:46 am

Re: Web-parsing with "condition"

Post by Bundi »

@ FreeRaider

Great!

Just saw your post and put it in a skin, works excellent! :thumbup:
Thanks a lot for your work, I have never gotten close to any Lua script myself yet.
But I definitely need to learn more about it.

Many many thanks for helping me out!

Best regards,
Bundi
User avatar
FreeRaider
Posts: 826
Joined: November 20th, 2012, 11:58 pm

Re: Web-parsing with "condition"

Post by FreeRaider »

Bundi wrote:@ FreeRaider

Great!

Just saw your post and put it in a skin, works excellent! :thumbup:
Thanks a lot for your work, I have never gotten close to any Lua script myself yet.
But I definitely need to learn more about it.

Many many thanks for helping me out!

Best regards,
Bundi
Glad to help.

P.S.: I have changed a row in the lua file. it is now StopPointLine = string.match(oneLine, '<StopPoint>('..string.upper(StopPointLetter)..')</StopPoint>') because I have added string.upper() function, so you can use 'G' or 'g' indistinctly in the stopbus variable.
Bundi
Posts: 20
Joined: October 11th, 2016, 6:46 am

Re: Web-parsing with "condition"

Post by Bundi »

@ FreeRaider

Thanks again!

will change in the code you already provided for me.
Playing around with the graphics now for my skin.

Thanks for your efforts!

Best,
Bundi