Init repo with first working version
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
config.json
|
||||||
|
__pycache__
|
||||||
|
*.swp
|
||||||
|
venv
|
||||||
10
config.example.json
Normal file
10
config.example.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"db_user": "",
|
||||||
|
"db_passwd": "",
|
||||||
|
"db_host": "localhost",
|
||||||
|
"db_port": 3306,
|
||||||
|
"db_db": "",
|
||||||
|
"db_table": "water_level_elbe_dresden",
|
||||||
|
"sleep_sec": 600,
|
||||||
|
"url": "https://www.umwelt.sachsen.de/umwelt/infosysteme/hwims/portal/web/wasserstand-pegel-501060"
|
||||||
|
}
|
||||||
102
main.py
Normal file
102
main.py
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
import json
|
||||||
|
import mariadb
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
from urllib.request import urlopen
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
def read_config(file="config.json"):
|
||||||
|
"""
|
||||||
|
Read config file to get database configuration and other stuff.
|
||||||
|
"""
|
||||||
|
with open(file, "r") as f:
|
||||||
|
config = json.load(f)
|
||||||
|
return config
|
||||||
|
|
||||||
|
|
||||||
|
def prepare_db():
|
||||||
|
"""
|
||||||
|
Setup database table, if it not exists.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
conn = mariadb.connect(
|
||||||
|
user=config["db_user"],
|
||||||
|
password=config["db_passwd"],
|
||||||
|
host=config["db_host"],
|
||||||
|
port=config["db_port"],
|
||||||
|
database=config["db_db"]
|
||||||
|
)
|
||||||
|
except mariadb.Error as e:
|
||||||
|
print(f"Error connecting to MariaDB Platform: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
cur = conn.cursor()
|
||||||
|
cur.execute("SHOW TABLES")
|
||||||
|
|
||||||
|
table_exists = False
|
||||||
|
for table in cur:
|
||||||
|
if table == config["db_table"]:
|
||||||
|
table_exists = True
|
||||||
|
|
||||||
|
if not table_exists:
|
||||||
|
cur.execute("CREATE TABLE ? (timestamp TIMESTAMP PRIMARY KEY, level_cm INT, flow_m3_s INT)", (config["db_table"]))
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
def write_db(timestamp, level: int, flow: int):
|
||||||
|
"""
|
||||||
|
Write data set to database.
|
||||||
|
@param timestamp: timestamp of data set
|
||||||
|
@param level: water level in cm
|
||||||
|
@param flow: water flow in m3/s
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
conn = mariadb.connect(
|
||||||
|
user=config["db_user"],
|
||||||
|
password=config["db_passwd"],
|
||||||
|
host=config["db_host"],
|
||||||
|
port=config["db_port"],
|
||||||
|
database=config["db_db"]
|
||||||
|
)
|
||||||
|
except mariadb.Error as e:
|
||||||
|
print(f"Error connecting to MariaDB Platform: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
cur = conn.cursor()
|
||||||
|
try:
|
||||||
|
cur.execute("INSERT INTO ? (timestamp,level_cm,flow_m3_s) VALUES (?, ?, ?)", (config["db_table"], timestamp, level, flow))
|
||||||
|
except mariadb.Error as e:
|
||||||
|
print(f"Error: {e}")
|
||||||
|
finally:
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
def retrieve(url: str):
|
||||||
|
"""
|
||||||
|
Get webpage and parse it to get timestamp, water level and flow.
|
||||||
|
@param url: the URL to call
|
||||||
|
@return: 3-tuple with timestamp, level, flow
|
||||||
|
"""
|
||||||
|
page = urlopen(url)
|
||||||
|
html = page.read().decode("utf-8")
|
||||||
|
soup = BeautifulSoup(html, "html.parser")
|
||||||
|
|
||||||
|
latest = soup.select(".quickbarTable tbody")[0].select("tr")[0]
|
||||||
|
latest_ts = latest.select("td")[0].text
|
||||||
|
ts = datetime.strptime(latest_ts.strip(), "%d.%m.%Y %H:%M")
|
||||||
|
latest_level = latest.select("td")[1].text
|
||||||
|
latest_flow = latest.select("td")[2].text
|
||||||
|
|
||||||
|
return ts, int(latest_level), int(latest_flow)
|
||||||
|
|
||||||
|
|
||||||
|
config = read_config()
|
||||||
|
# prepare_db()
|
||||||
|
while True:
|
||||||
|
ts, latest_level, latest_flow = retrieve(config["url"])
|
||||||
|
# write_db(ts, latest_level, latest_flow)
|
||||||
|
print(str(ts) + ": " + str(latest_level) + "cm " + str(latest_flow) + "m3/s")
|
||||||
|
time.sleep(config["sleep_sec"])
|
||||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
beautifulsoup4==4.12.3
|
||||||
|
mariadb==1.1.9
|
||||||
Reference in New Issue
Block a user