Here's the helper function, if you want it.
This one may be a bit more useful, to have the start and end times as dates. Since the information changes fairly often, I'd keep it in a dataset tag.
EDIT: modified to handle transitions over midnight.
from bs4 import BeautifulSoup
def hhmmToMinutes(timeIn):
'''helper function to return an offset in minutes.
example: hhmmToMinutes('15:30') returns 930
'''
hours, minutes = [int(unit) for unit in timeIn.split(':')]
return hours*60 + minutes
# replace with your httpGet of httpClient response
response = system.file.readFileAsString('c:/test/702.html')
# Parse html with bs4
dataIn = BeautifulSoup(response)
# Get all of the scheduleDay classes
days = dataIn.findAll('div', {'class':'scheduleDay'})
headers = ['start', 'end']
data = []
# Get today's date
today = system.date.midnight(system.date.now())
# Extract year and subtract 1900 for use in setYear() of the Date class.
currentYear = system.date.getYear(system.date.now())-1900
for day in days:
# find the day in the schedule and convert to a Date
dateString = day.find('div', {'class':'dayMonth'}).contents[0].strip()
date = system.date.parse(dateString, 'E, dd MMM')
# set the year to the current year.
date.setYear(currentYear)
# If the date is before today, assume it's for next year.
# Useful for December to January boundaries
if date < today:
date = system.date.addYears(date, 1)
# fint the shed times and add them to the date.
for shedTime in day.findAll('a'):
timeOffsets = [system.date.addMinutes(date, hhmmToMinutes(time)) for time in shedTime.contents[0].split(' - ')]
# Check if the end time is before the start time. if yes, add 1 day.
if system.date.isBefore(timeOffsets[1], timeOffsets[0]):
timeOffsets[1] = system.date.addDays(timeOffsets[1], 1)
data.append(timeOffsets)
dataset = system.dataset.toDataSet(headers, data)
system.tag.writeBlocking(['[Test]Result'], [dataset])
Dataset. Note that I had added a test so that if a date is before the current date, it adds a year. This would take care of the transitions from December to January. Since I'm using 'old' data, the first few rows are in 2024.
row | start | end
-----------------------------------------------------------------
0 | Wed Mar 06 05:00:00 EST 2024 | Wed Mar 06 07:30:00 EST 2024
1 | Wed Mar 06 13:00:00 EST 2024 | Wed Mar 06 15:30:00 EST 2024
2 | Wed Mar 06 21:00:00 EST 2024 | Wed Mar 06 23:30:00 EST 2024
3 | Thu Mar 07 05:00:00 EST 2024 | Thu Mar 07 07:30:00 EST 2024
4 | Thu Mar 07 13:00:00 EST 2024 | Thu Mar 07 15:30:00 EST 2024
5 | Thu Mar 07 21:00:00 EST 2024 | Thu Mar 07 23:30:00 EST 2024
6 | Wed Mar 08 05:00:00 EST 2023 | Wed Mar 08 07:30:00 EST 2023
7 | Wed Mar 08 13:00:00 EST 2023 | Wed Mar 08 15:30:00 EST 2023
8 | Wed Mar 08 21:00:00 EST 2023 | Wed Mar 08 23:30:00 EST 2023
9 | Thu Mar 09 03:00:00 EST 2023 | Thu Mar 09 05:30:00 EST 2023
10 | Thu Mar 09 11:00:00 EST 2023 | Thu Mar 09 13:30:00 EST 2023
11 | Thu Mar 09 19:00:00 EST 2023 | Thu Mar 09 21:30:00 EST 2023
12 | Fri Mar 10 03:00:00 EST 2023 | Fri Mar 10 05:30:00 EST 2023
13 | Fri Mar 10 11:00:00 EST 2023 | Fri Mar 10 13:30:00 EST 2023
14 | Fri Mar 10 19:00:00 EST 2023 | Fri Mar 10 21:30:00 EST 2023
15 | Sat Mar 11 03:00:00 EST 2023 | Sat Mar 11 05:30:00 EST 2023
16 | Sat Mar 11 11:00:00 EST 2023 | Sat Mar 11 13:30:00 EST 2023
17 | Sat Mar 11 19:00:00 EST 2023 | Sat Mar 11 21:30:00 EST 2023
18 | Sun Mar 12 04:00:00 EDT 2023 | Sun Mar 12 06:30:00 EDT 2023
19 | Sun Mar 12 12:00:00 EDT 2023 | Sun Mar 12 14:30:00 EDT 2023
20 | Sun Mar 12 20:00:00 EDT 2023 | Sun Mar 12 22:30:00 EDT 2023
21 | Mon Mar 13 01:00:00 EDT 2023 | Mon Mar 13 03:30:00 EDT 2023
22 | Mon Mar 13 09:00:00 EDT 2023 | Mon Mar 13 11:30:00 EDT 2023
23 | Mon Mar 13 17:00:00 EDT 2023 | Mon Mar 13 19:30:00 EDT 2023
24 | Tue Mar 14 01:00:00 EDT 2023 | Tue Mar 14 03:30:00 EDT 2023
25 | Tue Mar 14 09:00:00 EDT 2023 | Tue Mar 14 11:30:00 EDT 2023
26 | Tue Mar 14 17:00:00 EDT 2023 | Tue Mar 14 19:30:00 EDT 2023
27 | Wed Mar 15 01:00:00 EDT 2023 | Wed Mar 15 03:30:00 EDT 2023
28 | Wed Mar 15 09:00:00 EDT 2023 | Wed Mar 15 11:30:00 EDT 2023
29 | Wed Mar 15 17:00:00 EDT 2023 | Wed Mar 15 19:30:00 EDT 2023
30 | Thu Mar 16 01:00:00 EDT 2023 | Thu Mar 16 03:30:00 EDT 2023
31 | Thu Mar 16 09:00:00 EDT 2023 | Thu Mar 16 11:30:00 EDT 2023
32 | Thu Mar 16 17:00:00 EDT 2023 | Thu Mar 16 19:30:00 EDT 2023
33 | Fri Mar 17 07:00:00 EDT 2023 | Fri Mar 17 09:30:00 EDT 2023
34 | Fri Mar 17 15:00:00 EDT 2023 | Fri Mar 17 17:30:00 EDT 2023
35 | Fri Mar 17 23:00:00 EDT 2023 | Fri Mar 17 01:30:00 EDT 2023
36 | Sat Mar 18 07:00:00 EDT 2023 | Sat Mar 18 09:30:00 EDT 2023
37 | Sat Mar 18 15:00:00 EDT 2023 | Sat Mar 18 17:30:00 EDT 2023
38 | Sat Mar 18 23:00:00 EDT 2023 | Sat Mar 18 01:30:00 EDT 2023
39 | Sun Mar 19 07:00:00 EDT 2023 | Sun Mar 19 09:30:00 EDT 2023
40 | Sun Mar 19 15:00:00 EDT 2023 | Sun Mar 19 17:30:00 EDT 2023
41 | Sun Mar 19 23:00:00 EDT 2023 | Sun Mar 19 01:30:00 EDT 2023
42 | Mon Mar 20 07:00:00 EDT 2023 | Mon Mar 20 09:30:00 EDT 2023
43 | Mon Mar 20 15:00:00 EDT 2023 | Mon Mar 20 17:30:00 EDT 2023
44 | Mon Mar 20 23:00:00 EDT 2023 | Mon Mar 20 01:30:00 EDT 2023
45 | Tue Mar 21 05:00:00 EDT 2023 | Tue Mar 21 07:30:00 EDT 2023
46 | Tue Mar 21 13:00:00 EDT 2023 | Tue Mar 21 15:30:00 EDT 2023
47 | Tue Mar 21 21:00:00 EDT 2023 | Tue Mar 21 23:30:00 EDT 2023
48 | Wed Mar 22 05:00:00 EDT 2023 | Wed Mar 22 07:30:00 EDT 2023
49 | Wed Mar 22 13:00:00 EDT 2023 | Wed Mar 22 15:30:00 EDT 2023
50 | Wed Mar 22 21:00:00 EDT 2023 | Wed Mar 22 23:30:00 EDT 2023
51 | Thu Mar 23 05:00:00 EDT 2023 | Thu Mar 23 07:30:00 EDT 2023
52 | Thu Mar 23 13:00:00 EDT 2023 | Thu Mar 23 15:30:00 EDT 2023
53 | Thu Mar 23 21:00:00 EDT 2023 | Thu Mar 23 23:30:00 EDT 2023
54 | Fri Mar 24 05:00:00 EDT 2023 | Fri Mar 24 07:30:00 EDT 2023
55 | Fri Mar 24 13:00:00 EDT 2023 | Fri Mar 24 15:30:00 EDT 2023
56 | Fri Mar 24 21:00:00 EDT 2023 | Fri Mar 24 23:30:00 EDT 2023
57 | Sat Mar 25 03:00:00 EDT 2023 | Sat Mar 25 05:30:00 EDT 2023
58 | Sat Mar 25 11:00:00 EDT 2023 | Sat Mar 25 13:30:00 EDT 2023
59 | Sat Mar 25 19:00:00 EDT 2023 | Sat Mar 25 21:30:00 EDT 2023
60 | Sun Mar 26 03:00:00 EDT 2023 | Sun Mar 26 05:30:00 EDT 2023
61 | Sun Mar 26 11:00:00 EDT 2023 | Sun Mar 26 13:30:00 EDT 2023
62 | Sun Mar 26 19:00:00 EDT 2023 | Sun Mar 26 21:30:00 EDT 2023
63 | Mon Mar 27 03:00:00 EDT 2023 | Mon Mar 27 05:30:00 EDT 2023
64 | Mon Mar 27 11:00:00 EDT 2023 | Mon Mar 27 13:30:00 EDT 2023
65 | Mon Mar 27 19:00:00 EDT 2023 | Mon Mar 27 21:30:00 EDT 2023
66 | Tue Mar 28 03:00:00 EDT 2023 | Tue Mar 28 05:30:00 EDT 2023
67 | Tue Mar 28 11:00:00 EDT 2023 | Tue Mar 28 13:30:00 EDT 2023
68 | Tue Mar 28 19:00:00 EDT 2023 | Tue Mar 28 21:30:00 EDT 2023
69 | Wed Mar 29 01:00:00 EDT 2023 | Wed Mar 29 03:30:00 EDT 2023
70 | Wed Mar 29 09:00:00 EDT 2023 | Wed Mar 29 11:30:00 EDT 2023
71 | Wed Mar 29 17:00:00 EDT 2023 | Wed Mar 29 19:30:00 EDT 2023
72 | Thu Mar 30 01:00:00 EDT 2023 | Thu Mar 30 03:30:00 EDT 2023
73 | Thu Mar 30 09:00:00 EDT 2023 | Thu Mar 30 11:30:00 EDT 2023
74 | Thu Mar 30 17:00:00 EDT 2023 | Thu Mar 30 19:30:00 EDT 2023
75 | Fri Mar 31 01:00:00 EDT 2023 | Fri Mar 31 03:30:00 EDT 2023
76 | Fri Mar 31 09:00:00 EDT 2023 | Fri Mar 31 11:30:00 EDT 2023
77 | Fri Mar 31 17:00:00 EDT 2023 | Fri Mar 31 19:30:00 EDT 2023
78 | Sat Apr 01 07:00:00 EDT 2023 | Sat Apr 01 09:30:00 EDT 2023
79 | Sat Apr 01 15:00:00 EDT 2023 | Sat Apr 01 17:30:00 EDT 2023
80 | Sat Apr 01 23:00:00 EDT 2023 | Sat Apr 01 01:30:00 EDT 2023
81 | Sun Apr 02 07:00:00 EDT 2023 | Sun Apr 02 09:30:00 EDT 2023
82 | Sun Apr 02 15:00:00 EDT 2023 | Sun Apr 02 17:30:00 EDT 2023
83 | Sun Apr 02 23:00:00 EDT 2023 | Sun Apr 02 01:30:00 EDT 2023
84 | Mon Apr 03 07:00:00 EDT 2023 | Mon Apr 03 09:30:00 EDT 2023
85 | Mon Apr 03 15:00:00 EDT 2023 | Mon Apr 03 17:30:00 EDT 2023
86 | Mon Apr 03 23:00:00 EDT 2023 | Mon Apr 03 01:30:00 EDT 2023
Then, to test:
datesIn = system.dataset.toPyDataSet(system.tag.readBlocking(['[Test]Result'])[0].value)
now = system.date.now()
print any([system.date.isBetween(now, row['start'], row['end']) for row in datesIn])