Initial commit for helios-fitx

This commit is contained in:
Helios Agent 2026-02-23 01:19:50 +01:00
commit 68deb2301d
No known key found for this signature in database
GPG key ID: C8259547CD8309B5
3 changed files with 138 additions and 0 deletions

66
fitx.py Normal file
View file

@ -0,0 +1,66 @@
import requests
from bs4 import BeautifulSoup
import json
import sys
def fetch_fitx_occupancy(studio_url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(studio_url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
# The data is hidden in a section tag with class 'studio_graph'
graph_section = soup.find('section', class_='studio_graph')
if not graph_section:
print("Could not find graph section. Check URL or website structure.")
return
# Extracting raw JSON strings from attributes
visitor_data_raw = graph_section.get('data-visitordata')
current_day_raw = graph_section.get('data-current-day-data')
# Parsing JSON
# visitor_data is usually 7 arrays (Mon-Sun), each containing 24 integers (0h-23h)
forecast_data = json.loads(visitor_data_raw)
# current_day_data is an array of integers for the hours passed so far today
live_data = json.loads(current_day_raw)
studio_name = soup.find('h1', class_='studio_hero__headline').get_text(strip=True)
# Helper function to map values to time strings
def map_to_times(data_list):
return {f"{i:02d}:00": value for i, value in enumerate(data_list)}
week_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
# Create the forecast dictionary with time keys
forecast_with_times = {}
for i, day in enumerate(week_days):
forecast_with_times[day] = map_to_times(forecast_data[i])
result = {
"studio": studio_name,
"live_utilization_today": map_to_times(live_data),
"forecast_week_data": forecast_with_times
}
return result
if __name__ == "__main__":
# URL defaults to Berlin Tierpark, but can be overridden via command line
target_url = "https://www.fitx.de/fitnessstudios/berlin-tierpark"
if len(sys.argv) > 1:
target_url = sys.argv[1]
data = fetch_fitx_occupancy(target_url)
if data:
print(json.dumps(data, indent=2, ensure_ascii=False))