From 131eaa8a6c504576ed8d7a6070f8c97c20ae0035 Mon Sep 17 00:00:00 2001 From: stephan192 Date: Tue, 16 Dec 2025 20:41:44 +0100 Subject: [PATCH 1/2] Fix SH pegel page scraping --- CHANGELOG.md | 4 ++++ pyproject.toml | 2 +- src/lhpapi/sh_api.py | 36 ++++++++++++++++++++---------------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac96318..5935983 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.9 (2025-12-16) +### Fixed +- Fix SH pegel page scraping + ## 1.0.8 (2025-12-09) ### Fixed - Fix TH pegel page scraping diff --git a/pyproject.toml b/pyproject.toml index 3ab19d7..c510cc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "lhpapi" -version = "1.0.8" +version = "1.0.9" authors = [ { name="stephan192", email="stephan192@outlook.com" }, ] diff --git a/src/lhpapi/sh_api.py b/src/lhpapi/sh_api.py index a1d9325..ed83ab6 100644 --- a/src/lhpapi/sh_api.py +++ b/src/lhpapi/sh_api.py @@ -2,6 +2,8 @@ from __future__ import annotations +from datetime import datetime + from .api_utils import ( DynamicData, LHPError, @@ -13,6 +15,21 @@ ) +def parse_timestamp(parts: list[str]) -> datetime: + """Parse timestamp with optional timezone.""" + if len(parts) >= 5: + timezone = parts[4].strip("()") + else: + timezone = None + base_time = parts[2] + parts[3] + + if timezone == "MEZ": + return convert_to_datetime(f"{base_time}+0100", "%d.%m.%Y%H:%M%z") + if timezone == "MESZ": + return convert_to_datetime(f"{base_time}+0200", "%d.%m.%Y%H:%M%z") + return convert_to_datetime(base_time, "%d.%m.%Y%H:%M") + + def init_SH(ident: str) -> StaticData: # pylint: disable=invalid-name """Init data for Schleswig-Holstein.""" try: @@ -67,28 +84,15 @@ def update_SH(static_data: StaticData) -> DynamicData: # pylint: disable=invali and element.attrs["class"][0] == "tooltip-content__w" ): element_text = element.getText().split() - if element_text[1] == "cm": + if len(element_text) >= 4 and element_text[1] == "cm": level = convert_to_float(element_text[0], True) - if element_text[4] == "(MEZ)": - last_update = convert_to_datetime( - element_text[2] + element_text[3] + "+0100", - "%d.%m.%Y%H:%M%z", - ) - elif element_text[4] == "(MESZ)": - last_update = convert_to_datetime( - element_text[2] + element_text[3] + "+0200", - "%d.%m.%Y%H:%M%z", - ) - else: - last_update = convert_to_datetime( - element_text[2] + element_text[3], "%d.%m.%Y%H:%M" - ) + last_update = parse_timestamp(element_text) if ( element.name == "dd" and element.attrs["class"][0] == "tooltip-content__q" ): element_text = element.getText().split() - if element_text[1] == "m3/s": + if len(element_text) >= 2 and element_text[1] == "m3/s": flow = convert_to_float(element_text[0], True) return DynamicData(level=level, stage=stage, flow=flow, last_update=last_update) except Exception as err: From 747d2c347e97af8c388185caf830a7aea1d0b989 Mon Sep 17 00:00:00 2001 From: stephan192 Date: Thu, 18 Dec 2025 19:46:03 +0100 Subject: [PATCH 2/2] Update release date --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5935983..3caa800 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.0.9 (2025-12-16) +## 1.0.9 (2025-12-18) ### Fixed - Fix SH pegel page scraping