diff --git a/main.py b/main.py deleted file mode 100644 index e6a00bf..0000000 --- a/main.py +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env python3 - -import datetime -from genericpath import isfile -import json -import os -import requests -import calendar -from flask import Flask -from flask import jsonify - -url_energy = "https://www.ote-cr.cz/cs/kratkodobe-trhy/elektrina/denni-trh/@@chart-data?report_date={}" -url_currency = "https://data.kurzy.cz/json/meny/b[1].json" -url_currency2 = "https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/denni_kurz.txt?date={day}.{month}.{year}" -CACHE_PATH = "./cache.json" -ENERGY_CACHE_PATH = "./cache-energy.json" -NO_CACHE = False -SELL_FEE = 0.45 -BUY_FEE = 0.45 -VAT=1.21 - -class PriceException(Exception): - pass - -def get_distribution_price(): - cez_57d_vt = 0.64862 - cez_57d_nt = 0.43809 - - tax = 0.0283 - services = 0.21282 - ote = 0 # this is 4 crown per month - oze = 0.495 - - additional = tax+services+ote+oze - - return { - "high": cez_57d_vt+additional, - "low": cez_57d_nt+additional, - } - -def get_breaker_payment(): - # https://www.tzb-info.cz/ceny-paliv-a-energii/14-ceny-elektriny#D57d - cez_32a = 500 - - currentDate = datetime.date.today() - daysInMonth = calendar.monthrange(currentDate.year, currentDate.month)[1] - return cez_32a/daysInMonth/24 - -def get_current_energy_price(date_str, selected_hour): - selected_hour = str(selected_hour) - data = { - "date": "", - "hours": {}, - } - - try: - if os.path.isfile(ENERGY_CACHE_PATH) and not NO_CACHE: - with open(ENERGY_CACHE_PATH, "r") as f: - data = json.load(f) - except json.decoder.JSONDecodeError: - cache = {} - - if data["date"] == date_str: - return data["hours"][selected_hour] - - r = requests.get(url_energy.format(date_str)) - - print(r.text) - for hour in r.json()["data"]["dataLine"][1]["point"]: - data["hours"][str(int(hour["x"])-1)] = hour["y"] - - data["date"] = date_str - with open(ENERGY_CACHE_PATH, "w") as f: - json.dump(data, f) - - return data["hours"][selected_hour] - -#def get_currency_ratio(currency): -# r = requests.get(url_currency) -# return r.json()["kurzy"][currency]["dev_stred"] - -def get_currency_ratio(currency): - now = datetime.date.today() - url = url_currency2.format(day=now.day,month=now.month,year=now.year) - r = requests.get(url) - for row in [x.split("|") for x in r.text.split("\n") if x and "|" in x]: - if row[3] == "EUR": - return float(row[4].replace(",", ".")) - - raise PriceException("EUR not found") - -def hour_result(): - current_hour = datetime.datetime.now().hour - today = datetime.date.today().strftime("%Y-%m-%d") - - cache = {} - - try: - if os.path.isfile(CACHE_PATH) and not NO_CACHE: - with open(CACHE_PATH, "r") as f: - cache = json.load(f) - except json.decoder.JSONDecodeError: - cache = {} - - if cache.get("date") == today and cache.get("hour") == current_hour: - cache["cached"] = True - return cache - - energy_price = get_current_energy_price(today, current_hour) - eur2czk = get_currency_ratio("EUR") - breaker = get_breaker_payment() - distribution = get_distribution_price() - - data = { - "date": datetime.date.today().strftime("%Y-%m-%d"), - "hour": datetime.datetime.now().hour, - "breaker": "32A", - "tariff": "57d", - "price": { - "distribution": distribution, - "market": energy_price/1000*eur2czk, - "market_vat": energy_price/1000*eur2czk*VAT, - "marker_sell": energy_price/1000*eur2czk-SELL_FEE, # Typo - "market_sell": energy_price/1000*eur2czk-SELL_FEE, - "breaker": breaker, - "breaker_vat": breaker*VAT, - "sell_fee": SELL_FEE, - "buy_fee": BUY_FEE, - "total": { - "high": energy_price/1000*eur2czk+breaker+distribution["high"]+BUY_FEE, - "low": energy_price/1000*eur2czk+breaker+distribution["low"]+BUY_FEE, - }, - "total_no_breaker": { - "high": energy_price/1000*eur2czk+distribution["high"]+BUY_FEE, - "low": energy_price/1000*eur2czk+distribution["low"]+BUY_FEE, - }, - "total_vat": { - "high": (energy_price/1000*eur2czk+breaker+distribution["high"]+BUY_FEE)*VAT, - "low": (energy_price/1000*eur2czk+breaker+distribution["low"]+BUY_FEE)*VAT, - }, - "total_no_breaker_vat": { - "high": (energy_price/1000*eur2czk+distribution["high"]+BUY_FEE)*VAT, - "low": (energy_price/1000*eur2czk+distribution["low"]+BUY_FEE)*VAT, - }, - }, - "cached": False, - } - - with open(CACHE_PATH, "w") as f: - json.dump(data, f) - - return data - -app = Flask(__name__) - -@app.route("/") -def result(): - return jsonify(hour_result()) - -if __name__ == "__main__": - app.run(debug=True)