feat: Add --debug switch and minimize normal output
- Added --debug switch to show detailed information - Normal output (--get-rate) now shows only the rate value or 'Kurz nenalezen' - Debug output shows all processing steps and detailed information - All modules updated to support debug mode - Fixed imports and module initialization - Maintains backward compatibility - Reports are generated silently in normal mode, with details in debug mode
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
106
src/cli.py
Normal file → Executable file
106
src/cli.py
Normal file → Executable file
@@ -1,3 +1,5 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
@@ -10,33 +12,48 @@ import data_fetcher
|
|||||||
import database
|
import database
|
||||||
import rate_finder
|
import rate_finder
|
||||||
import rate_reporter
|
import rate_reporter
|
||||||
|
import holidays
|
||||||
|
|
||||||
|
# Global debug flag
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
def debug_print(*args, **kwargs):
|
||||||
|
"""Print debug messages only if debug mode is enabled."""
|
||||||
|
if DEBUG:
|
||||||
|
print(*args, **kwargs)
|
||||||
|
|
||||||
def check_and_update_yearly_data():
|
def check_and_update_yearly_data():
|
||||||
"""
|
"""
|
||||||
Zkontroluje konzistenci ročních dat pro aktuální rok a případně je aktualizuje.
|
Zkontroluje konzistenci ročních dat pro aktuální rok a případně je aktualizuje.
|
||||||
"""
|
"""
|
||||||
current_year = datetime.now().year
|
current_year = datetime.now().year
|
||||||
print(f"Kontroluji konzistenci ročních dat pro rok {current_year}...")
|
debug_print(f"Kontroluji konzistenci ročních dat pro rok {current_year}...")
|
||||||
|
|
||||||
|
# Nastavíme debug mód pro všechny moduly
|
||||||
|
database.set_debug_mode(DEBUG)
|
||||||
|
data_fetcher.set_debug_mode(DEBUG)
|
||||||
|
holidays.set_debug_mode(DEBUG)
|
||||||
|
rate_finder.set_debug_mode(DEBUG)
|
||||||
|
rate_reporter.set_debug_mode(DEBUG)
|
||||||
|
|
||||||
# Zkontrolujeme konzistenci dat
|
# Zkontrolujeme konzistenci dat
|
||||||
is_consistent = data_fetcher.check_yearly_data_consistency(current_year, output_dir="data")
|
is_consistent = data_fetcher.check_yearly_data_consistency(current_year, output_dir="data")
|
||||||
|
|
||||||
if not is_consistent:
|
if not is_consistent:
|
||||||
print(f"Roční data pro rok {current_year} nejsou konzistentní. Stahuji aktualizovaná data...")
|
debug_print(f"Roční data pro rok {current_year} nejsou konzistentní. Stahuji aktualizovaná data...")
|
||||||
# Ujistěme se, že adresář data existuje
|
# Ujistěme se, že adresář data existuje
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
# Stáhneme roční data znovu
|
# Stáhneme roční data znovu
|
||||||
data_fetcher.download_yearly_data(current_year, output_dir="data", force=True)
|
data_fetcher.download_yearly_data(current_year, output_dir="data", force=True)
|
||||||
else:
|
else:
|
||||||
print(f"Roční data pro rok {current_year} jsou aktuální.")
|
debug_print(f"Roční data pro rok {current_year} jsou aktuální.")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
global DEBUG
|
||||||
|
|
||||||
# Inicializace databáze
|
# Inicializace databáze
|
||||||
database.init_db()
|
database.init_db()
|
||||||
|
|
||||||
# Kontrola a případná aktualizace ročních dat pro aktuální rok
|
|
||||||
check_and_update_yearly_data()
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Stahování a správa kurzů měn z ČNB.")
|
parser = argparse.ArgumentParser(description="Stahování a správa kurzů měn z ČNB.")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--year",
|
"--year",
|
||||||
@@ -89,25 +106,50 @@ def main():
|
|||||||
metavar=('START_DATE', 'END_DATE'),
|
metavar=('START_DATE', 'END_DATE'),
|
||||||
help="Období, pro které se má vygenerovat report kurzů. Formát: DD.MM.YYYY DD.MM.YYYY"
|
help="Období, pro které se má vygenerovat report kurzů. Formát: DD.MM.YYYY DD.MM.YYYY"
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--debug",
|
||||||
|
action="store_true",
|
||||||
|
help="Zobrazí podrobné ladicí informace."
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Nastavíme debug mód
|
||||||
|
DEBUG = args.debug
|
||||||
|
|
||||||
|
# Nastavíme debug mód pro všechny moduly
|
||||||
|
database.set_debug_mode(DEBUG)
|
||||||
|
data_fetcher.set_debug_mode(DEBUG)
|
||||||
|
holidays.set_debug_mode(DEBUG)
|
||||||
|
rate_finder.set_debug_mode(DEBUG)
|
||||||
|
rate_reporter.set_debug_mode(DEBUG)
|
||||||
|
|
||||||
|
# Kontrola a případná aktualizace ročních dat pro aktuální rok (pouze v debug módu)
|
||||||
|
if DEBUG:
|
||||||
|
check_and_update_yearly_data()
|
||||||
|
else:
|
||||||
|
# V normálním módu zkontrolujeme pouze při stahování dat
|
||||||
|
if args.year or args.start_date or args.date or args.get_rate or args.report_year or args.report_period:
|
||||||
|
current_year = datetime.now().year
|
||||||
|
# Pro jednoduchost v normálním módu nebudeme kontrolovat konzistenci automaticky
|
||||||
|
pass
|
||||||
|
|
||||||
# Zde bude logika pro zpracování argumentů
|
# Zde bude logika pro zpracování argumentů
|
||||||
if args.year:
|
if args.year:
|
||||||
print(f"Stahuji roční data pro rok {args.year}...")
|
debug_print(f"Stahuji roční data pro rok {args.year}...")
|
||||||
# Ujistěme se, že adresář data existuje
|
# Ujistěme se, že adresář data existuje
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
# Volání funkce pro stažení ročních dat
|
# Volání funkce pro stažení ročních dat
|
||||||
data_fetcher.download_yearly_data(args.year, output_dir="data")
|
data_fetcher.download_yearly_data(args.year, output_dir="data")
|
||||||
elif args.currency and args.start_date and args.end_date and not args.report_period:
|
elif args.currency and args.start_date and args.end_date and not args.report_period:
|
||||||
# Měsíční stahování dat
|
# Měsíční stahování dat
|
||||||
print(f"Stahuji měsíční data pro měnu {args.currency} od {args.start_date} do {args.end_date}...")
|
debug_print(f"Stahuji měsíční data pro měnu {args.currency} od {args.start_date} do {args.end_date}...")
|
||||||
# Ujistěme se, že adresář data existuje
|
# Ujistěme se, že adresář data existuje
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
# Volání funkce pro stažení měsíčních dat
|
# Volání funkce pro stažení měsíčních dat
|
||||||
data_fetcher.download_monthly_data(args.currency, args.start_date, args.end_date, output_dir="data")
|
data_fetcher.download_monthly_data(args.currency, args.start_date, args.end_date, output_dir="data")
|
||||||
elif args.date:
|
elif args.date:
|
||||||
print(f"Stahuji denní data pro datum {args.date}...")
|
debug_print(f"Stahuji denní data pro datum {args.date}...")
|
||||||
# Ujistěme se, že adresář data existuje
|
# Ujistěme se, že adresář data existuje
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
# Volání funkce pro stažení denních dat
|
# Volání funkce pro stažení denních dat
|
||||||
@@ -115,10 +157,14 @@ def main():
|
|||||||
elif args.get_rate and args.currency:
|
elif args.get_rate and args.currency:
|
||||||
date_str = args.get_rate
|
date_str = args.get_rate
|
||||||
currency_code = args.currency
|
currency_code = args.currency
|
||||||
print(f"Vyhledávám kurz pro {currency_code} na datum {date_str}...")
|
debug_print(f"Vyhledávám kurz pro {currency_code} na datum {date_str}...")
|
||||||
rate = rate_finder.get_rate_for_date(date_str, currency_code)
|
rate = rate_finder.get_rate_for_date(date_str, currency_code)
|
||||||
if rate:
|
if rate:
|
||||||
print(f"Kurz {currency_code} na datum {date_str} (nebo nejbližší pracovní den): {rate}")
|
# Pro --get-rate v normálním režimu zobrazíme pouze kurz
|
||||||
|
if not DEBUG:
|
||||||
|
print(rate)
|
||||||
|
else:
|
||||||
|
print(f"Kurz {currency_code} na datum {date_str} (nebo nejbližší pracovní den): {rate}")
|
||||||
else:
|
else:
|
||||||
# Pokud nebyl kurz nalezen a je aktivní přepínač --auto-download, zkusíme stáhnout denní data
|
# Pokud nebyl kurz nalezen a je aktivní přepínač --auto-download, zkusíme stáhnout denní data
|
||||||
if args.auto_download:
|
if args.auto_download:
|
||||||
@@ -130,7 +176,7 @@ def main():
|
|||||||
if requested_date.date() == today.date():
|
if requested_date.date() == today.date():
|
||||||
# Zkontrolujeme, zda je čas po 14:30
|
# Zkontrolujeme, zda je čas po 14:30
|
||||||
if today.time() >= datetime.strptime("14:30", "%H:%M").time():
|
if today.time() >= datetime.strptime("14:30", "%H:%M").time():
|
||||||
print("Automaticky stahuji denní data...")
|
debug_print("Automaticky stahuji denní data...")
|
||||||
# Ujistěme se, že adresář data existuje
|
# Ujistěme se, že adresář data existuje
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
# Stáhneme denní data pro dnešní datum
|
# Stáhneme denní data pro dnešní datum
|
||||||
@@ -139,30 +185,52 @@ def main():
|
|||||||
# Zkusíme znovu vyhledat kurz
|
# Zkusíme znovu vyhledat kurz
|
||||||
rate = rate_finder.get_rate_for_date(date_str, currency_code)
|
rate = rate_finder.get_rate_for_date(date_str, currency_code)
|
||||||
if rate:
|
if rate:
|
||||||
print(f"Kurz {currency_code} na datum {date_str} (nebo nejbližší pracovní den): {rate}")
|
if not DEBUG:
|
||||||
|
print(rate)
|
||||||
|
else:
|
||||||
|
print(f"Kurz {currency_code} na datum {date_str} (nebo nejbližší pracovní den): {rate}")
|
||||||
else:
|
else:
|
||||||
print(f"Kurz {currency_code} na datum {date_str} (ani v předchozích dnech) nebyl nalezen ani po stažení denních dat.")
|
if not DEBUG:
|
||||||
|
print("Kurz nenalezen")
|
||||||
|
else:
|
||||||
|
print(f"Kurz {currency_code} na datum {date_str} (ani v předchozích dnech) nebyl nalezen ani po stažení denních dat.")
|
||||||
else:
|
else:
|
||||||
print(f"Chyba: Automatické stahování nelze provést, protože čas ještě není po 14:30. Aktuální čas je {today.strftime('%H:%M')}.")
|
if not DEBUG:
|
||||||
|
print("Kurz nenalezen")
|
||||||
|
else:
|
||||||
|
print(f"Chyba: Automatické stahování nelze provést, protože čas ještě není po 14:30. Aktuální čas je {today.strftime('%H:%M')}.")
|
||||||
else:
|
else:
|
||||||
print("Automatické stahování denních dat je možné pouze pro dnešní datum.")
|
if not DEBUG:
|
||||||
|
print("Kurz nenalezen")
|
||||||
|
else:
|
||||||
|
print("Automatické stahování denních dat je možné pouze pro dnešní datum.")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print(f"Neplatný formát data: {date_str}")
|
if not DEBUG:
|
||||||
|
print("Kurz nenalezen")
|
||||||
|
else:
|
||||||
|
print(f"Neplatný formát data: {date_str}")
|
||||||
else:
|
else:
|
||||||
print(f"Kurz {currency_code} na datum {date_str} (ani v předchozích dnech) nebyl nalezen.")
|
if not DEBUG:
|
||||||
|
print("Kurz nenalezen")
|
||||||
|
else:
|
||||||
|
print(f"Kurz {currency_code} na datum {date_str} (ani v předchozích dnech) nebyl nalezen.")
|
||||||
elif args.report_year and args.currency:
|
elif args.report_year and args.currency:
|
||||||
if args.report_month:
|
if args.report_month:
|
||||||
# Generování měsíčního reportu
|
# Generování měsíčního reportu
|
||||||
|
debug_print(f"Generuji měsíční report pro {args.currency} za {args.report_month}/{args.report_year}...")
|
||||||
rate_reporter.generate_monthly_report(args.report_year, args.report_month, args.currency, output_dir="data")
|
rate_reporter.generate_monthly_report(args.report_year, args.report_month, args.currency, output_dir="data")
|
||||||
else:
|
else:
|
||||||
# Generování ročního reportu
|
# Generování ročního reportu
|
||||||
|
debug_print(f"Generuji roční report pro {args.currency} za rok {args.report_year}...")
|
||||||
rate_reporter.generate_yearly_report(args.report_year, args.currency, output_dir="data")
|
rate_reporter.generate_yearly_report(args.report_year, args.currency, output_dir="data")
|
||||||
elif args.report_period and args.currency:
|
elif args.report_period and args.currency:
|
||||||
# Generování reportu za období
|
# Generování reportu za období
|
||||||
start_date, end_date = args.report_period
|
start_date, end_date = args.report_period
|
||||||
|
debug_print(f"Generuji report pro {args.currency} za období {start_date} - {end_date}...")
|
||||||
rate_reporter.generate_period_report(start_date, end_date, args.currency, output_dir="data")
|
rate_reporter.generate_period_report(start_date, end_date, args.currency, output_dir="data")
|
||||||
else:
|
else:
|
||||||
parser.print_help()
|
if DEBUG:
|
||||||
|
parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
251
src/data/2017.csv
Normal file
251
src/data/2017.csv
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
Datum,1_AUD,1_BGN,1_BRL,1_CAD,1_CHF,1_CNY,1_DKK,1_EUR,1_GBP,1_HKD,1_HRK,100_HUF,1000_IDR,1_ILS,100_INR,100_JPY,100_KRW,1_MXN,1_MYR,1_NOK,1_NZD,100_PHP,1_PLN,1_RON,100_RUB,1_SEK,1_SGD,100_THB,1_TRY,1_USD,1_XDR,1_ZAR
|
||||||
|
02.01.2017,18.538,13.815,7.889,19.212,25.228,3.719,3.634,27.020,31.738,3.328,3.577,8.731,1.916,6.702,37.899,21.981,2.138,1.244,5.756,2.984,17.894,52.112,6.123,5.949,42.144,2.831,17.797,72.082,7.288,25.819,34.710,1.881
|
||||||
|
03.01.2017,18.779,13.812,7.967,19.347,25.248,3.739,3.635,27.020,31.952,3.354,3.572,8.746,1.930,6.728,38.054,22.012,2.156,1.257,5.791,3.001,17.993,52.201,6.151,5.974,42.949,2.834,17.939,72.451,7.252,26.017,34.975,1.891
|
||||||
|
04.01.2017,18.804,13.812,7.997,19.448,25.239,3.735,3.634,27.020,31.816,3.338,3.568,8.763,1.926,6.712,38.035,22.032,2.159,1.224,5.756,3.005,17.986,52.151,6.169,5.993,42.621,2.837,17.956,72.296,7.228,25.889,34.603,1.897
|
||||||
|
05.01.2017,18.759,13.818,8.011,19.343,25.249,3.734,3.635,27.020,31.602,3.316,3.565,8.762,1.923,6.673,37.843,22.087,2.159,1.210,5.733,2.995,17.912,51.936,6.188,5.995,43.258,2.834,17.921,71.807,7.104,25.714,34.458,1.887
|
||||||
|
06.01.2017,18.716,13.813,7.971,19.244,25.193,3.689,3.634,27.020,31.543,3.290,3.566,8.794,1.909,6.652,37.529,21.995,2.142,1.199,5.705,3.007,17.924,51.706,6.204,6.003,43.063,2.829,17.810,71.533,7.054,25.516,34.317,1.874
|
||||||
|
09.01.2017,18.821,13.815,8.004,19.365,25.208,3.706,3.635,27.020,31.191,3.313,3.570,8.767,1.923,6.675,37.699,22.032,2.134,1.207,5.740,2.996,17.936,51.771,6.172,6.003,43.013,2.828,17.854,71.919,6.894,25.697,34.682,1.875
|
||||||
|
10.01.2017,18.768,13.813,8.010,19.313,25.167,3.694,3.635,27.020,31.079,3.297,3.572,8.753,1.920,6.653,37.487,21.996,2.129,1.194,5.715,2.977,17.822,51.581,6.180,6.011,42.555,2.826,17.784,71.769,6.772,25.571,34.368,1.866
|
||||||
|
11.01.2017,18.972,13.813,7.997,19.412,25.203,3.711,3.635,27.020,31.152,3.317,3.576,8.732,1.930,6.674,37.611,22.121,2.143,1.176,5.752,2.981,17.980,51.772,6.181,6.010,42.654,2.823,17.876,72.284,6.633,25.721,34.620,1.867
|
||||||
|
12.01.2017,19.019,13.813,8.010,19.373,25.150,3.669,3.635,27.020,31.111,3.262,3.586,8.797,1.904,6.621,37.216,22.202,2.152,1.171,5.675,2.981,18.034,51.035,6.174,6.016,42.675,2.842,17.785,71.595,6.702,25.300,33.982,1.883
|
||||||
|
13.01.2017,18.998,13.814,7.926,19.291,25.187,3.674,3.634,27.020,30.866,3.269,3.590,8.786,1.901,6.644,37.185,22.165,2.159,1.171,5.681,2.983,18.074,51.026,6.179,6.015,42.697,2.848,17.771,71.582,6.691,25.347,34.288,1.875
|
||||||
|
16.01.2017,19.068,13.815,7.919,19.406,25.233,3.697,3.634,27.020,30.768,3.288,3.589,8.790,1.908,6.663,37.432,22.348,2.155,1.181,5.710,2.984,18.113,51.053,6.178,6.001,42.763,2.848,17.840,71.995,6.748,25.503,34.460,1.874
|
||||||
|
17.01.2017,19.079,13.812,7.878,19.369,25.228,3.691,3.634,27.020,31.140,3.261,3.587,8.779,1.894,6.623,37.201,22.314,2.164,1.172,5.668,2.990,18.163,50.756,6.184,6.004,42.721,2.843,17.815,71.607,6.664,25.291,34.175,1.877
|
||||||
|
18.01.2017,19.122,13.815,7.864,19.319,25.238,3.706,3.634,27.020,31.105,3.266,3.587,8.775,1.899,6.644,37.196,22.321,2.162,1.168,5.700,2.991,18.208,50.762,6.187,6.014,42.711,2.834,17.803,71.732,6.691,25.335,34.373,1.868
|
||||||
|
19.01.2017,19.146,13.816,7.896,19.072,25.189,3.691,3.634,27.020,31.221,3.265,3.592,8.761,1.894,6.645,37.178,22.107,2.152,1.153,5.693,2.994,18.188,50.595,6.179,6.014,42.505,2.830,17.758,71.569,6.631,25.329,34.339,1.863
|
||||||
|
20.01.2017,19.143,13.815,7.954,19.004,25.191,3.698,3.634,27.020,31.202,3.276,3.595,8.742,1.895,6.672,37.273,22.061,2.160,1.156,5.717,3.001,18.147,50.774,6.183,6.012,42.493,2.842,17.779,71.704,6.644,25.414,34.395,1.865
|
||||||
|
23.01.2017,19.088,13.818,7.977,18.945,25.190,3.681,3.634,27.025,31.372,3.251,3.602,8.723,1.888,6.638,36.994,22.202,2.159,1.178,5.683,3.005,18.145,50.499,6.181,6.008,42.367,2.841,17.745,71.447,6.660,25.220,34.133,1.861
|
||||||
|
24.01.2017,19.032,13.815,7.950,18.939,25.163,3.667,3.633,27.020,31.294,3.241,3.601,8.709,1.886,6.641,36.922,22.179,2.158,1.181,5.669,3.016,18.191,50.503,6.179,6.004,42.449,2.845,17.722,71.399,6.678,25.141,34.142,1.882
|
||||||
|
25.01.2017,19.010,13.814,7.933,19.198,25.173,3.655,3.633,27.020,31.658,3.241,3.603,8.724,1.882,6.643,36.933,22.180,2.158,1.171,5.665,3.021,18.265,50.663,6.191,6.008,42.455,2.849,17.727,71.372,6.573,25.144,34.179,1.894
|
||||||
|
26.01.2017,19.019,13.816,7.926,19.235,25.269,3.672,3.633,27.020,31.731,3.255,3.610,8.689,1.894,6.668,37.036,22.073,2.164,1.202,5.702,3.029,18.265,50.633,6.220,6.014,41.740,2.855,17.744,71.526,6.532,25.252,34.347,1.888
|
||||||
|
27.01.2017,19.075,13.815,7.989,19.286,25.276,3.679,3.633,27.020,31.724,3.260,3.611,8.671,1.894,6.679,37.163,21.966,2.155,1.199,5.709,3.030,18.348,50.778,6.226,5.998,42.109,2.858,17.718,71.704,6.525,25.297,34.370,1.871
|
||||||
|
30.01.2017,19.155,13.815,8.111,19.323,25.324,3.697,3.633,27.020,31.803,3.277,3.614,8.695,1.905,6.716,37.412,22.191,2.158,1.223,5.736,3.044,18.423,51.081,6.241,6.004,42.373,2.863,17.803,72.069,6.663,25.421,34.458,1.870
|
||||||
|
31.01.2017,19.027,13.815,8.058,19.219,25.326,3.653,3.633,27.020,31.376,3.238,3.613,8.698,1.881,6.658,37.114,22.158,2.171,1.213,5.671,3.040,18.365,50.502,6.247,6.000,41.925,2.859,17.773,71.486,6.641,25.120,34.022,1.870
|
||||||
|
01.02.2017,18.999,13.819,7.964,19.175,25.305,3.646,3.633,27.020,31.646,3.232,3.620,8.723,1.875,6.650,37.181,22.084,2.167,1.209,5.661,3.042,18.236,50.340,6.257,5.942,41.669,2.867,17.735,71.377,6.662,25.074,34.072,1.866
|
||||||
|
02.02.2017,19.215,13.815,8.025,19.226,25.275,3.634,3.633,27.020,31.369,3.221,3.628,8.749,1.872,6.644,37.171,22.262,2.189,1.214,5.649,3.050,18.305,50.294,6.271,5.962,41.981,2.869,17.737,71.305,6.688,24.992,34.064,1.866
|
||||||
|
03.02.2017,19.218,13.813,8.033,19.268,25.260,3.664,3.633,27.020,31.410,3.242,3.634,8.732,1.885,6.700,37.364,22.236,2.192,1.227,5.681,3.051,18.281,50.540,6.287,5.984,42.452,2.862,17.794,71.768,6.733,25.155,34.332,1.873
|
||||||
|
06.02.2017,19.292,13.812,8.087,19.313,25.322,3.677,3.633,27.020,31.432,3.251,3.628,8.740,1.893,6.728,37.551,22.465,2.219,1.238,5.697,3.054,18.416,50.800,6.318,5.994,42.853,2.856,17.884,72.017,6.856,25.219,34.274,1.897
|
||||||
|
07.02.2017,19.277,13.815,8.097,19.202,25.352,3.677,3.634,27.020,31.300,3.262,3.628,8.725,1.899,6.739,37.531,22.525,2.206,1.226,5.705,3.041,18.463,50.867,6.278,6.018,42.582,2.850,17.840,72.178,6.789,25.306,34.420,1.883
|
||||||
|
08.02.2017,19.356,13.818,8.110,19.273,25.407,3.687,3.634,27.020,31.679,3.265,3.622,8.735,1.901,6.752,37.734,22.638,2.213,1.233,5.707,3.041,18.509,50.754,6.267,6.022,42.765,2.859,17.882,72.318,6.805,25.333,34.358,1.888
|
||||||
|
09.02.2017,19.350,13.813,8.107,19.277,25.320,3.681,3.634,27.020,31.753,3.257,3.618,8.752,1.899,6.743,37.863,22.506,2.209,1.236,5.692,3.040,18.255,50.632,6.269,6.012,42.969,2.849,17.861,72.178,6.847,25.268,34.266,1.885
|
||||||
|
10.02.2017,19.433,13.815,8.170,19.352,25.330,3.696,3.634,27.020,31.682,3.276,3.622,8.760,1.909,6.783,37.983,22.404,2.210,1.254,5.720,3.035,18.260,50.888,6.291,6.004,43.389,2.848,17.881,72.449,6.898,25.422,34.521,1.905
|
||||||
|
13.02.2017,19.486,13.813,8.151,19.418,25.316,3.700,3.634,27.020,31.830,3.276,3.629,8.771,1.908,6.775,37.956,22.349,2.209,1.249,5.715,3.035,18.248,50.924,6.262,6.001,43.816,2.851,17.878,72.485,6.897,25.421,34.421,1.906
|
||||||
|
14.02.2017,19.562,13.814,8.219,19.522,25.348,3.708,3.634,27.020,31.754,3.278,3.624,8.769,1.908,6.792,38.073,22.438,2.238,1.257,5.717,3.043,18.283,51.029,6.283,5.998,44.336,2.855,17.963,72.724,6.968,25.437,34.451,1.942
|
||||||
|
15.02.2017,19.636,13.815,8.312,19.565,25.367,3.727,3.634,27.020,31.788,3.298,3.623,8.761,1.920,6.836,38.268,22.361,2.241,1.258,5.753,3.052,18.373,51.245,6.281,5.985,44.315,2.859,17.999,73.069,6.988,25.596,34.660,1.962
|
||||||
|
16.02.2017,19.570,13.813,8.337,19.491,25.375,3.701,3.635,27.020,31.742,3.267,3.627,8.764,1.904,6.824,37.851,22.340,2.225,1.252,5.694,3.047,18.324,50.812,6.258,5.976,44.369,2.852,17.890,72.458,6.921,25.360,34.234,1.960
|
||||||
|
17.02.2017,19.452,13.814,8.207,19.399,25.404,3.696,3.635,27.020,31.524,3.269,3.632,8.764,1.903,6.846,37.812,22.502,2.206,1.239,5.698,3.048,18.245,50.688,6.239,5.976,43.616,2.860,17.912,72.496,6.908,25.372,34.364,1.939
|
||||||
|
20.02.2017,19.527,13.815,8.220,19.413,25.370,3.702,3.635,27.020,31.731,3.279,3.627,8.765,1.906,6.863,38.020,22.494,2.217,1.244,5.709,3.051,18.287,50.533,6.247,5.976,43.844,2.851,17.943,72.649,7.023,25.449,34.480,1.941
|
||||||
|
21.02.2017,19.631,13.812,8.276,19.524,25.399,3.727,3.635,27.020,31.840,3.304,3.625,8.804,1.918,6.926,38.312,22.555,2.236,1.255,5.753,3.066,18.309,50.987,6.276,5.984,44.415,2.854,18.027,73.185,7.070,25.644,34.745,1.948
|
||||||
|
22.02.2017,19.738,13.814,8.338,19.518,25.394,3.737,3.635,27.020,31.992,3.312,3.628,8.787,1.923,6.931,38.376,22.745,2.250,1.284,5.772,3.065,18.414,51.108,6.287,5.977,44.468,2.853,18.129,73.407,7.135,25.700,34.691,1.961
|
||||||
|
23.02.2017,19.735,13.815,8.339,19.484,25.338,3.718,3.635,27.020,31.929,3.294,3.635,8.767,1.914,6.909,38.303,22.649,2.251,1.286,5.744,3.068,18.464,50.934,6.272,5.977,44.158,2.845,18.107,73.058,7.156,25.556,34.474,1.983
|
||||||
|
24.02.2017,19.557,13.814,8.246,19.429,25.370,3.710,3.634,27.020,31.975,3.281,3.637,8.756,1.910,6.889,38.237,22.695,2.255,1.293,5.735,3.058,18.362,50.735,6.268,5.982,43.834,2.839,18.144,73.016,7.112,25.468,34.415,1.972
|
||||||
|
27.02.2017,19.587,13.817,8.210,19.453,25.337,3.717,3.635,27.020,31.683,3.289,3.637,8.781,1.913,6.943,38.264,22.730,2.252,1.290,5.750,3.057,18.380,50.796,6.263,5.987,44.240,2.828,18.161,73.212,7.092,25.522,34.582,1.970
|
||||||
|
28.02.2017,19.570,13.814,8.202,19.323,25.377,3.713,3.635,27.020,31.676,3.285,3.633,8.766,1.912,6.966,38.254,22.739,2.262,1.282,5.742,3.046,18.382,50.739,6.260,5.979,43.749,2.824,18.220,73.110,7.039,25.497,34.490,1.959
|
||||||
|
01.03.2017,19.651,13.814,8.249,19.242,25.379,3.730,3.635,27.020,31.585,3.305,3.641,8.774,1.920,7.060,38.381,22.548,2.243,1.280,5.769,3.049,18.275,50.972,6.290,5.978,44.003,2.836,18.210,73.318,7.031,25.654,34.733,1.961
|
||||||
|
02.03.2017,19.525,13.815,8.266,19.206,25.368,3.733,3.635,27.020,31.578,3.310,3.641,8.763,1.924,6.962,38.486,22.474,2.243,1.289,5.776,3.042,18.227,50.981,6.292,5.975,43.807,2.838,18.206,73.394,6.938,25.695,34.649,1.961
|
||||||
|
03.03.2017,19.359,13.816,8.175,19.081,25.313,3.710,3.635,27.020,31.288,3.294,3.643,8.725,1.911,6.905,38.273,22.365,2.217,1.302,5.741,3.026,18.003,50.792,6.282,5.961,43.534,2.833,18.099,72.947,6.860,25.574,34.447,1.955
|
||||||
|
06.03.2017,19.391,13.814,8.213,19.049,25.262,3.699,3.635,27.020,31.306,3.285,3.647,8.729,1.911,6.936,38.269,22.410,2.209,1.306,5.734,3.013,17.917,50.741,6.269,5.966,43.894,2.834,18.087,72.811,6.868,25.506,34.343,1.963
|
||||||
|
07.03.2017,19.412,13.816,8.196,19.042,25.182,3.704,3.635,27.020,31.157,3.290,3.647,8.729,1.914,6.947,38.339,22.404,2.222,1.312,5.745,3.021,17.831,50.752,6.272,5.954,44.004,2.838,18.111,72.790,6.947,25.547,34.468,1.972
|
||||||
|
08.03.2017,19.342,13.813,8.135,19.038,25.266,3.710,3.635,27.020,31.163,3.300,3.641,8.696,1.920,6.955,38.387,22.380,2.224,1.302,5.754,3.019,17.751,50.858,6.266,5.938,43.806,2.837,18.084,72.629,6.847,25.631,34.554,1.960
|
||||||
|
09.03.2017,19.245,13.817,8.084,18.938,25.232,3.708,3.635,27.020,31.185,3.298,3.635,8.684,1.913,6.940,38.388,22.347,2.211,1.295,5.742,2.987,17.692,50.880,6.259,5.939,43.186,2.829,18.035,72.457,6.824,25.613,34.494,1.931
|
||||||
|
10.03.2017,19.179,13.817,8.010,18.871,25.154,3.687,3.635,27.020,30.989,3.281,3.642,8.652,1.905,6.914,38.247,22.077,2.204,1.289,5.724,2.957,17.608,50.709,6.247,5.940,43.101,2.821,17.964,71.998,6.789,25.482,34.313,1.921
|
||||||
|
13.03.2017,19.193,13.813,8.040,18.825,25.134,3.667,3.635,27.020,30.963,3.263,3.635,8.649,1.897,6.927,38.297,22.084,2.209,1.290,5.699,2.959,17.569,50.336,6.229,5.930,42.920,2.825,17.925,71.725,6.763,25.339,34.246,1.929
|
||||||
|
14.03.2017,19.200,13.815,8.044,18.841,25.197,3.677,3.635,27.020,30.855,3.271,3.638,8.679,1.901,6.938,38.642,22.126,2.210,1.296,5.712,2.952,17.557,50.531,6.252,5.947,42.791,2.845,17.966,71.957,6.793,25.415,34.279,1.932
|
||||||
|
15.03.2017,19.311,13.814,8.053,18.905,25.216,3.680,3.635,27.020,31.028,3.274,3.637,8.693,1.903,6.956,38.736,22.185,2.219,1.299,5.718,2.958,17.684,50.602,6.254,5.948,43.065,2.826,18.010,72.154,6.840,25.434,34.326,1.948
|
||||||
|
16.03.2017,19.377,13.814,8.133,18.929,25.264,3.653,3.634,27.020,31.128,3.245,3.641,8.715,1.887,6.944,38.545,22.232,2.235,1.320,5.675,2.950,17.601,50.311,6.286,5.937,43.459,2.849,17.974,71.964,6.931,25.195,34.166,1.983
|
||||||
|
17.03.2017,19.387,13.814,8.106,18.894,25.258,3.644,3.634,27.020,31.087,3.240,3.646,8.756,1.885,6.927,38.449,22.245,2.227,1.313,5.671,2.969,17.647,50.137,6.287,5.922,43.610,2.856,17.943,72.177,6.951,25.154,34.129,1.972
|
||||||
|
20.03.2017,19.413,13.815,8.089,18.818,25.207,3.639,3.634,27.020,31.130,3.236,3.649,8.755,1.887,6.920,38.435,22.294,2.252,1.315,5.677,2.960,17.693,50.197,6.310,5.925,43.681,2.842,17.978,72.365,6.916,25.129,34.117,1.983
|
||||||
|
21.03.2017,19.340,13.813,8.144,18.827,25.136,3.632,3.634,27.020,31.143,3.220,3.648,8.764,1.878,6.920,38.328,22.220,2.236,1.317,5.651,2.961,17.645,49.959,6.339,5.919,43.716,2.847,17.904,72.178,6.932,25.009,33.955,1.989
|
||||||
|
22.03.2017,19.183,13.816,8.071,18.686,25.220,3.631,3.633,27.020,31.122,3.219,3.647,8.739,1.876,6.837,38.220,22.506,2.233,1.306,5.647,2.954,17.599,49.809,6.311,5.927,43.139,2.841,17.886,72.203,6.901,25.003,34.048,1.985
|
||||||
|
23.03.2017,19.114,13.814,8.044,18.778,25.247,3.639,3.634,27.020,31.320,3.225,3.643,8.738,1.880,6.870,38.262,22.640,2.238,1.312,5.656,2.954,17.653,49.754,6.329,5.931,43.439,2.841,17.909,72.419,6.922,25.050,34.112,2.004
|
||||||
|
24.03.2017,19.057,13.813,7.988,18.700,25.210,3.633,3.633,27.020,31.201,3.219,3.642,8.721,1.877,6.868,38.247,22.499,2.233,1.323,5.651,2.944,17.546,49.804,6.328,5.935,43.799,2.833,17.867,72.342,6.901,25.008,34.067,2.005
|
||||||
|
27.03.2017,18.946,13.814,7.951,18.586,25.223,3.609,3.632,27.020,31.273,3.194,3.632,8.710,1.864,6.866,38.153,22.527,2.237,1.318,5.625,2.931,17.528,49.561,6.337,5.939,43.671,2.829,17.835,72.239,6.892,24.813,33.823,1.964
|
||||||
|
28.03.2017,18.922,13.815,7.962,18.575,25.277,3.615,3.631,27.020,31.253,3.203,3.635,8.739,1.869,6.885,38.249,22.550,2.235,1.318,5.635,2.925,17.481,49.600,6.363,5.935,43.660,2.835,17.850,72.299,6.865,24.883,34.017,1.923
|
||||||
|
29.03.2017,19.224,13.814,8.031,18.791,25.224,3.649,3.631,27.020,31.280,3.236,3.634,8.727,1.888,6.933,38.739,22.674,2.259,1.328,5.689,2.941,17.635,50.009,6.374,5.930,44.148,2.829,18.007,73.016,6.885,25.140,34.338,1.913
|
||||||
|
30.03.2017,19.311,13.812,8.050,18.859,25.255,3.653,3.632,27.020,31.346,3.237,3.629,8.734,1.889,6.941,38.761,22.626,2.253,1.342,5.692,2.947,17.653,50.152,6.396,5.945,44.776,2.826,18.037,73.103,6.906,25.159,34.264,1.955
|
||||||
|
31.03.2017,19.332,13.820,8.000,18.948,25.273,3.672,3.634,27.030,31.591,3.254,3.630,8.786,1.897,6.957,38.952,22.610,2.263,1.350,5.713,2.948,17.656,50.374,6.395,5.937,44.816,2.836,18.093,73.596,6.950,25.282,34.381,1.898
|
||||||
|
03.04.2017,19.300,13.828,8.121,19.004,25.318,3.685,3.636,27.045,31.718,3.264,3.640,8.761,1.904,6.990,39.035,22.794,2.271,1.354,5.729,2.957,17.762,50.590,6.397,5.945,45.014,2.843,18.151,73.784,6.965,25.367,34.419,1.871
|
||||||
|
04.04.2017,19.177,13.833,8.106,18.896,25.347,3.691,3.638,27.055,31.601,3.269,3.638,8.745,1.906,6.970,39.092,23.014,2.258,1.344,5.733,2.947,17.723,50.587,6.355,5.954,45.032,2.815,18.154,73.762,6.950,25.404,34.468,1.846
|
||||||
|
05.04.2017,19.226,13.837,8.218,18.951,25.267,3.680,3.639,27.060,31.660,3.266,3.633,8.734,1.905,6.944,39.106,22.820,2.253,1.353,5.726,2.953,17.683,50.543,6.396,5.960,45.402,2.827,18.109,73.473,6.873,25.370,34.419,1.850
|
||||||
|
06.04.2017,18.966,13.675,8.049,18.675,24.996,3.636,3.598,26.750,31.254,3.228,3.586,8.636,1.880,6.878,38.869,22.625,2.217,1.335,5.652,2.918,17.513,49.999,6.328,5.914,44.552,2.789,17.903,72.516,6.766,25.076,34.042,1.815
|
||||||
|
07.04.2017,18.815,13.583,7.964,18.635,24.839,3.626,3.572,26.565,31.049,3.217,3.566,8.559,1.877,6.852,38.863,22.585,2.203,1.332,5.637,2.901,17.423,50.110,6.288,5.879,43.918,2.769,17.831,72.252,6.690,24.999,33.922,1.810
|
||||||
|
10.04.2017,18.789,13.565,7.997,18.746,24.836,3.634,3.568,26.530,31.090,3.228,3.568,8.522,1.888,6.848,38.850,22.536,2.197,1.343,5.655,2.901,17.410,50.546,6.271,5.882,43.850,2.761,17.830,72.386,6.718,25.082,33.998,1.805
|
||||||
|
11.04.2017,18.860,13.632,8.022,18.851,24.925,3.640,3.585,26.660,31.245,3.231,3.590,8.561,1.891,6.868,38.945,22.717,2.195,1.344,5.664,2.921,17.441,50.652,6.284,5.911,44.100,2.779,17.887,72.578,6.768,25.112,33.964,1.815
|
||||||
|
12.04.2017,18.849,13.647,8.009,18.913,25.001,3.652,3.590,26.695,31.464,3.239,3.588,8.556,1.896,6.885,38.918,22.968,2.208,1.339,5.685,2.933,17.424,50.904,6.284,5.905,44.138,2.794,17.955,73.005,6.847,25.172,34.099,1.839
|
||||||
|
13.04.2017,19.039,13.653,8.026,18.982,24.991,3.648,3.591,26.705,31.505,3.231,3.596,8.544,1.895,6.876,38.989,23.018,2.220,1.351,5.693,2.934,17.596,50.783,6.290,5.910,44.594,2.787,17.989,73.143,6.850,25.122,34.065,1.857
|
||||||
|
18.04.2017,18.906,13.683,8.063,18.751,25.040,3.641,3.598,26.760,31.725,3.223,3.600,8.559,1.884,6.836,38.778,23.021,2.192,1.350,5.680,2.937,17.623,50.431,6.316,5.922,44.686,2.790,17.919,72.912,6.790,25.053,34.052,1.872
|
||||||
|
19.04.2017,18.799,13.700,8.031,18.590,25.066,3.629,3.602,26.795,32.117,3.213,3.599,8.558,1.879,6.816,38.697,22.923,2.192,1.339,5.678,2.927,17.538,50.237,6.326,5.908,44.464,2.785,17.880,72.654,6.820,24.985,34.004,1.879
|
||||||
|
20.04.2017,18.849,13.759,7.982,18.560,25.145,3.638,3.618,26.910,32.066,3.221,3.609,8.584,1.880,6.832,38.754,22.962,2.204,1.333,5.694,2.920,17.586,50.375,6.316,5.928,44.515,2.797,17.930,72.822,6.889,25.043,34.180,1.908
|
||||||
|
21.04.2017,18.948,13.771,8.000,18.686,25.220,3.657,3.622,26.935,32.168,3.238,3.613,8.573,1.890,6.842,38.967,23.080,2.217,1.337,5.724,2.913,17.631,50.535,6.303,5.928,44.706,2.794,18.020,73.215,6.907,25.179,34.379,1.916
|
||||||
|
24.04.2017,18.701,13.701,7.903,18.391,24.795,3.589,3.602,26.795,31.586,3.176,3.591,8.602,1.855,6.765,38.337,22.390,2.189,1.329,5.616,2.898,17.350,49.636,6.316,5.916,44.148,2.795,17.736,71.904,6.878,24.706,33.677,1.905
|
||||||
|
25.04.2017,18.523,13.686,7.799,18.100,24.728,3.572,3.598,26.770,31.524,3.158,3.587,8.588,1.851,6.745,38.236,22.247,2.179,1.305,5.623,2.874,17.122,49.503,6.333,5.915,43.881,2.788,17.647,71.413,6.842,24.580,33.633,1.884
|
||||||
|
26.04.2017,18.505,13.775,7.805,18.216,24.868,3.590,3.622,26.945,31.739,3.179,3.606,8.638,1.862,6.802,38.576,22.205,2.187,1.306,5.689,2.882,17.046,49.641,6.378,5.942,43.632,2.818,17.720,71.754,6.911,24.735,33.860,1.869
|
||||||
|
27.04.2017,18.477,13.773,7.836,18.219,24.894,3.591,3.621,26.935,31.900,3.181,3.599,8.632,1.859,6.791,38.602,22.209,2.182,1.303,5.695,2.885,17.012,49.352,6.380,5.947,43.392,2.799,17.713,71.487,6.945,24.752,33.871,1.852
|
||||||
|
28.04.2017,18.401,13.763,7.755,18.050,24.858,3.573,3.619,26.920,31.862,3.167,3.606,8.617,1.848,6.800,38.316,22.109,2.165,1.298,5.674,2.887,16.932,49.157,6.377,5.935,43.350,2.795,17.643,71.245,6.947,24.629,33.720,1.858
|
||||||
|
02.05.2017,18.523,13.750,7.777,18.012,24.782,3.574,3.616,26.890,31.820,3.166,3.607,8.614,1.851,6.826,38.367,21.952,2.180,1.315,5.693,2.868,17.039,49.279,6.389,5.910,43.212,2.792,17.668,71.419,6.964,24.639,33.742,1.856
|
||||||
|
03.05.2017,18.389,13.739,7.807,17.923,24.853,3.570,3.613,26.870,31.810,3.162,3.606,8.608,1.849,6.804,38.356,21.935,2.175,1.308,5.697,2.861,17.041,49.226,6.409,5.908,42.960,2.791,17.640,71.354,6.960,24.607,33.697,1.844
|
||||||
|
04.05.2017,18.118,13.686,7.685,17.835,24.687,3.553,3.600,26.770,31.580,3.148,3.594,8.578,1.838,6.769,38.163,21.711,2.157,1.291,5.661,2.824,16.815,49.043,6.357,5.888,42.275,2.776,17.506,70.761,6.880,24.499,33.546,1.809
|
||||||
|
05.05.2017,18.057,13.691,7.671,17.742,24.707,3.541,3.601,26.780,31.617,3.139,3.605,8.598,1.833,6.780,37.954,21.721,2.141,1.282,5.633,2.818,16.831,48.887,6.350,5.889,41.752,2.765,17.388,70.392,6.857,24.433,33.447,1.799
|
||||||
|
09.05.2017,18.010,13.637,7.688,17.872,24.383,3.547,3.585,26.670,31.636,3.147,3.592,8.555,1.835,6.799,37.892,21.503,2.153,1.277,5.635,2.833,16.896,49.023,6.316,5.861,42.030,2.758,17.360,70.470,6.811,24.497,33.571,1.793
|
||||||
|
10.05.2017,18.075,13.619,7.734,17.877,24.334,3.548,3.581,26.640,31.721,3.145,3.589,8.578,1.833,6.803,37.931,21.510,2.158,1.284,5.633,2.821,16.998,49.051,6.316,5.855,42.323,2.747,17.361,70.423,6.822,24.486,33.467,1.815
|
||||||
|
11.05.2017,18.051,13.602,7.742,17.847,24.289,3.549,3.575,26.600,31.488,3.145,3.583,8.566,1.834,6.782,38.051,21.506,2.171,1.291,5.633,2.851,16.770,49.102,6.296,5.847,42.870,2.757,17.396,70.488,6.835,24.495,33.460,1.833
|
||||||
|
12.05.2017,18.041,13.586,7.765,17.786,24.243,3.542,3.572,26.575,31.417,3.135,3.580,8.567,1.833,6.775,37.999,21.463,2.167,1.293,5.623,2.837,16.724,49.133,6.301,5.848,42.646,2.749,17.353,70.343,6.808,24.435,33.364,1.816
|
||||||
|
15.05.2017,17.958,13.533,7.770,17.727,24.187,3.501,3.558,26.470,31.166,3.098,3.562,8.561,1.813,6.706,37.664,21.269,2.160,1.291,5.575,2.836,16.671,48.600,6.289,5.818,42.895,2.736,17.253,69.844,6.784,24.124,32.941,1.830
|
||||||
|
16.05.2017,17.702,13.507,7.699,17.545,24.110,3.469,3.551,26.420,30.769,3.067,3.556,8.535,1.796,6.626,37.290,21.023,2.139,1.277,5.528,2.813,16.422,48.122,6.292,5.809,42.406,2.718,17.092,69.184,6.717,23.888,32.735,1.818
|
||||||
|
17.05.2017,17.604,13.514,7.671,17.464,24.199,3.456,3.553,26.435,30.834,3.053,3.558,8.544,1.785,6.604,37.098,21.176,2.124,1.274,5.500,2.821,16.389,47.848,6.316,5.800,41.940,2.709,17.054,68.909,6.696,23.778,32.653,1.816
|
||||||
|
18.05.2017,17.806,13.614,7.634,17.539,24.489,3.472,3.579,26.630,31.195,3.074,3.572,8.572,1.792,6.638,36.874,21.641,2.112,1.252,5.529,2.829,16.584,47.852,6.304,5.830,41.274,2.727,17.191,69.365,6.589,23.927,32.956,1.768
|
||||||
|
19.05.2017,17.637,13.549,7.122,17.479,24.264,3.442,3.561,26.500,30.854,3.047,3.561,8.560,1.778,6.607,36.709,21.312,2.117,1.266,5.487,2.822,16.337,47.702,6.313,5.812,41.560,2.707,17.091,68.966,6.585,23.710,32.740,1.787
|
||||||
|
22.05.2017,17.598,13.540,7.137,17.456,24.275,3.420,3.558,26.485,30.669,3.026,3.561,8.580,1.771,6.578,36.502,21.162,2.109,1.264,5.473,2.826,16.430,47.411,6.316,5.808,41.554,2.706,16.999,68.539,6.617,23.557,32.523,1.787
|
||||||
|
23.05.2017,17.729,13.540,7.209,17.533,24.271,3.429,3.558,26.480,30.633,3.033,3.564,8.584,1.775,6.584,36.392,21.252,2.101,1.269,5.500,2.824,16.626,47.437,6.308,5.814,41.795,2.719,17.011,68.690,6.627,23.615,32.665,1.788
|
||||||
|
24.05.2017,17.678,13.531,7.271,17.515,24.219,3.432,3.557,26.465,30.648,3.035,3.564,8.589,1.776,6.586,36.521,21.146,2.106,1.273,5.507,2.820,16.636,47.300,6.321,5.816,41.903,2.717,17.028,68.827,6.628,23.642,32.707,1.825
|
||||||
|
25.05.2017,17.583,13.504,7.207,17.537,24.222,3.430,3.549,26.410,30.519,3.023,3.555,8.576,1.770,6.585,36.455,21.073,2.103,1.280,5.505,2.830,16.564,47.227,6.319,5.804,41.831,2.715,17.012,68.846,6.607,23.552,32.526,1.826
|
||||||
|
26.05.2017,17.575,13.513,7.221,17.529,24.277,3.444,3.552,26.435,30.316,3.029,3.561,8.600,1.776,6.606,36.598,21.251,2.111,1.278,5.530,2.812,16.668,47.425,6.319,5.801,41.434,2.717,17.075,69.328,6.614,23.606,32.635,1.833
|
||||||
|
29.05.2017,17.571,13.515,7.235,17.560,24.251,3.448,3.553,26.435,30.354,3.031,3.564,8.587,1.774,6.613,36.611,21.221,2.108,1.277,5.531,2.811,16.739,47.446,6.325,5.792,41.733,2.718,17.067,69.267,6.605,23.627,32.689,1.825
|
||||||
|
30.05.2017,17.655,13.531,7.253,17.590,24.271,3.457,3.557,26.465,30.496,3.040,3.568,8.575,1.778,6.669,36.637,21.349,2.107,1.277,5.532,2.803,16.755,47.567,6.338,5.797,41.838,2.709,17.093,69.410,6.661,23.690,32.775,1.802
|
||||||
|
31.05.2017,17.549,13.506,7.243,17.487,24.247,3.457,3.551,26.420,30.239,3.022,3.563,8.601,1.767,6.645,36.527,21.237,2.105,1.255,5.500,2.799,16.735,47.308,6.334,5.787,41.472,2.708,17.025,69.108,6.661,23.545,32.506,1.793
|
||||||
|
01.06.2017,17.385,13.495,7.305,17.427,24.253,3.461,3.548,26.395,30.261,3.023,3.560,8.582,1.768,6.633,36.538,21.141,2.100,1.263,5.493,2.782,16.632,47.345,6.310,5.778,41.572,2.701,16.991,68.973,6.649,23.554,32.607,1.802
|
||||||
|
02.06.2017,17.379,13.475,7.260,17.379,24.204,3.447,3.543,26.360,30.204,3.016,3.557,8.546,1.766,6.598,36.470,21.089,2.092,1.261,5.490,2.778,16.675,47.466,6.287,5.774,41.527,2.705,16.950,68.837,6.658,23.501,32.544,1.826
|
||||||
|
05.06.2017,17.503,13.458,7.181,17.346,24.246,3.439,3.538,26.325,30.212,3.003,3.557,8.569,1.761,6.595,36.360,21.178,2.092,1.273,5.489,2.774,16.695,47.358,6.292,5.764,41.314,2.701,16.938,68.786,6.654,23.401,32.371,1.837
|
||||||
|
06.06.2017,17.511,13.464,7.095,17.359,24.272,3.443,3.541,26.335,30.187,3.001,3.556,8.560,1.759,6.602,36.286,21.390,2.088,1.273,5.483,2.767,16.779,47.247,6.271,5.767,41.252,2.701,16.933,68.886,6.627,23.393,32.417,1.821
|
||||||
|
07.06.2017,17.728,13.453,7.172,17.445,24.269,3.452,3.538,26.315,30.281,3.010,3.553,8.526,1.763,6.616,36.455,21.431,2.086,1.287,5.506,2.769,16.869,47.350,6.279,5.757,41.426,2.687,16.978,68.947,6.618,23.459,32.551,1.823
|
||||||
|
08.06.2017,17.638,13.431,7.127,17.310,24.195,3.442,3.532,26.270,30.280,3.000,3.539,8.529,1.759,6.613,36.407,21.224,2.082,1.283,5.480,2.758,16.864,47.222,6.245,5.753,41.035,2.684,16.918,68.719,6.595,23.392,32.412,1.818
|
||||||
|
09.06.2017,17.674,13.404,7.192,17.366,24.136,3.452,3.525,26.220,29.919,3.009,3.536,8.532,1.765,6.656,36.521,21.242,2.087,1.289,5.501,2.753,16.895,47.391,6.258,5.746,41.186,2.686,16.950,68.889,6.648,23.463,32.528,1.821
|
||||||
|
12.06.2017,17.613,13.396,7.112,17.375,24.131,3.435,3.523,26.200,29.589,2.994,3.535,8.529,1.756,6.609,36.232,21.250,2.063,1.286,5.474,2.758,16.814,47.100,6.254,5.743,40.991,2.679,16.869,68.550,6.637,23.348,32.270,1.822
|
||||||
|
13.06.2017,17.572,13.366,7.058,17.557,24.096,3.429,3.516,26.145,29.686,2.988,3.527,8.517,1.754,6.610,36.216,21.181,2.065,1.287,5.468,2.765,16.838,47.100,6.235,5.726,40.966,2.683,16.867,68.717,6.616,23.308,32.242,1.825
|
||||||
|
14.06.2017,17.706,13.377,7.067,17.683,24.060,3.437,3.518,26.165,29.744,2.994,3.535,8.537,1.758,6.617,36.321,21.172,2.076,1.295,5.485,2.779,16.931,47.172,6.235,5.729,40.917,2.685,16.926,68.811,6.646,23.354,32.304,1.834
|
||||||
|
15.06.2017,17.799,13.401,7.168,17.672,24.100,3.450,3.525,26.210,29.893,3.008,3.542,8.517,1.766,6.663,36.328,21.316,2.075,1.299,5.499,2.767,16.903,47.081,6.222,5.712,40.736,2.694,16.967,69.044,6.674,23.468,32.454,1.823
|
||||||
|
16.06.2017,17.865,13.411,7.153,17.763,24.097,3.448,3.527,26.230,29.993,3.011,3.545,8.519,1.766,6.660,36.455,21.097,2.073,1.306,5.493,2.772,16.994,47.167,6.216,5.723,40.847,2.694,16.971,69.169,6.695,23.490,32.468,1.824
|
||||||
|
19.06.2017,17.799,13.381,7.083,17.652,24.076,3.429,3.519,26.170,29.901,2.996,3.530,8.522,1.759,6.634,36.273,21.060,2.061,1.301,5.463,2.769,16.982,46.724,6.212,5.701,40.152,2.686,16.903,68.855,6.663,23.369,32.270,1.801
|
||||||
|
20.06.2017,17.919,13.444,7.137,17.751,24.225,3.453,3.535,26.295,29.834,3.022,3.545,8.506,1.774,6.659,36.534,21.163,2.067,1.301,5.502,2.770,17.057,47.034,6.216,5.718,39.676,2.695,16.982,69.340,6.674,23.568,32.583,1.799
|
||||||
|
21.06.2017,17.823,13.429,7.090,17.746,24.190,3.453,3.530,26.265,29.912,3.021,3.540,8.496,1.769,6.655,36.531,21.146,2.063,1.297,5.496,2.760,17.055,46.860,6.199,5.721,39.656,2.686,16.961,69.308,6.681,23.565,32.482,1.808
|
||||||
|
22.06.2017,17.739,13.432,7.068,17.688,24.173,3.443,3.531,26.270,29.792,3.015,3.542,8.495,1.765,6.637,36.411,21.138,2.059,1.295,5.487,2.770,17.068,46.670,6.195,5.733,39.336,2.689,16.918,69.161,6.689,23.522,32.430,1.809
|
||||||
|
23.06.2017,17.806,13.442,7.050,17.784,24.230,3.441,3.536,26.295,29.945,3.017,3.545,8.506,1.766,6.643,36.464,21.142,2.068,1.304,5.487,2.779,17.132,46.849,6.214,5.753,39.440,2.691,16.965,69.325,6.709,23.530,32.448,1.819
|
||||||
|
26.06.2017,17.767,13.417,7.043,17.717,24.115,3.429,3.529,26.240,29.878,3.007,3.540,8.479,1.760,6.643,36.398,21.003,2.064,1.309,5.470,2.768,17.071,46.735,6.231,5.736,39.735,2.688,16.894,69.048,6.689,23.457,32.359,1.822
|
||||||
|
27.06.2017,17.725,13.430,7.063,17.635,24.136,3.418,3.533,26.270,29.731,2.986,3.546,8.491,1.748,6.624,36.103,20.819,2.046,1.305,5.431,2.760,17.019,46.332,6.232,5.756,39.478,2.689,16.809,68.621,6.646,23.290,32.124,1.805
|
||||||
|
28.06.2017,17.565,13.459,6.996,17.682,24.120,3.404,3.540,26.325,29.737,2.966,3.552,8.504,1.736,6.574,35.847,20.642,2.024,1.288,5.385,2.742,16.821,45.754,6.212,5.784,38.771,2.692,16.711,68.082,6.568,23.141,32.011,1.778
|
||||||
|
29.06.2017,17.680,13.436,7.016,17.683,24.036,3.397,3.535,26.285,29.870,2.950,3.546,8.478,1.728,6.589,35.658,20.442,2.016,1.284,5.364,2.747,16.795,45.551,6.186,5.746,39.058,2.704,16.688,67.776,6.548,23.032,31.958,1.773
|
||||||
|
30.06.2017,17.644,13.392,6.968,17.714,23.966,3.385,3.523,26.195,29.787,2.941,3.535,8.478,1.722,6.565,35.518,20.503,2.008,1.273,5.347,2.737,16.846,45.493,6.199,5.755,38.780,2.717,16.673,67.598,6.529,22.952,31.918,1.755
|
||||||
|
03.07.2017,17.609,13.367,6.929,17.717,23.890,3.385,3.515,26.140,29.809,2.945,3.522,8.453,1.720,6.574,35.453,20.351,2.002,1.261,5.350,2.750,16.773,45.422,6.170,5.728,38.749,2.713,16.641,67.668,6.486,22.993,31.993,1.743
|
||||||
|
04.07.2017,17.510,13.361,6.967,17.737,23.858,3.385,3.513,26.130,29.762,2.948,3.523,8.476,1.722,6.547,35.556,20.329,1.998,1.264,5.356,2.755,16.755,45.566,6.159,5.695,38.803,2.702,16.647,67.677,6.476,23.017,31.965,1.740
|
||||||
|
07.07.2017,17.378,13.334,6.939,17.610,23.742,3.362,3.507,26.080,29.471,2.926,3.517,8.458,1.705,6.475,35.386,20.091,1.979,1.257,5.316,2.727,16.643,45.130,6.162,5.687,37.841,2.712,16.547,67.055,6.290,22.852,31.720,1.708
|
||||||
|
10.07.2017,17.402,13.344,7.002,17.746,23.707,3.369,3.509,26.095,29.506,2.933,3.525,8.473,1.710,6.459,35.534,20.075,1.993,1.274,5.334,2.742,16.663,45.050,6.163,5.710,37.895,2.713,16.534,67.168,6.346,22.917,31.828,1.715
|
||||||
|
11.07.2017,17.430,13.358,7.013,17.750,23.661,3.369,3.513,26.125,29.582,2.933,3.525,8.479,1.711,6.408,35.465,20.039,1.991,1.272,5.330,2.747,16.548,45.189,6.153,5.719,37.681,2.710,16.552,67.175,6.306,22.907,31.779,1.690
|
||||||
|
12.07.2017,17.443,13.350,7.063,17.633,23.678,3.360,3.511,26.110,29.356,2.919,3.524,8.495,1.706,6.418,35.339,20.082,1.990,1.276,5.311,2.757,16.497,45.054,6.154,5.714,37.641,2.710,16.505,67.014,6.342,22.804,31.645,1.703
|
||||||
|
13.07.2017,17.684,13.354,7.110,17.934,23.720,3.374,3.512,26.120,29.610,2.929,3.527,8.501,1.714,6.461,35.498,20.222,2.011,1.285,5.330,2.763,16.769,45.253,6.169,5.724,38.145,2.737,16.614,67.389,6.407,22.878,31.814,1.730
|
||||||
|
14.07.2017,17.727,13.333,7.125,17.952,23.594,3.369,3.506,26.075,29.633,2.925,3.520,8.508,1.712,6.423,35.474,20.199,2.013,1.295,5.321,2.779,16.692,45.129,6.184,5.714,38.394,2.735,16.628,67.459,6.417,22.842,31.735,1.735
|
||||||
|
17.07.2017,17.824,13.340,7.162,17.988,23.692,3.364,3.508,26.090,29.730,2.916,3.520,8.524,1.708,6.415,35.375,20.248,2.019,1.297,5.309,2.789,16.701,44.905,6.201,5.721,38.414,2.735,16.642,67.624,6.441,22.762,31.650,1.759
|
||||||
|
18.07.2017,17.906,13.334,7.122,17.927,23.655,3.345,3.507,26.080,29.378,2.892,3.517,8.518,1.696,6.324,35.087,20.146,2.008,1.289,5.267,2.802,16.598,44.507,6.206,5.719,38.266,2.726,16.514,67.170,6.400,22.570,31.467,1.745
|
||||||
|
19.07.2017,17.917,13.312,7.146,17.903,23.678,3.344,3.501,26.035,29.420,2.891,3.511,8.497,1.695,6.307,35.108,20.173,2.012,1.291,5.266,2.799,16.644,44.399,6.179,5.700,38.227,2.723,16.506,67.201,6.419,22.572,31.565,1.748
|
||||||
|
20.07.2017,17.946,13.310,7.201,17.974,23.586,3.350,3.502,26.040,29.351,2.903,3.514,8.516,1.700,6.347,35.184,20.198,2.016,1.289,5.283,2.800,16.658,44.564,6.185,5.704,38.384,2.722,16.545,67.360,6.407,22.671,31.677,1.748
|
||||||
|
21.07.2017,17.699,13.303,7.178,17.742,23.542,3.303,3.499,26.020,29.036,2.862,3.510,8.520,1.679,6.272,34.733,20.057,1.998,1.277,5.217,2.788,16.627,44.076,6.141,5.694,37.917,2.705,16.393,66.809,6.330,22.347,31.173,1.728
|
||||||
|
24.07.2017,17.753,13.306,7.122,17.844,23.617,3.311,3.500,26.025,29.130,2.862,3.511,8.528,1.679,6.225,34.698,20.160,2.003,1.263,5.223,2.783,16.618,44.115,6.135,5.703,37.260,2.714,16.409,66.918,6.290,22.344,31.322,1.724
|
||||||
|
25.07.2017,17.710,13.301,7.081,17.813,23.525,3.297,3.499,26.020,29.103,2.849,3.509,8.519,1.670,6.242,34.557,19.975,1.993,1.256,5.196,2.796,16.562,43.972,6.110,5.703,37.190,2.723,16.361,66.566,6.246,22.250,31.224,1.710
|
||||||
|
26.07.2017,17.699,13.318,7.077,17.871,23.355,3.313,3.502,26.045,29.178,2.864,3.513,8.524,1.677,6.266,34.757,19.993,1.998,1.260,5.221,2.804,16.615,44.189,6.112,5.708,37.364,2.721,16.434,66.798,6.291,22.371,31.378,1.714
|
||||||
|
27.07.2017,17.821,13.315,7.070,17.832,23.185,3.305,3.502,26.045,29.267,2.851,3.513,8.546,1.672,6.259,34.712,19.981,1.998,1.263,5.206,2.801,16.745,44.061,6.122,5.705,37.374,2.718,16.387,66.855,6.305,22.269,31.223,1.718
|
||||||
|
28.07.2017,17.681,13.317,7.037,17.708,22.937,3.294,3.503,26.050,29.085,2.843,3.514,8.543,1.667,6.237,34.610,19.984,1.977,1.252,5.187,2.795,16.599,43.991,6.131,5.715,37.304,2.732,16.335,66.543,6.280,22.209,31.227,1.705
|
||||||
|
31.07.2017,17.727,13.335,7.101,17.834,22.961,3.306,3.507,26.080,29.165,2.847,3.519,8.561,1.669,6.244,34.647,20.109,1.982,1.250,5.194,2.803,16.646,44.058,6.136,5.720,37.011,2.733,16.384,66.766,6.313,22.240,31.260,1.697
|
||||||
|
01.08.2017,17.640,13.360,7.090,17.729,22.889,3.293,3.514,26.130,29.215,2.832,3.527,8.607,1.660,6.201,34.510,20.018,1.971,1.244,5.162,2.799,16.526,43.912,6.139,5.732,36.713,2.734,16.289,66.455,6.282,22.123,31.143,1.665
|
||||||
|
02.08.2017,17.602,13.354,7.063,17.610,22.802,3.287,3.512,26.125,29.229,2.827,3.527,8.598,1.659,6.177,34.705,19.952,1.966,1.234,5.157,2.795,16.407,43.918,6.142,5.730,36.424,2.724,16.263,66.442,6.260,22.099,31.201,1.664
|
||||||
|
03.08.2017,17.377,13.273,7.015,17.366,22.574,3.257,3.491,25.965,28.746,2.800,3.506,8.549,1.643,6.106,34.375,19.834,1.942,1.228,5.116,2.769,16.244,43.542,6.106,5.688,36.229,2.702,16.096,65.815,6.185,21.890,30.922,1.647
|
||||||
|
04.08.2017,17.506,13.325,7.061,17.473,22.676,3.269,3.504,26.065,28.865,2.809,3.519,8.564,1.649,6.070,34.517,19.946,1.954,1.233,5.133,2.784,16.362,43.736,6.146,5.711,36.467,2.714,16.193,66.031,6.220,21.961,31.019,1.647
|
||||||
|
07.08.2017,17.513,13.350,7.082,17.455,22.747,3.294,3.511,26.115,28.872,2.829,3.528,8.596,1.662,6.111,34.667,19.967,1.960,1.234,5.168,2.784,16.288,43.868,6.141,5.722,36.868,2.715,16.236,66.442,6.271,22.135,31.297,1.657
|
||||||
|
08.08.2017,17.572,13.369,7.084,17.479,22.781,3.305,3.515,26.150,28.838,2.829,3.534,8.588,1.663,6.143,34.779,20.066,1.966,1.236,5.165,2.805,16.309,43.848,6.145,5.729,36.886,2.724,16.269,66.582,6.273,22.134,31.197,1.681
|
||||||
|
09.08.2017,17.582,13.376,7.111,17.588,23.170,3.342,3.516,26.160,28.959,2.853,3.534,8.588,1.673,6.198,34.921,20.330,1.959,1.242,5.200,2.801,16.340,44.011,6.130,5.725,37.196,2.719,16.360,67.070,6.302,22.301,31.464,1.654
|
||||||
|
10.08.2017,17.570,13.376,7.067,17.535,23.069,3.352,3.517,26.160,28.966,2.853,3.535,8.566,1.672,6.201,34.782,20.314,1.950,1.242,5.196,2.802,16.204,43.920,6.124,5.719,37.211,2.734,16.346,67.036,6.308,22.297,31.403,1.669
|
||||||
|
11.08.2017,17.484,13.374,6.998,17.489,23.106,3.337,3.517,26.155,28.855,2.843,3.535,8.565,1.664,6.202,34.646,20.369,1.943,1.235,5.176,2.783,16.196,43.566,6.098,5.714,37.031,2.722,16.297,66.884,6.264,22.232,31.313,1.648
|
||||||
|
14.08.2017,17.428,13.356,6.965,17.444,22.869,3.320,3.512,26.120,28.724,2.831,3.532,8.581,1.659,6.179,34.534,20.201,1.943,1.247,5.157,2.795,16.153,43.279,6.100,5.714,37.113,2.730,16.261,66.571,6.284,22.143,31.226,1.669
|
||||||
|
15.08.2017,17.451,13.365,6.967,17.474,22.895,3.332,3.515,26.140,28.681,2.845,3.536,8.594,1.666,6.202,34.716,20.161,1.956,1.248,5.182,2.795,16.216,43.310,6.109,5.717,37.110,2.756,16.296,66.874,6.306,22.260,31.403,1.670
|
||||||
|
16.08.2017,17.479,13.317,7.015,17.472,22.838,3.323,3.502,26.045,28.623,2.844,3.523,8.566,1.663,6.133,34.651,20.069,1.951,1.251,5.175,2.797,16.128,43.301,6.093,5.684,37.399,2.747,16.257,66.838,6.304,22.243,31.303,1.681
|
||||||
|
17.08.2017,17.632,13.298,7.035,17.616,22.992,3.332,3.498,26.010,28.618,2.843,3.511,8.556,1.662,6.132,34.658,20.194,1.953,1.255,5.178,2.790,16.244,43.319,6.110,5.673,37.434,2.736,16.283,66.889,6.320,22.240,31.243,1.684
|
||||||
|
18.08.2017,17.611,13.348,7.028,17.573,23.132,3.335,3.511,26.110,28.633,2.844,3.527,8.601,1.665,6.140,34.678,20.396,1.949,1.244,5.185,2.802,16.285,43.149,6.099,5.689,37.454,2.738,16.307,66.957,6.311,22.243,31.264,1.682
|
||||||
|
21.08.2017,17.589,13.336,7.041,17.607,22.958,3.325,3.507,26.085,28.576,2.835,3.522,8.597,1.661,6.124,34.576,20.351,1.947,1.252,5.173,2.808,16.225,43.133,6.103,5.689,37.524,2.741,16.277,66.690,6.325,22.177,31.249,1.680
|
||||||
|
22.08.2017,17.523,13.336,7.035,17.617,22.952,3.327,3.507,26.085,28.442,2.831,3.523,8.589,1.661,6.124,34.570,20.263,1.954,1.255,5.176,2.804,16.137,43.238,6.092,5.687,37.541,2.734,16.271,66.665,6.336,22.160,31.234,1.678
|
||||||
|
23.08.2017,17.489,13.358,6.999,17.594,22.930,3.326,3.513,26.125,28.352,2.829,3.527,8.612,1.657,6.117,34.548,20.294,1.956,1.243,5.174,2.805,15.984,43.214,6.097,5.696,37.430,2.737,16.254,66.373,6.326,22.140,31.188,1.669
|
||||||
|
24.08.2017,17.456,13.343,7.035,17.653,22.942,3.319,3.509,26.100,28.368,2.825,3.521,8.581,1.656,6.143,34.522,20.223,1.960,1.252,5.166,2.819,15.958,43.279,6.104,5.695,37.396,2.744,16.242,66.286,6.353,22.106,31.162,1.674
|
||||||
|
25.08.2017,17.486,13.338,7.040,17.667,22.908,3.321,3.507,26.085,28.339,2.825,3.518,8.560,1.656,6.146,34.515,20.136,1.966,1.252,5.172,2.827,15.942,43.248,6.124,5.673,37.362,2.745,16.251,66.342,6.355,22.098,31.166,1.678
|
||||||
|
28.08.2017,17.390,13.344,6.942,17.553,22.917,3.307,3.508,26.100,28.268,2.798,3.520,8.585,1.641,6.109,34.249,20.024,1.954,1.239,5.129,2.818,15.858,42.900,6.129,5.677,37.455,2.743,16.154,65.904,6.356,21.887,30.888,1.678
|
||||||
|
29.08.2017,17.303,13.365,6.863,17.384,22.958,3.291,3.514,26.140,28.118,2.773,3.525,8.562,1.627,6.059,33.890,19.976,1.931,1.215,5.085,2.814,15.810,42.517,6.125,5.686,36.926,2.741,16.054,65.408,6.304,21.697,30.759,1.672
|
||||||
|
30.08.2017,17.336,13.314,6.885,17.396,22.791,3.316,3.501,26.045,28.223,2.792,3.514,8.520,1.637,6.099,34.128,19.829,1.944,1.223,5.116,2.804,15.797,42.664,6.115,5.671,37.276,2.739,16.099,65.751,6.317,21.849,31.089,1.671
|
||||||
|
31.08.2017,17.386,13.346,6.979,17.435,22.802,3.345,3.510,26.105,28.379,2.821,3.520,8.514,1.654,6.136,34.525,19.950,1.961,1.238,5.169,2.814,15.750,43.081,6.130,5.684,37.755,2.753,16.218,66.506,6.356,22.073,31.305,1.690
|
||||||
|
01.09.2017,17.358,13.330,6.965,17.582,22.790,3.336,3.506,26.075,28.328,2.795,3.514,8.547,1.639,6.120,34.161,19.860,1.952,1.226,5.121,2.817,15.671,42.806,6.148,5.673,37.885,2.751,16.151,65.940,6.362,21.871,30.913,1.691
|
||||||
|
04.09.2017,17.422,13.325,6.973,17.641,22.867,3.355,3.504,26.060,28.372,2.798,3.514,8.515,1.641,6.113,34.188,19.959,1.938,1.226,5.127,2.804,15.715,42.762,6.145,5.670,37.835,2.751,16.138,66.028,6.385,21.895,31.034,1.691
|
||||||
|
05.09.2017,17.503,13.329,7.034,17.713,22.866,3.351,3.506,26.075,28.425,2.802,3.517,8.511,1.644,6.144,34.195,20.062,1.940,1.229,5.147,2.812,15.784,42.879,6.156,5.673,37.861,2.754,16.181,66.098,6.370,21.928,31.081,1.695
|
||||||
|
06.09.2017,17.451,13.350,7.029,17.656,22.902,3.353,3.509,26.110,28.552,2.796,3.518,8.528,1.641,6.146,34.130,20.093,1.928,1.226,5.162,2.814,15.796,42.870,6.156,5.678,38.114,2.748,16.181,65.985,6.361,21.880,31.026,1.696
|
||||||
|
07.09.2017,17.486,13.345,7.035,17.892,22.871,3.361,3.510,26.110,28.551,2.790,3.513,8.541,1.638,6.178,34.056,20.027,1.932,1.229,5.179,2.809,15.704,42.944,6.153,5.679,38.229,2.740,16.221,65.924,6.381,21.801,30.977,1.702
|
||||||
|
08.09.2017,17.538,13.344,7.009,17.901,22.885,3.352,3.508,26.100,28.592,2.772,3.512,8.516,1.639,6.152,33.928,20.151,1.914,1.223,5.159,2.804,15.814,42.586,6.137,5.673,37.849,2.736,16.186,65.380,6.333,21.641,30.823,1.682
|
||||||
|
11.09.2017,17.482,13.332,7.038,17.940,22.865,3.332,3.505,26.075,28.730,2.782,3.511,8.513,1.651,6.169,33.996,19.999,1.920,1.229,5.178,2.783,15.802,42.756,6.144,5.671,37.999,2.724,16.163,65.607,6.394,21.736,31.097,1.680
|
||||||
|
12.09.2017,17.578,13.346,7.030,18.031,22.806,3.347,3.509,26.105,29.039,2.799,3.503,8.500,1.657,6.184,34.145,19.934,1.939,1.235,5.198,2.789,15.968,42.949,6.136,5.673,38.172,2.738,16.236,66.037,6.378,21.870,31.186,1.687
|
||||||
|
13.09.2017,17.504,13.345,6.957,17.947,22.703,3.336,3.508,26.100,28.923,2.789,3.496,8.473,1.650,6.162,34.043,19.804,1.933,1.226,5.197,2.777,15.864,42.744,6.099,5.672,37.784,2.734,16.191,65.835,6.330,21.787,30.985,1.661
|
||||||
|
14.09.2017,17.539,13.342,6.997,17.987,22.698,3.351,3.508,26.100,29.281,2.810,3.488,8.466,1.657,6.199,34.236,19.837,1.939,1.235,5.220,2.777,15.837,42.782,6.092,5.672,38.011,2.737,16.254,66.289,6.343,21.953,31.260,1.666
|
||||||
|
15.09.2017,17.489,13.336,6.981,17.958,22.712,3.331,3.505,26.080,29.619,2.788,3.487,8.442,1.646,6.193,34.012,19.621,1.927,1.234,5.202,2.793,15.894,42.543,6.099,5.670,37.885,2.744,16.226,65.891,6.340,21.794,30.935,1.654
|
||||||
|
18.09.2017,17.454,13.340,7.014,17.893,22.757,3.324,3.506,26.090,29.564,2.794,3.485,8.420,1.647,6.200,34.047,19.603,1.937,1.235,5.213,2.793,15.909,42.689,6.084,5.673,37.838,2.742,16.222,66.004,6.316,21.836,31.091,1.652
|
||||||
|
19.09.2017,17.441,13.348,6.975,17.747,22.633,3.313,3.508,26.105,29.455,2.795,3.492,8.452,1.642,6.202,33.900,19.567,1.932,1.229,5.203,2.794,15.921,42.775,6.101,5.674,37.565,2.740,16.169,65.922,6.249,21.809,31.037,1.637
|
||||||
|
20.09.2017,17.529,13.339,6.948,17.755,22.626,3.307,3.506,26.090,29.437,2.786,3.486,8.462,1.636,6.204,33.805,19.529,1.928,1.224,5.190,2.792,16.035,42.705,6.099,5.673,37.585,2.737,16.180,65.729,6.269,21.734,30.934,1.641
|
||||||
|
21.09.2017,17.372,13.337,6.981,17.717,22.514,3.322,3.506,26.085,29.561,2.805,3.486,8.406,1.648,6.216,33.777,19.482,1.931,1.228,5.215,2.803,16.024,42.883,6.094,5.672,37.780,2.741,16.190,66.095,6.239,21.891,31.189,1.640
|
||||||
|
22.09.2017,17.351,13.312,6.952,17.746,22.472,3.306,3.501,26.045,29.537,2.788,3.480,8.410,1.635,6.236,33.600,19.433,1.925,1.223,5.186,2.795,15.942,43.019,6.104,5.666,37.791,2.731,16.183,65.797,6.226,21.771,30.891,1.645
|
||||||
|
25.09.2017,17.450,13.312,7.015,17.795,22.520,3.314,3.499,26.035,29.609,2.807,3.479,8.392,1.646,6.248,33.695,19.546,1.938,1.232,5.218,2.808,15.971,43.277,6.099,5.661,38.248,2.731,16.240,66.255,6.228,21.937,31.210,1.652
|
||||||
|
26.09.2017,17.433,13.323,6.984,17.836,22.751,3.334,3.502,26.055,29.680,2.829,3.478,8.384,1.652,6.266,33.750,19.739,1.942,1.230,5.254,2.806,15.917,43.408,6.084,5.663,38.324,2.729,16.315,66.566,6.244,22.103,31.333,1.656
|
||||||
|
27.09.2017,17.414,13.314,6.972,17.890,22.740,3.341,3.499,26.035,29.742,2.839,3.471,8.367,1.650,6.252,33.746,19.636,1.941,1.226,5.253,2.789,15.971,43.475,6.051,5.661,38.134,2.715,16.310,66.536,6.212,22.176,31.356,1.637
|
||||||
|
29.09.2017,17.231,13.281,6.903,17.688,22.672,3.310,3.490,25.975,29.456,2.817,3.465,8.361,1.633,6.248,33.704,19.556,1.922,1.210,5.213,2.760,15.884,43.259,6.035,5.648,38.056,2.692,16.205,66.037,6.183,22.003,31.063,1.629
|
||||||
|
02.10.2017,17.288,13.289,6.996,17.696,22.805,3.327,3.493,25.995,29.399,2.834,3.467,8.347,1.635,6.246,33.892,19.619,1.931,1.208,5.228,2.772,15.913,43.305,6.027,5.666,38.208,2.706,16.244,66.201,6.179,22.135,31.283,1.623
|
||||||
|
03.10.2017,17.243,13.257,6.992,17.644,22.651,3.316,3.484,25.930,29.207,2.825,3.458,8.309,1.629,6.246,33.682,19.531,1.928,1.208,5.206,2.762,15.838,43.139,6.016,5.648,38.043,2.710,16.191,66.024,6.158,22.065,31.096,1.609
|
||||||
|
04.10.2017,17.277,13.230,7.014,17.638,22.604,3.302,3.478,25.885,29.161,2.815,3.450,8.318,1.630,6.259,33.784,19.538,1.929,1.211,5.197,2.768,15.785,43.108,6.025,5.651,38.185,2.713,16.159,65.956,6.163,21.970,30.959,1.620
|
||||||
|
05.10.2017,17.204,13.207,7.021,17.629,22.521,3.307,3.471,25.835,28.979,2.818,3.442,8.296,1.635,6.267,33.776,19.565,1.931,1.207,5.204,2.763,15.736,43.101,6.008,5.647,38.258,2.713,16.146,65.970,6.165,22.003,31.049,1.614
|
||||||
|
06.10.2017,17.142,13.199,6.974,17.534,22.500,3.314,3.468,25.815,28.819,2.825,3.440,8.291,1.633,6.268,33.726,19.524,1.931,1.192,5.204,2.754,15.635,43.040,5.997,5.641,38.118,2.705,16.136,65.899,6.096,22.050,31.066,1.606
|
||||||
|
09.10.2017,17.099,13.237,6.968,17.572,22.521,3.330,3.478,25.890,29.027,2.824,3.451,8.290,1.631,6.284,33.730,19.563,1.928,1.183,5.209,2.760,15.607,43.017,6.010,5.658,37.784,2.715,16.168,66.041,5.932,22.044,30.992,1.598
|
||||||
|
10.10.2017,17.093,13.243,6.930,17.566,22.481,3.342,3.480,25.900,28.971,2.814,3.452,8.337,1.625,6.278,33.656,19.542,1.939,1.182,5.204,2.762,15.523,42.649,6.030,5.660,37.932,2.719,16.190,66.033,5.967,21.960,30.873,1.603
|
||||||
|
11.10.2017,17.042,13.233,6.900,17.487,22.458,3.320,3.477,25.880,28.849,2.803,3.446,8.350,1.619,6.257,33.582,19.499,1.933,1.165,5.181,2.759,15.475,42.520,6.040,5.643,37.807,2.715,16.130,65.928,5.972,21.878,30.895,1.612
|
||||||
|
12.10.2017,17.061,13.237,6.886,17.512,22.410,3.316,3.478,25.890,28.692,2.797,3.448,8.373,1.617,6.256,33.564,19.450,1.929,1.166,5.172,2.766,15.526,42.372,6.059,5.636,37.848,2.700,16.126,65.921,5.967,21.837,30.868,1.617
|
||||||
|
13.10.2017,17.114,13.195,6.880,17.482,22.381,3.317,3.467,25.810,29.001,2.799,3.437,8.363,1.619,6.245,33.644,19.482,1.935,1.153,5.176,2.764,15.602,42.494,6.066,5.628,37.886,2.688,16.118,65.974,5.971,21.852,30.912,1.633
|
||||||
|
16.10.2017,17.182,13.172,6.907,17.410,22.376,3.313,3.461,25.765,29.023,2.795,3.433,8.378,1.619,6.242,33.714,19.520,1.937,1.145,5.176,2.767,15.692,42.589,6.080,5.621,38.176,2.687,16.146,66.031,5.996,21.828,30.882,1.639
|
||||||
|
17.10.2017,17.163,13.157,6.889,17.454,22.371,3.307,3.457,25.735,28.871,2.803,3.428,8.371,1.620,6.236,33.657,19.506,1.938,1.147,5.182,2.760,15.716,42.627,6.084,5.619,38.149,2.686,16.132,66.082,5.978,21.885,30.954,1.629
|
||||||
|
18.10.2017,17.126,13.142,6.913,17.462,22.254,3.303,3.453,25.705,28.791,2.802,3.424,8.339,1.619,6.227,33.636,19.385,1.934,1.162,5.181,2.747,15.590,42.494,6.080,5.603,38.108,2.679,16.105,65.988,5.948,21.881,30.867,1.617
|
||||||
|
19.10.2017,17.111,13.152,6.848,17.441,22.291,3.286,3.456,25.725,28.638,2.786,3.426,8.338,1.607,6.219,33.428,19.316,1.921,1.155,5.147,2.731,15.257,42.263,6.068,5.598,37.728,2.667,16.022,65.609,5.936,21.736,30.634,1.605
|
||||||
|
20.10.2017,17.060,13.135,6.848,17.399,22.150,3.285,3.451,25.690,28.661,2.786,3.423,8.337,1.608,6.233,33.450,19.205,1.923,1.151,5.145,2.729,15.211,42.210,6.064,5.589,37.849,2.664,16.001,65.545,5.935,21.739,30.705,1.589
|
||||||
|
23.10.2017,17.065,13.108,6.838,17.277,22.136,3.290,3.444,25.640,28.786,2.799,3.416,8.323,1.613,6.254,33.588,19.191,1.933,1.150,5.154,2.731,15.229,42.410,6.067,5.574,38.022,2.659,16.029,65.817,5.907,21.840,30.818,1.595
|
||||||
|
24.10.2017,16.924,13.080,6.729,17.194,22.022,3.280,3.437,25.580,28.646,2.787,3.405,8.291,1.607,6.212,33.409,19.095,1.927,1.137,5.138,2.724,15.043,42.067,6.033,5.559,37.837,2.652,15.965,65.540,5.846,21.753,30.619,1.585
|
||||||
|
25.10.2017,16.747,13.086,6.713,17.102,21.890,3.269,3.438,25.590,28.792,2.783,3.406,8.250,1.599,6.194,33.446,19.037,1.931,1.132,5.127,2.711,14.943,41.932,6.042,5.566,37.703,2.642,15.948,65.426,5.819,21.715,30.586,1.569
|
||||||
|
26.10.2017,16.785,13.081,6.730,17.017,21.915,3.283,3.437,25.585,28.747,2.791,3.404,8.245,1.604,6.191,33.579,19.136,1.939,1.144,5.144,2.697,14.952,42.001,6.041,5.564,37.768,2.632,15.988,65.674,5.774,21.779,30.689,1.529
|
||||||
|
27.10.2017,16.890,13.126,6.708,17.150,22.076,3.324,3.450,25.670,28.952,2.834,3.417,8.247,1.624,6.242,33.995,19.368,1.960,1.148,5.214,2.693,15.119,42.658,6.046,5.579,37.826,2.636,16.143,66.398,5.784,22.117,31.208,1.557
|
||||||
|
30.10.2017,16.929,13.112,6.785,17.194,22.101,3.324,3.446,25.645,29.147,2.831,3.409,8.246,1.626,6.259,34.033,19.454,1.964,1.156,5.212,2.704,15.134,42.688,6.043,5.576,38.208,2.641,16.195,66.441,5.848,22.086,30.998,1.570
|
||||||
|
31.10.2017,16.880,13.125,6.747,17.115,22.090,3.327,3.450,25.670,29.219,2.828,3.413,8.237,1.627,6.262,34.069,19.448,1.972,1.152,5.213,2.695,15.098,42.750,6.049,5.580,37.825,2.635,16.187,66.416,5.814,22.060,30.987,1.562
|
||||||
|
01.11.2017,16.885,13.065,6.700,17.054,21.956,3.330,3.434,25.555,29.242,2.821,3.397,8.197,1.621,6.257,34.066,19.276,1.979,1.147,5.201,2.701,15.155,42.588,6.035,5.551,37.844,2.620,16.167,66.370,5.755,22.008,30.924,1.559
|
||||||
|
02.11.2017,16.910,13.046,6.718,17.088,21.947,3.320,3.435,25.560,28.822,2.813,3.395,8.220,1.620,6.257,33.975,19.234,1.974,1.149,5.188,2.695,15.154,42.647,6.032,5.557,37.564,2.619,16.133,66.292,5.744,21.949,30.821,1.569
|
||||||
|
03.11.2017,16.894,13.116,6.752,17.297,22.046,3.324,3.447,25.650,28.847,2.820,3.405,8.267,1.630,6.282,34.104,19.311,1.975,1.158,5.196,2.704,15.272,43.014,6.052,5.579,37.558,2.620,16.180,66.443,5.713,22.006,30.882,1.558
|
||||||
|
06.11.2017,16.937,13.095,6.711,17.322,22.092,3.332,3.441,25.610,28.973,2.832,3.398,8.230,1.634,6.290,34.170,19.361,1.987,1.157,5.222,2.713,15.247,43.247,6.039,5.580,37.480,2.622,16.193,66.636,5.714,22.098,31.011,1.556
|
||||||
|
07.11.2017,16.933,13.084,6.766,17.334,22.143,3.335,3.438,25.590,29.067,2.836,3.393,8.229,1.638,6.298,34.052,19.382,1.991,1.159,5.233,2.707,15.308,43.060,6.036,5.570,37.603,2.626,16.225,66.800,5.727,22.132,31.010,1.562
|
||||||
|
08.11.2017,16.934,13.069,6.786,17.324,22.072,3.329,3.434,25.560,28.913,2.828,3.390,8.196,1.631,6.279,33.932,19.432,1.981,1.156,5.215,2.698,15.282,43.037,6.037,5.523,37.197,2.627,16.191,66.604,5.673,22.053,30.879,1.555
|
||||||
|
09.11.2017,16.859,13.053,6.761,17.280,22.029,3.308,3.431,25.530,28.811,2.815,3.387,8.181,1.624,6.246,33.791,19.381,1.964,1.149,5.219,2.700,15.275,42.841,6.029,5.502,36.967,2.622,16.141,66.324,5.680,21.954,30.776,1.544
|
||||||
|
10.11.2017,16.812,13.061,6.711,17.307,22.038,3.302,3.433,25.545,28.907,2.810,3.386,8.188,1.620,6.197,33.643,19.340,1.959,1.149,5.230,2.701,15.227,42.787,6.038,5.490,37.007,2.622,16.114,66.180,5.665,21.923,30.770,1.525
|
||||||
|
13.11.2017,16.748,13.070,6.663,17.255,22.050,3.303,3.435,25.565,28.717,2.812,3.385,8.193,1.618,6.189,33.503,19.352,1.959,1.143,5.232,2.692,15.145,42.804,6.037,5.491,36.869,2.617,16.107,66.311,5.640,21.929,30.777,1.505
|
||||||
|
14.11.2017,16.641,13.070,6.643,17.120,21.957,3.281,3.435,25.565,28.536,2.790,3.385,8.194,1.606,6.144,33.278,19.179,1.952,1.140,5.190,2.666,14.956,42.557,6.032,5.500,36.436,2.585,16.000,65.837,5.622,21.766,30.550,1.513
|
||||||
|
15.11.2017,16.477,13.126,6.545,17.002,21.990,3.276,3.449,25.670,28.554,2.778,3.398,8.225,1.602,6.135,33.251,19.239,1.966,1.132,5.194,2.633,14.976,42.663,6.044,5.538,36.034,2.574,15.995,65.671,5.587,21.684,30.498,1.508
|
||||||
|
16.11.2017,16.486,13.068,6.628,17.014,21.872,3.275,3.435,25.560,28.662,2.780,3.379,8.179,1.603,6.169,33.236,19.203,1.979,1.135,5.199,2.647,14.858,42.739,6.037,5.510,36.280,2.586,16.003,65.876,5.623,21.712,30.677,1.521
|
||||||
|
20.11.2017,16.396,13.069,6.662,16.969,21.898,3.273,3.435,25.565,28.741,2.778,3.380,8.182,1.603,6.176,33.335,19.354,1.980,1.144,5.230,2.628,14.826,42.783,6.042,5.496,36.443,2.567,16.006,66.217,5.534,21.701,30.619,1.544
|
||||||
|
21.11.2017,16.510,13.055,6.684,17.015,21.935,3.286,3.431,25.530,28.851,2.789,3.375,8.159,1.610,6.177,33.568,19.363,2.000,1.150,5.263,2.635,14.862,43.042,6.037,5.482,36.703,2.567,16.081,66.476,5.514,21.791,30.745,1.548
|
||||||
|
22.11.2017,16.427,13.020,6.652,17.016,21.938,3.277,3.422,25.470,28.678,2.775,3.361,8.123,1.603,6.153,33.400,19.353,1.990,1.153,5.272,2.633,14.820,42.803,6.042,5.474,36.932,2.578,16.034,66.229,5.469,21.677,30.534,1.562
|
||||||
|
23.11.2017,16.392,13.017,6.630,16.946,21.924,3.269,3.421,25.460,28.605,2.751,3.360,8.132,1.590,6.119,33.275,19.319,1.982,1.152,5.231,2.642,14.803,42.532,6.044,5.472,36.768,2.586,15.964,65.750,5.484,21.487,30.315,1.549
|
||||||
|
24.11.2017,16.304,12.992,6.621,16.836,21.814,3.240,3.414,25.410,28.511,2.739,3.360,8.149,1.584,6.085,33.073,19.217,1.974,1.149,5.196,2.630,14.725,42.241,6.034,5.472,36.579,2.576,15.893,65.458,5.426,21.392,30.180,1.529
|
||||||
|
27.11.2017,16.245,13.003,6.595,16.777,21.706,3.224,3.417,25.430,28.455,2.727,3.365,8.171,1.574,6.077,32.988,19.164,1.957,1.149,5.172,2.607,14.695,42.371,6.043,5.478,36.610,2.562,15.834,65.234,5.443,21.279,30.022,1.550
|
||||||
|
28.11.2017,16.300,13.018,6.650,16.740,21.799,3.248,3.421,25.460,28.440,2.745,3.375,8.186,1.586,6.117,33.251,19.252,1.981,1.156,5.220,2.613,14.843,42.574,6.052,5.486,36.757,2.571,15.931,65.761,5.456,21.418,30.414,1.560
|
||||||
|
29.11.2017,16.301,13.022,6.714,16.784,21.839,3.264,3.423,25.475,28.849,2.760,3.375,8.176,1.595,6.147,33.495,19.264,1.998,1.163,5.278,2.615,14.862,42.891,6.064,5.486,36.924,2.569,15.998,66.212,5.443,21.542,30.535,1.575
|
||||||
|
30.11.2017,16.280,13.036,6.596,16.700,21.792,3.254,3.426,25.495,28.988,2.756,3.374,8.152,1.591,6.153,33.380,19.157,1.981,1.159,5.262,2.591,14.720,42.764,6.077,5.490,36.846,2.570,15.950,65.990,5.469,21.519,30.482,1.581
|
||||||
|
01.12.2017,16.264,13.047,6.575,16.683,21.835,3.250,3.430,25.525,28.967,2.749,3.378,8.135,1.588,6.150,33.294,19.088,1.983,1.150,5.251,2.585,14.710,42.630,6.059,5.512,36.619,2.566,15.937,65.802,5.463,21.475,30.396,1.567
|
||||||
|
04.12.2017,16.400,13.068,6.629,17.001,21.911,3.255,3.435,25.560,29.141,2.757,3.383,8.164,1.593,6.169,33.453,19.088,1.985,1.157,5.303,2.590,14.790,42.533,6.082,5.531,36.638,2.565,15.982,66.053,5.525,21.541,30.559,1.581
|
||||||
|
05.12.2017,16.539,13.117,6.718,17.145,21.977,3.275,3.448,25.655,29.092,2.772,3.396,8.172,1.602,6.198,33.624,19.234,1.994,1.162,5.324,2.612,14.922,42.778,6.106,5.537,36.896,2.574,16.081,66.425,5.596,21.656,30.671,1.602
|
||||||
|
06.12.2017,16.467,13.105,6.712,17.137,21.950,3.281,3.445,25.635,29.022,2.777,3.396,8.152,1.602,6.175,33.623,19.344,1.986,1.155,5.323,2.628,14.954,42.806,6.083,5.534,36.735,2.583,16.097,66.468,5.635,21.695,30.724,1.604
|
||||||
|
07.12.2017,16.336,13.093,6.611,16.927,21.889,3.284,3.442,25.610,29.076,2.782,3.394,8.132,1.603,6.173,33.647,19.270,1.988,1.148,5.316,2.626,14.846,42.937,6.079,5.525,36.707,2.573,16.092,66.607,5.620,21.727,30.721,1.592
|
||||||
|
08.12.2017,16.362,13.064,6.649,16.952,21.832,3.289,3.434,25.555,29.194,2.788,3.385,8.126,1.607,6.181,33.770,19.178,1.990,1.150,5.324,2.617,14.896,43.072,6.081,5.515,36.691,2.562,16.085,66.620,5.658,21.765,30.735,1.593
|
||||||
|
11.12.2017,16.334,13.090,6.625,16.879,21.921,3.280,3.440,25.600,29.010,2.780,3.393,8.153,1.602,6.153,33.696,19.155,1.992,1.148,5.324,2.590,15.016,43.113,6.091,5.526,36.685,2.556,16.066,66.540,5.681,21.705,30.614,1.594
|
||||||
|
12.12.2017,16.493,13.100,6.565,16.979,21.959,3.291,3.443,25.625,29.094,2.789,3.399,8.151,1.605,6.153,33.815,19.191,2.000,1.141,5.339,2.610,15.118,43.159,6.096,5.530,36.983,2.580,16.116,66.798,5.689,21.776,30.749,1.599
|
||||||
|
13.12.2017,16.548,13.115,6.593,16.997,22.025,3.303,3.446,25.650,29.179,2.800,3.398,8.159,1.609,6.165,33.922,19.289,2.004,1.138,5.349,2.611,15.192,43.297,6.086,5.537,37.108,2.589,16.161,67.099,5.671,21.860,30.845,1.605
|
||||||
|
14.12.2017,16.624,13.132,6.496,16.900,21.980,3.282,3.451,25.685,29.128,2.777,3.404,8.178,1.597,6.149,33.684,19.254,1.992,1.135,5.308,2.628,15.167,42.876,6.083,5.544,36.899,2.583,16.102,66.674,5.602,21.682,30.568,1.610
|
||||||
|
15.12.2017,16.695,13.130,6.554,17.041,22.006,3.292,3.450,25.680,29.098,2.784,3.403,8.193,1.602,6.167,33.960,19.384,1.999,1.135,5.331,2.625,15.285,43.135,6.090,5.543,36.943,2.579,16.152,66.921,5.631,21.750,30.770,1.627
|
||||||
|
18.12.2017,16.686,13.133,6.631,16.914,22.043,3.291,3.450,25.685,29.119,2.786,3.405,8.190,1.603,6.199,33.897,19.359,2.003,1.143,5.335,2.606,15.257,43.131,6.105,5.556,37.147,2.579,16.150,66.713,5.679,21.775,30.792,1.694
|
||||||
|
19.12.2017,16.654,13.119,6.603,16.874,22.039,3.287,3.447,25.660,28.993,2.775,3.401,8.195,1.598,6.204,33.893,19.260,2.003,1.139,5.318,2.595,15.214,43.186,6.111,5.554,37.026,2.579,16.116,66.376,5.662,21.702,30.665,1.704
|
||||||
|
20.12.2017,16.643,13.128,6.593,16.869,21.940,3.296,3.449,25.675,29.073,2.770,3.403,8.210,1.597,6.199,33.809,19.140,2.003,1.126,5.321,2.601,15.130,43.153,6.107,5.548,36.936,2.590,16.108,66.188,5.660,21.677,30.650,1.711
|
||||||
|
21.12.2017,16.644,13.149,6.559,16.938,21.931,3.294,3.454,25.715,28.971,2.772,3.410,8.233,1.599,6.213,33.868,19.106,2.006,1.123,5.317,2.578,15.189,43.197,6.123,5.547,37.081,2.576,16.120,66.211,5.674,21.684,30.686,1.704
|
||||||
|
22.12.2017,16.764,13.163,6.547,17.096,21.939,3.306,3.459,25.750,29.084,2.779,3.414,8.258,1.602,6.234,33.925,19.162,2.018,1.113,5.327,2.602,15.228,43.361,6.132,5.547,37.287,2.593,16.166,66.298,5.690,21.725,30.761,1.710
|
||||||
|
27.12.2017,16.874,13.211,6.590,17.198,21.951,3.315,3.471,25.840,29.170,2.780,3.428,8.310,1.602,6.236,33.861,19.183,2.023,1.099,5.320,2.620,15.358,43.483,6.169,5.557,37.672,2.617,16.214,66.210,5.682,21.723,30.784,1.745
|
||||||
|
28.12.2017,16.729,13.113,6.495,17.045,21.913,3.289,3.444,25.645,28.878,2.749,3.414,8.265,1.585,6.178,33.535,19.036,2.009,1.093,5.284,2.599,15.214,43.051,6.134,5.513,37.293,2.605,16.060,65.857,5.641,21.489,30.470,1.740
|
||||||
|
29.12.2017,16.639,13.058,6.428,16.983,21.824,3.274,3.431,25.540,28.786,2.725,3.439,8.230,1.569,6.134,33.333,18.915,1.996,1.079,5.261,2.596,15.155,42.709,6.114,5.482,36.770,2.594,15.936,65.270,5.617,21.291,30.249,1.723
|
||||||
|
Binary file not shown.
366
src/data/report_USD_2023.csv
Normal file
366
src/data/report_USD_2023.csv
Normal file
@@ -0,0 +1,366 @@
|
|||||||
|
Datum,Kurz,Den v týdnu,Svátek,Poznámka
|
||||||
|
01.01.2023,30.098,neděle,ano,Dopočítaný kurz (svátek)
|
||||||
|
02.01.2023,22.63,pondělí,ne,
|
||||||
|
03.01.2023,22.878,úterý,ne,
|
||||||
|
04.01.2023,22.672,středa,ne,
|
||||||
|
05.01.2023,22.676,čtvrtek,ne,
|
||||||
|
06.01.2023,22.911,pátek,ne,
|
||||||
|
07.01.2023,22.911,sobota,ne,Dopočítaný kurz
|
||||||
|
08.01.2023,22.911,neděle,ne,Dopočítaný kurz
|
||||||
|
09.01.2023,22.43,pondělí,ne,
|
||||||
|
10.01.2023,22.368,úterý,ne,
|
||||||
|
11.01.2023,22.357,středa,ne,
|
||||||
|
12.01.2023,22.312,čtvrtek,ne,
|
||||||
|
13.01.2023,22.206,pátek,ne,
|
||||||
|
14.01.2023,22.206,sobota,ne,Dopočítaný kurz
|
||||||
|
15.01.2023,22.206,neděle,ne,Dopočítaný kurz
|
||||||
|
16.01.2023,22.191,pondělí,ne,
|
||||||
|
17.01.2023,22.1,úterý,ne,
|
||||||
|
18.01.2023,22.103,středa,ne,
|
||||||
|
19.01.2023,22.12,čtvrtek,ne,
|
||||||
|
20.01.2023,22.097,pátek,ne,
|
||||||
|
21.01.2023,22.097,sobota,ne,Dopočítaný kurz
|
||||||
|
22.01.2023,22.097,neděle,ne,Dopočítaný kurz
|
||||||
|
23.01.2023,21.971,pondělí,ne,
|
||||||
|
24.01.2023,21.987,úterý,ne,
|
||||||
|
25.01.2023,21.888,středa,ne,
|
||||||
|
26.01.2023,21.866,čtvrtek,ne,
|
||||||
|
27.01.2023,21.929,pátek,ne,
|
||||||
|
28.01.2023,21.929,sobota,ne,Dopočítaný kurz
|
||||||
|
29.01.2023,21.929,neděle,ne,Dopočítaný kurz
|
||||||
|
30.01.2023,21.88,pondělí,ne,
|
||||||
|
31.01.2023,21.961,úterý,ne,
|
||||||
|
01.02.2023,21.797,středa,ne,
|
||||||
|
02.02.2023,21.657,čtvrtek,ne,
|
||||||
|
03.02.2023,21.694,pátek,ne,
|
||||||
|
04.02.2023,21.694,sobota,ne,Dopočítaný kurz
|
||||||
|
05.02.2023,21.694,neděle,ne,Dopočítaný kurz
|
||||||
|
06.02.2023,22.126,pondělí,ne,
|
||||||
|
07.02.2023,22.271,úterý,ne,
|
||||||
|
08.02.2023,22.152,středa,ne,
|
||||||
|
09.02.2023,21.997,čtvrtek,ne,
|
||||||
|
10.02.2023,22.161,pátek,ne,
|
||||||
|
11.02.2023,22.161,sobota,ne,Dopočítaný kurz
|
||||||
|
12.02.2023,22.161,neděle,ne,Dopočítaný kurz
|
||||||
|
13.02.2023,22.216,pondělí,ne,
|
||||||
|
14.02.2023,22.079,úterý,ne,
|
||||||
|
15.02.2023,22.117,středa,ne,
|
||||||
|
16.02.2023,22.136,čtvrtek,ne,
|
||||||
|
17.02.2023,22.318,pátek,ne,
|
||||||
|
18.02.2023,22.318,sobota,ne,Dopočítaný kurz
|
||||||
|
19.02.2023,22.318,neděle,ne,Dopočítaný kurz
|
||||||
|
20.02.2023,22.197,pondělí,ne,
|
||||||
|
21.02.2023,22.252,úterý,ne,
|
||||||
|
22.02.2023,22.238,středa,ne,
|
||||||
|
23.02.2023,22.309,čtvrtek,ne,
|
||||||
|
24.02.2023,22.369,pátek,ne,
|
||||||
|
25.02.2023,22.369,sobota,ne,Dopočítaný kurz
|
||||||
|
26.02.2023,22.369,neděle,ne,Dopočítaný kurz
|
||||||
|
27.02.2023,22.38,pondělí,ne,
|
||||||
|
28.02.2023,22.123,úterý,ne,
|
||||||
|
01.03.2023,21.92,středa,ne,
|
||||||
|
02.03.2023,22.145,čtvrtek,ne,
|
||||||
|
03.03.2023,22.148,pátek,ne,
|
||||||
|
04.03.2023,22.148,sobota,ne,Dopočítaný kurz
|
||||||
|
05.03.2023,22.148,neděle,ne,Dopočítaný kurz
|
||||||
|
06.03.2023,22.112,pondělí,ne,
|
||||||
|
07.03.2023,22.031,úterý,ne,
|
||||||
|
08.03.2023,22.379,středa,ne,
|
||||||
|
09.03.2023,22.378,čtvrtek,ne,
|
||||||
|
10.03.2023,22.325,pátek,ne,
|
||||||
|
11.03.2023,22.325,sobota,ne,Dopočítaný kurz
|
||||||
|
12.03.2023,22.325,neděle,ne,Dopočítaný kurz
|
||||||
|
13.03.2023,22.179,pondělí,ne,
|
||||||
|
14.03.2023,22.155,úterý,ne,
|
||||||
|
15.03.2023,22.696,středa,ne,
|
||||||
|
16.03.2023,22.66,čtvrtek,ne,
|
||||||
|
17.03.2023,22.545,pátek,ne,
|
||||||
|
18.03.2023,22.545,sobota,ne,Dopočítaný kurz
|
||||||
|
19.03.2023,22.545,neděle,ne,Dopočítaný kurz
|
||||||
|
20.03.2023,22.38,pondělí,ne,
|
||||||
|
21.03.2023,22.125,úterý,ne,
|
||||||
|
22.03.2023,21.998,středa,ne,
|
||||||
|
23.03.2023,21.748,čtvrtek,ne,
|
||||||
|
24.03.2023,22.037,pátek,ne,
|
||||||
|
25.03.2023,22.037,sobota,ne,Dopočítaný kurz
|
||||||
|
26.03.2023,22.037,neděle,ne,Dopočítaný kurz
|
||||||
|
27.03.2023,22.03,pondělí,ne,
|
||||||
|
28.03.2023,21.827,úterý,ne,
|
||||||
|
29.03.2023,21.785,středa,ne,
|
||||||
|
30.03.2023,21.633,čtvrtek,ne,
|
||||||
|
31.03.2023,21.598,pátek,ne,
|
||||||
|
01.04.2023,21.598,sobota,ne,Dopočítaný kurz
|
||||||
|
02.04.2023,21.598,neděle,ne,Dopočítaný kurz
|
||||||
|
03.04.2023,21.571,pondělí,ne,
|
||||||
|
04.04.2023,21.478,úterý,ne,
|
||||||
|
05.04.2023,21.395,středa,ne,
|
||||||
|
06.04.2023,21.45,čtvrtek,ne,
|
||||||
|
07.04.2023,21.45,pátek,ano,Dopočítaný kurz (svátek)
|
||||||
|
08.04.2023,21.45,sobota,ne,Dopočítaný kurz
|
||||||
|
09.04.2023,21.45,neděle,ne,Dopočítaný kurz
|
||||||
|
10.04.2023,21.45,pondělí,ano,Dopočítaný kurz (svátek)
|
||||||
|
11.04.2023,21.518,úterý,ne,
|
||||||
|
12.04.2023,21.439,středa,ne,
|
||||||
|
13.04.2023,21.128,čtvrtek,ne,
|
||||||
|
14.04.2023,21.11,pátek,ne,
|
||||||
|
15.04.2023,21.11,sobota,ne,Dopočítaný kurz
|
||||||
|
16.04.2023,21.11,neděle,ne,Dopočítaný kurz
|
||||||
|
17.04.2023,21.27,pondělí,ne,
|
||||||
|
18.04.2023,21.312,úterý,ne,
|
||||||
|
19.04.2023,21.463,středa,ne,
|
||||||
|
20.04.2023,21.479,čtvrtek,ne,
|
||||||
|
21.04.2023,21.448,pátek,ne,
|
||||||
|
22.04.2023,21.448,sobota,ne,Dopočítaný kurz
|
||||||
|
23.04.2023,21.448,neděle,ne,Dopočítaný kurz
|
||||||
|
24.04.2023,21.312,pondělí,ne,
|
||||||
|
25.04.2023,21.294,úterý,ne,
|
||||||
|
26.04.2023,21.287,středa,ne,
|
||||||
|
27.04.2023,21.287,čtvrtek,ne,
|
||||||
|
28.04.2023,21.411,pátek,ne,
|
||||||
|
29.04.2023,21.411,sobota,ne,Dopočítaný kurz
|
||||||
|
30.04.2023,21.411,neděle,ne,Dopočítaný kurz
|
||||||
|
01.05.2023,21.411,pondělí,ano,Dopočítaný kurz (svátek)
|
||||||
|
02.05.2023,21.522,úterý,ne,
|
||||||
|
03.05.2023,21.36,středa,ne,
|
||||||
|
04.05.2023,21.171,čtvrtek,ne,
|
||||||
|
05.05.2023,21.248,pátek,ne,
|
||||||
|
06.05.2023,21.248,sobota,ne,Dopočítaný kurz
|
||||||
|
07.05.2023,21.248,neděle,ne,Dopočítaný kurz
|
||||||
|
08.05.2023,21.248,pondělí,ano,Dopočítaný kurz (svátek)
|
||||||
|
09.05.2023,21.311,úterý,ne,
|
||||||
|
10.05.2023,21.384,středa,ne,
|
||||||
|
11.05.2023,21.491,čtvrtek,ne,
|
||||||
|
12.05.2023,21.678,pátek,ne,
|
||||||
|
13.05.2023,21.678,sobota,ne,Dopočítaný kurz
|
||||||
|
14.05.2023,21.678,neděle,ne,Dopočítaný kurz
|
||||||
|
15.05.2023,21.671,pondělí,ne,
|
||||||
|
16.05.2023,21.758,úterý,ne,
|
||||||
|
17.05.2023,21.826,středa,ne,
|
||||||
|
18.05.2023,21.889,čtvrtek,ne,
|
||||||
|
19.05.2023,21.979,pátek,ne,
|
||||||
|
20.05.2023,21.979,sobota,ne,Dopočítaný kurz
|
||||||
|
21.05.2023,21.979,neděle,ne,Dopočítaný kurz
|
||||||
|
22.05.2023,21.877,pondělí,ne,
|
||||||
|
23.05.2023,21.962,úterý,ne,
|
||||||
|
24.05.2023,21.948,středa,ne,
|
||||||
|
25.05.2023,22.024,čtvrtek,ne,
|
||||||
|
26.05.2023,21.991,pátek,ne,
|
||||||
|
27.05.2023,21.991,sobota,ne,Dopočítaný kurz
|
||||||
|
28.05.2023,21.991,neděle,ne,Dopočítaný kurz
|
||||||
|
29.05.2023,22.117,pondělí,ne,
|
||||||
|
30.05.2023,22.076,úterý,ne,
|
||||||
|
31.05.2023,22.219,středa,ne,
|
||||||
|
01.06.2023,22.154,čtvrtek,ne,
|
||||||
|
02.06.2023,21.982,pátek,ne,
|
||||||
|
03.06.2023,21.982,sobota,ne,Dopočítaný kurz
|
||||||
|
04.06.2023,21.982,neděle,ne,Dopočítaný kurz
|
||||||
|
05.06.2023,22.049,pondělí,ne,
|
||||||
|
06.06.2023,22.027,úterý,ne,
|
||||||
|
07.06.2023,22.06,středa,ne,
|
||||||
|
08.06.2023,22.005,čtvrtek,ne,
|
||||||
|
09.06.2023,21.955,pátek,ne,
|
||||||
|
10.06.2023,21.955,sobota,ne,Dopočítaný kurz
|
||||||
|
11.06.2023,21.955,neděle,ne,Dopočítaný kurz
|
||||||
|
12.06.2023,22.066,pondělí,ne,
|
||||||
|
13.06.2023,22.059,úterý,ne,
|
||||||
|
14.06.2023,22.004,středa,ne,
|
||||||
|
15.06.2023,21.93,čtvrtek,ne,
|
||||||
|
16.06.2023,21.723,pátek,ne,
|
||||||
|
17.06.2023,21.723,sobota,ne,Dopočítaný kurz
|
||||||
|
18.06.2023,21.723,neděle,ne,Dopočítaný kurz
|
||||||
|
19.06.2023,21.771,pondělí,ne,
|
||||||
|
20.06.2023,21.715,úterý,ne,
|
||||||
|
21.06.2023,21.758,středa,ne,
|
||||||
|
22.06.2023,21.546,čtvrtek,ne,
|
||||||
|
23.06.2023,21.734,pátek,ne,
|
||||||
|
24.06.2023,21.734,sobota,ne,Dopočítaný kurz
|
||||||
|
25.06.2023,21.734,neděle,ne,Dopočítaný kurz
|
||||||
|
26.06.2023,21.668,pondělí,ne,
|
||||||
|
27.06.2023,21.55,úterý,ne,
|
||||||
|
28.06.2023,21.668,středa,ne,
|
||||||
|
29.06.2023,21.669,čtvrtek,ne,
|
||||||
|
30.06.2023,21.831,pátek,ne,
|
||||||
|
01.07.2023,21.831,sobota,ne,Dopočítaný kurz
|
||||||
|
02.07.2023,21.831,neděle,ne,Dopočítaný kurz
|
||||||
|
03.07.2023,21.758,pondělí,ne,
|
||||||
|
04.07.2023,21.74,úterý,ne,
|
||||||
|
05.07.2023,21.74,středa,ano,Dopočítaný kurz (svátek)
|
||||||
|
06.07.2023,21.74,čtvrtek,ano,Dopočítaný kurz (svátek)
|
||||||
|
07.07.2023,21.997,pátek,ne,
|
||||||
|
08.07.2023,21.997,sobota,ne,Dopočítaný kurz
|
||||||
|
09.07.2023,21.997,neděle,ne,Dopočítaný kurz
|
||||||
|
10.07.2023,21.764,pondělí,ne,
|
||||||
|
11.07.2023,21.703,úterý,ne,
|
||||||
|
12.07.2023,21.611,středa,ne,
|
||||||
|
13.07.2023,21.243,čtvrtek,ne,
|
||||||
|
14.07.2023,21.192,pátek,ne,
|
||||||
|
15.07.2023,21.192,sobota,ne,Dopočítaný kurz
|
||||||
|
16.07.2023,21.192,neděle,ne,Dopočítaný kurz
|
||||||
|
17.07.2023,21.154,pondělí,ne,
|
||||||
|
18.07.2023,21.178,úterý,ne,
|
||||||
|
19.07.2023,21.324,středa,ne,
|
||||||
|
20.07.2023,21.399,čtvrtek,ne,
|
||||||
|
21.07.2023,21.618,pátek,ne,
|
||||||
|
22.07.2023,21.618,sobota,ne,Dopočítaný kurz
|
||||||
|
23.07.2023,21.618,neděle,ne,Dopočítaný kurz
|
||||||
|
24.07.2023,21.781,pondělí,ne,
|
||||||
|
25.07.2023,21.754,úterý,ne,
|
||||||
|
26.07.2023,21.747,středa,ne,
|
||||||
|
27.07.2023,21.622,čtvrtek,ne,
|
||||||
|
28.07.2023,21.815,pátek,ne,
|
||||||
|
29.07.2023,21.815,sobota,ne,Dopočítaný kurz
|
||||||
|
30.07.2023,21.815,neděle,ne,Dopočítaný kurz
|
||||||
|
31.07.2023,21.695,pondělí,ne,
|
||||||
|
01.08.2023,21.849,úterý,ne,
|
||||||
|
02.08.2023,21.809,středa,ne,
|
||||||
|
03.08.2023,21.969,čtvrtek,ne,
|
||||||
|
04.08.2023,22.18,pátek,ne,
|
||||||
|
05.08.2023,22.18,sobota,ne,Dopočítaný kurz
|
||||||
|
06.08.2023,22.18,neděle,ne,Dopočítaný kurz
|
||||||
|
07.08.2023,22.074,pondělí,ne,
|
||||||
|
08.08.2023,22.154,úterý,ne,
|
||||||
|
09.08.2023,22.159,středa,ne,
|
||||||
|
10.08.2023,21.99,čtvrtek,ne,
|
||||||
|
11.08.2023,21.907,pátek,ne,
|
||||||
|
12.08.2023,21.907,sobota,ne,Dopočítaný kurz
|
||||||
|
13.08.2023,21.907,neděle,ne,Dopočítaný kurz
|
||||||
|
14.08.2023,21.995,pondělí,ne,
|
||||||
|
15.08.2023,22.094,úterý,ne,
|
||||||
|
16.08.2023,22.06,středa,ne,
|
||||||
|
17.08.2023,22.089,čtvrtek,ne,
|
||||||
|
18.08.2023,22.121,pátek,ne,
|
||||||
|
19.08.2023,22.121,sobota,ne,Dopočítaný kurz
|
||||||
|
20.08.2023,22.121,neděle,ne,Dopočítaný kurz
|
||||||
|
21.08.2023,22.032,pondělí,ne,
|
||||||
|
22.08.2023,22.045,úterý,ne,
|
||||||
|
23.08.2023,22.327,středa,ne,
|
||||||
|
24.08.2023,22.264,čtvrtek,ne,
|
||||||
|
25.08.2023,22.323,pátek,ne,
|
||||||
|
26.08.2023,22.323,sobota,ne,Dopočítaný kurz
|
||||||
|
27.08.2023,22.323,neděle,ne,Dopočítaný kurz
|
||||||
|
28.08.2023,22.338,pondělí,ne,
|
||||||
|
29.08.2023,22.367,úterý,ne,
|
||||||
|
30.08.2023,22.123,středa,ne,
|
||||||
|
31.08.2023,22.13,čtvrtek,ne,
|
||||||
|
01.09.2023,22.254,pátek,ne,
|
||||||
|
02.09.2023,22.254,sobota,ne,Dopočítaný kurz
|
||||||
|
03.09.2023,22.254,neděle,ne,Dopočítaný kurz
|
||||||
|
04.09.2023,22.319,pondělí,ne,
|
||||||
|
05.09.2023,22.51,úterý,ne,
|
||||||
|
06.09.2023,22.548,středa,ne,
|
||||||
|
07.09.2023,22.763,čtvrtek,ne,
|
||||||
|
08.09.2023,22.856,pátek,ne,
|
||||||
|
09.09.2023,22.856,sobota,ne,Dopočítaný kurz
|
||||||
|
10.09.2023,22.856,neděle,ne,Dopočítaný kurz
|
||||||
|
11.09.2023,22.871,pondělí,ne,
|
||||||
|
12.09.2023,22.951,úterý,ne,
|
||||||
|
13.09.2023,22.829,středa,ne,
|
||||||
|
14.09.2023,22.831,čtvrtek,ne,
|
||||||
|
15.09.2023,22.996,pátek,ne,
|
||||||
|
16.09.2023,22.996,sobota,ne,Dopočítaný kurz
|
||||||
|
17.09.2023,22.996,neděle,ne,Dopočítaný kurz
|
||||||
|
18.09.2023,22.892,pondělí,ne,
|
||||||
|
19.09.2023,22.8,úterý,ne,
|
||||||
|
20.09.2023,22.803,středa,ne,
|
||||||
|
21.09.2023,22.985,čtvrtek,ne,
|
||||||
|
22.09.2023,22.897,pátek,ne,
|
||||||
|
23.09.2023,22.897,sobota,ne,Dopočítaný kurz
|
||||||
|
24.09.2023,22.897,neděle,ne,Dopočítaný kurz
|
||||||
|
25.09.2023,22.933,pondělí,ne,
|
||||||
|
26.09.2023,23.032,úterý,ne,
|
||||||
|
27.09.2023,23.214,středa,ne,
|
||||||
|
28.09.2023,23.214,čtvrtek,ano,Dopočítaný kurz (svátek)
|
||||||
|
29.09.2023,22.967,pátek,ne,
|
||||||
|
30.09.2023,22.967,sobota,ne,Dopočítaný kurz
|
||||||
|
01.10.2023,22.967,neděle,ne,Dopočítaný kurz
|
||||||
|
02.10.2023,23.227,pondělí,ne,
|
||||||
|
03.10.2023,23.384,úterý,ne,
|
||||||
|
04.10.2023,23.229,středa,ne,
|
||||||
|
05.10.2023,23.204,čtvrtek,ne,
|
||||||
|
06.10.2023,23.146,pátek,ne,
|
||||||
|
07.10.2023,23.146,sobota,ne,Dopočítaný kurz
|
||||||
|
08.10.2023,23.146,neděle,ne,Dopočítaný kurz
|
||||||
|
09.10.2023,23.248,pondělí,ne,
|
||||||
|
10.10.2023,23.212,úterý,ne,
|
||||||
|
11.10.2023,23.149,středa,ne,
|
||||||
|
12.10.2023,23.128,čtvrtek,ne,
|
||||||
|
13.10.2023,23.443,pátek,ne,
|
||||||
|
14.10.2023,23.443,sobota,ne,Dopočítaný kurz
|
||||||
|
15.10.2023,23.443,neděle,ne,Dopočítaný kurz
|
||||||
|
16.10.2023,23.414,pondělí,ne,
|
||||||
|
17.10.2023,23.28,úterý,ne,
|
||||||
|
18.10.2023,23.354,středa,ne,
|
||||||
|
19.10.2023,23.353,čtvrtek,ne,
|
||||||
|
20.10.2023,23.337,pátek,ne,
|
||||||
|
21.10.2023,23.337,sobota,ne,Dopočítaný kurz
|
||||||
|
22.10.2023,23.337,neděle,ne,Dopočítaný kurz
|
||||||
|
23.10.2023,23.25,pondělí,ne,
|
||||||
|
24.10.2023,23.196,úterý,ne,
|
||||||
|
25.10.2023,23.345,středa,ne,
|
||||||
|
26.10.2023,23.448,čtvrtek,ne,
|
||||||
|
27.10.2023,23.408,pátek,ne,
|
||||||
|
28.10.2023,23.408,sobota,ano,Dopočítaný kurz (svátek)
|
||||||
|
29.10.2023,23.408,neděle,ne,Dopočítaný kurz
|
||||||
|
30.10.2023,23.178,pondělí,ne,
|
||||||
|
31.10.2023,23.135,úterý,ne,
|
||||||
|
01.11.2023,23.443,středa,ne,
|
||||||
|
02.11.2023,23.096,čtvrtek,ne,
|
||||||
|
03.11.2023,22.809,pátek,ne,
|
||||||
|
04.11.2023,22.809,sobota,ne,Dopočítaný kurz
|
||||||
|
05.11.2023,22.809,neděle,ne,Dopočítaný kurz
|
||||||
|
06.11.2023,22.781,pondělí,ne,
|
||||||
|
07.11.2023,23.062,úterý,ne,
|
||||||
|
08.11.2023,23.125,středa,ne,
|
||||||
|
09.11.2023,22.968,čtvrtek,ne,
|
||||||
|
10.11.2023,22.957,pátek,ne,
|
||||||
|
11.11.2023,22.957,sobota,ne,Dopočítaný kurz
|
||||||
|
12.11.2023,22.957,neděle,ne,Dopočítaný kurz
|
||||||
|
13.11.2023,23.05,pondělí,ne,
|
||||||
|
14.11.2023,22.899,úterý,ne,
|
||||||
|
15.11.2023,22.542,středa,ne,
|
||||||
|
16.11.2023,22.547,čtvrtek,ne,
|
||||||
|
17.11.2023,22.547,pátek,ano,Dopočítaný kurz (svátek)
|
||||||
|
18.11.2023,22.547,sobota,ne,Dopočítaný kurz
|
||||||
|
19.11.2023,22.547,neděle,ne,Dopočítaný kurz
|
||||||
|
20.11.2023,22.46,pondělí,ne,
|
||||||
|
21.11.2023,22.373,úterý,ne,
|
||||||
|
22.11.2023,22.449,středa,ne,
|
||||||
|
23.11.2023,22.353,čtvrtek,ne,
|
||||||
|
24.11.2023,22.366,pátek,ne,
|
||||||
|
25.11.2023,22.366,sobota,ne,Dopočítaný kurz
|
||||||
|
26.11.2023,22.366,neděle,ne,Dopočítaný kurz
|
||||||
|
27.11.2023,22.244,pondělí,ne,
|
||||||
|
28.11.2023,22.26,úterý,ne,
|
||||||
|
29.11.2023,22.089,středa,ne,
|
||||||
|
30.11.2023,22.213,čtvrtek,ne,
|
||||||
|
01.12.2023,22.389,pátek,ne,
|
||||||
|
02.12.2023,22.389,sobota,ne,Dopočítaný kurz
|
||||||
|
03.12.2023,22.389,neděle,ne,Dopočítaný kurz
|
||||||
|
04.12.2023,22.442,pondělí,ne,
|
||||||
|
05.12.2023,22.523,úterý,ne,
|
||||||
|
06.12.2023,22.587,středa,ne,
|
||||||
|
07.12.2023,22.616,čtvrtek,ne,
|
||||||
|
08.12.2023,22.601,pátek,ne,
|
||||||
|
09.12.2023,22.601,sobota,ne,Dopočítaný kurz
|
||||||
|
10.12.2023,22.601,neděle,ne,Dopočítaný kurz
|
||||||
|
11.12.2023,22.663,pondělí,ne,
|
||||||
|
12.12.2023,22.597,úterý,ne,
|
||||||
|
13.12.2023,22.698,středa,ne,
|
||||||
|
14.12.2023,22.378,čtvrtek,ne,
|
||||||
|
15.12.2023,22.364,pátek,ne,
|
||||||
|
16.12.2023,22.364,sobota,ne,Dopočítaný kurz
|
||||||
|
17.12.2023,22.364,neděle,ne,Dopočítaný kurz
|
||||||
|
18.12.2023,22.49,pondělí,ne,
|
||||||
|
19.12.2023,22.393,úterý,ne,
|
||||||
|
20.12.2023,22.417,středa,ne,
|
||||||
|
21.12.2023,22.3,čtvrtek,ne,
|
||||||
|
22.12.2023,22.308,pátek,ne,
|
||||||
|
23.12.2023,22.308,sobota,ne,Dopočítaný kurz
|
||||||
|
24.12.2023,22.308,neděle,ano,Dopočítaný kurz (svátek)
|
||||||
|
25.12.2023,22.308,pondělí,ano,Dopočítaný kurz (svátek)
|
||||||
|
26.12.2023,22.308,úterý,ano,Dopočítaný kurz (svátek)
|
||||||
|
27.12.2023,22.299,středa,ne,
|
||||||
|
28.12.2023,22.239,čtvrtek,ne,
|
||||||
|
29.12.2023,22.376,pátek,ne,
|
||||||
|
30.12.2023,22.376,sobota,ne,Dopočítaný kurz
|
||||||
|
31.12.2023,22.376,neděle,ne,Dopočítaný kurz
|
||||||
|
367
src/data/report_USD_2024.csv
Normal file
367
src/data/report_USD_2024.csv
Normal file
@@ -0,0 +1,367 @@
|
|||||||
|
Datum,Kurz,Den v týdnu,Svátek,Poznámka
|
||||||
|
01.01.2024,22.376,pondělí,ano,Dopočítaný kurz (svátek)
|
||||||
|
02.01.2024,22.526,úterý,ne,
|
||||||
|
03.01.2024,22.6,středa,ne,
|
||||||
|
04.01.2024,22.513,čtvrtek,ne,
|
||||||
|
05.01.2024,22.523,pátek,ne,
|
||||||
|
06.01.2024,22.523,sobota,ne,Dopočítaný kurz
|
||||||
|
07.01.2024,22.523,neděle,ne,Dopočítaný kurz
|
||||||
|
08.01.2024,22.366,pondělí,ne,
|
||||||
|
09.01.2024,22.472,úterý,ne,
|
||||||
|
10.01.2024,22.427,středa,ne,
|
||||||
|
11.01.2024,22.44,čtvrtek,ne,
|
||||||
|
12.01.2024,22.554,pátek,ne,
|
||||||
|
13.01.2024,22.554,sobota,ne,Dopočítaný kurz
|
||||||
|
14.01.2024,22.554,neděle,ne,Dopočítaný kurz
|
||||||
|
15.01.2024,22.579,pondělí,ne,
|
||||||
|
16.01.2024,22.72,úterý,ne,
|
||||||
|
17.01.2024,22.76,středa,ne,
|
||||||
|
18.01.2024,22.758,čtvrtek,ne,
|
||||||
|
19.01.2024,22.793,pátek,ne,
|
||||||
|
20.01.2024,22.793,sobota,ne,Dopočítaný kurz
|
||||||
|
21.01.2024,22.793,neděle,ne,Dopočítaný kurz
|
||||||
|
22.01.2024,22.749,pondělí,ne,
|
||||||
|
23.01.2024,22.849,úterý,ne,
|
||||||
|
24.01.2024,22.726,středa,ne,
|
||||||
|
25.01.2024,22.73,čtvrtek,ne,
|
||||||
|
26.01.2024,22.752,pátek,ne,
|
||||||
|
27.01.2024,22.752,sobota,ne,Dopočítaný kurz
|
||||||
|
28.01.2024,22.752,neděle,ne,Dopočítaný kurz
|
||||||
|
29.01.2024,22.934,pondělí,ne,
|
||||||
|
30.01.2024,22.907,úterý,ne,
|
||||||
|
31.01.2024,22.935,středa,ne,
|
||||||
|
01.02.2024,23.019,čtvrtek,ne,
|
||||||
|
02.02.2024,22.853,pátek,ne,
|
||||||
|
03.02.2024,22.853,sobota,ne,Dopočítaný kurz
|
||||||
|
04.02.2024,22.853,neděle,ne,Dopočítaný kurz
|
||||||
|
05.02.2024,23.269,pondělí,ne,
|
||||||
|
06.02.2024,23.208,úterý,ne,
|
||||||
|
07.02.2024,23.181,středa,ne,
|
||||||
|
08.02.2024,23.195,čtvrtek,ne,
|
||||||
|
09.02.2024,23.373,pátek,ne,
|
||||||
|
10.02.2024,23.373,sobota,ne,Dopočítaný kurz
|
||||||
|
11.02.2024,23.373,neděle,ne,Dopočítaný kurz
|
||||||
|
12.02.2024,23.407,pondělí,ne,
|
||||||
|
13.02.2024,23.42,úterý,ne,
|
||||||
|
14.02.2024,23.663,středa,ne,
|
||||||
|
15.02.2024,23.651,čtvrtek,ne,
|
||||||
|
16.02.2024,23.646,pátek,ne,
|
||||||
|
17.02.2024,23.646,sobota,ne,Dopočítaný kurz
|
||||||
|
18.02.2024,23.646,neděle,ne,Dopočítaný kurz
|
||||||
|
19.02.2024,23.627,pondělí,ne,
|
||||||
|
20.02.2024,23.531,úterý,ne,
|
||||||
|
21.02.2024,23.48,středa,ne,
|
||||||
|
22.02.2024,23.354,čtvrtek,ne,
|
||||||
|
23.02.2024,23.394,pátek,ne,
|
||||||
|
24.02.2024,23.394,sobota,ne,Dopočítaný kurz
|
||||||
|
25.02.2024,23.394,neděle,ne,Dopočítaný kurz
|
||||||
|
26.02.2024,23.376,pondělí,ne,
|
||||||
|
27.02.2024,23.337,úterý,ne,
|
||||||
|
28.02.2024,23.442,středa,ne,
|
||||||
|
29.02.2024,23.427,čtvrtek,ne,
|
||||||
|
01.03.2024,23.428,pátek,ne,
|
||||||
|
02.03.2024,23.428,sobota,ne,Dopočítaný kurz
|
||||||
|
03.03.2024,23.428,neděle,ne,Dopočítaný kurz
|
||||||
|
04.03.2024,23.377,pondělí,ne,
|
||||||
|
05.03.2024,23.371,úterý,ne,
|
||||||
|
06.03.2024,23.32,středa,ne,
|
||||||
|
07.03.2024,23.279,čtvrtek,ne,
|
||||||
|
08.03.2024,23.139,pátek,ne,
|
||||||
|
09.03.2024,23.139,sobota,ne,Dopočítaný kurz
|
||||||
|
10.03.2024,23.139,neděle,ne,Dopočítaný kurz
|
||||||
|
11.03.2024,23.177,pondělí,ne,
|
||||||
|
12.03.2024,23.152,úterý,ne,
|
||||||
|
13.03.2024,23.099,středa,ne,
|
||||||
|
14.03.2024,23.042,čtvrtek,ne,
|
||||||
|
15.03.2024,23.093,pátek,ne,
|
||||||
|
16.03.2024,23.093,sobota,ne,Dopočítaný kurz
|
||||||
|
17.03.2024,23.093,neděle,ne,Dopočítaný kurz
|
||||||
|
18.03.2024,23.143,pondělí,ne,
|
||||||
|
19.03.2024,23.279,úterý,ne,
|
||||||
|
20.03.2024,23.315,středa,ne,
|
||||||
|
21.03.2024,23.155,čtvrtek,ne,
|
||||||
|
22.03.2024,23.441,pátek,ne,
|
||||||
|
23.03.2024,23.441,sobota,ne,Dopočítaný kurz
|
||||||
|
24.03.2024,23.441,neděle,ne,Dopočítaný kurz
|
||||||
|
25.03.2024,23.315,pondělí,ne,
|
||||||
|
26.03.2024,23.278,úterý,ne,
|
||||||
|
27.03.2024,23.408,středa,ne,
|
||||||
|
28.03.2024,23.413,čtvrtek,ne,
|
||||||
|
29.03.2024,23.413,pátek,ano,Dopočítaný kurz (svátek)
|
||||||
|
30.03.2024,23.413,sobota,ne,Dopočítaný kurz
|
||||||
|
31.03.2024,23.413,neděle,ne,Dopočítaný kurz
|
||||||
|
01.04.2024,23.413,pondělí,ano,Dopočítaný kurz (svátek)
|
||||||
|
02.04.2024,23.595,úterý,ne,
|
||||||
|
03.04.2024,23.514,středa,ne,
|
||||||
|
04.04.2024,23.322,čtvrtek,ne,
|
||||||
|
05.04.2024,23.324,pátek,ne,
|
||||||
|
06.04.2024,23.324,sobota,ne,Dopočítaný kurz
|
||||||
|
07.04.2024,23.324,neděle,ne,Dopočítaný kurz
|
||||||
|
08.04.2024,23.423,pondělí,ne,
|
||||||
|
09.04.2024,23.353,úterý,ne,
|
||||||
|
10.04.2024,23.354,středa,ne,
|
||||||
|
11.04.2024,23.666,čtvrtek,ne,
|
||||||
|
12.04.2024,23.782,pátek,ne,
|
||||||
|
13.04.2024,23.782,sobota,ne,Dopočítaný kurz
|
||||||
|
14.04.2024,23.782,neděle,ne,Dopočítaný kurz
|
||||||
|
15.04.2024,23.768,pondělí,ne,
|
||||||
|
16.04.2024,23.713,úterý,ne,
|
||||||
|
17.04.2024,23.714,středa,ne,
|
||||||
|
18.04.2024,23.663,čtvrtek,ne,
|
||||||
|
19.04.2024,23.707,pátek,ne,
|
||||||
|
20.04.2024,23.707,sobota,ne,Dopočítaný kurz
|
||||||
|
21.04.2024,23.707,neděle,ne,Dopočítaný kurz
|
||||||
|
22.04.2024,23.761,pondělí,ne,
|
||||||
|
23.04.2024,23.672,úterý,ne,
|
||||||
|
24.04.2024,23.616,středa,ne,
|
||||||
|
25.04.2024,23.47,čtvrtek,ne,
|
||||||
|
26.04.2024,23.481,pátek,ne,
|
||||||
|
27.04.2024,23.481,sobota,ne,Dopočítaný kurz
|
||||||
|
28.04.2024,23.481,neděle,ne,Dopočítaný kurz
|
||||||
|
29.04.2024,23.482,pondělí,ne,
|
||||||
|
30.04.2024,23.453,úterý,ne,
|
||||||
|
01.05.2024,23.453,středa,ano,Dopočítaný kurz (svátek)
|
||||||
|
02.05.2024,23.448,čtvrtek,ne,
|
||||||
|
03.05.2024,23.283,pátek,ne,
|
||||||
|
04.05.2024,23.283,sobota,ne,Dopočítaný kurz
|
||||||
|
05.05.2024,23.283,neděle,ne,Dopočítaný kurz
|
||||||
|
06.05.2024,23.189,pondělí,ne,
|
||||||
|
07.05.2024,23.223,úterý,ne,
|
||||||
|
08.05.2024,23.223,středa,ano,Dopočítaný kurz (svátek)
|
||||||
|
09.05.2024,23.239,čtvrtek,ne,
|
||||||
|
10.05.2024,23.131,pátek,ne,
|
||||||
|
11.05.2024,23.131,sobota,ne,Dopočítaný kurz
|
||||||
|
12.05.2024,23.131,neděle,ne,Dopočítaný kurz
|
||||||
|
13.05.2024,22.948,pondělí,ne,
|
||||||
|
14.05.2024,22.926,úterý,ne,
|
||||||
|
15.05.2024,22.861,středa,ne,
|
||||||
|
16.05.2024,22.745,čtvrtek,ne,
|
||||||
|
17.05.2024,22.791,pátek,ne,
|
||||||
|
18.05.2024,22.791,sobota,ne,Dopočítaný kurz
|
||||||
|
19.05.2024,22.791,neděle,ne,Dopočítaný kurz
|
||||||
|
20.05.2024,22.792,pondělí,ne,
|
||||||
|
21.05.2024,22.717,úterý,ne,
|
||||||
|
22.05.2024,22.855,středa,ne,
|
||||||
|
23.05.2024,22.795,čtvrtek,ne,
|
||||||
|
24.05.2024,22.807,pátek,ne,
|
||||||
|
25.05.2024,22.807,sobota,ne,Dopočítaný kurz
|
||||||
|
26.05.2024,22.807,neděle,ne,Dopočítaný kurz
|
||||||
|
27.05.2024,22.799,pondělí,ne,
|
||||||
|
28.05.2024,22.65,úterý,ne,
|
||||||
|
29.05.2024,22.775,středa,ne,
|
||||||
|
30.05.2024,22.905,čtvrtek,ne,
|
||||||
|
31.05.2024,22.765,pátek,ne,
|
||||||
|
01.06.2024,22.765,sobota,ne,Dopočítaný kurz
|
||||||
|
02.06.2024,22.765,neděle,ne,Dopočítaný kurz
|
||||||
|
03.06.2024,22.798,pondělí,ne,
|
||||||
|
04.06.2024,22.789,úterý,ne,
|
||||||
|
05.06.2024,22.68,středa,ne,
|
||||||
|
06.06.2024,22.67,čtvrtek,ne,
|
||||||
|
07.06.2024,22.559,pátek,ne,
|
||||||
|
08.06.2024,22.559,sobota,ne,Dopočítaný kurz
|
||||||
|
09.06.2024,22.559,neděle,ne,Dopočítaný kurz
|
||||||
|
10.06.2024,22.901,pondělí,ne,
|
||||||
|
11.06.2024,23.022,úterý,ne,
|
||||||
|
12.06.2024,22.94,středa,ne,
|
||||||
|
13.06.2024,22.902,čtvrtek,ne,
|
||||||
|
14.06.2024,23.154,pátek,ne,
|
||||||
|
15.06.2024,23.154,sobota,ne,Dopočítaný kurz
|
||||||
|
16.06.2024,23.154,neděle,ne,Dopočítaný kurz
|
||||||
|
17.06.2024,23.056,pondělí,ne,
|
||||||
|
18.06.2024,23.115,úterý,ne,
|
||||||
|
19.06.2024,23.151,středa,ne,
|
||||||
|
20.06.2024,23.224,čtvrtek,ne,
|
||||||
|
21.06.2024,23.341,pátek,ne,
|
||||||
|
22.06.2024,23.341,sobota,ne,Dopočítaný kurz
|
||||||
|
23.06.2024,23.341,neděle,ne,Dopočítaný kurz
|
||||||
|
24.06.2024,23.196,pondělí,ne,
|
||||||
|
25.06.2024,23.164,úterý,ne,
|
||||||
|
26.06.2024,23.296,středa,ne,
|
||||||
|
27.06.2024,23.299,čtvrtek,ne,
|
||||||
|
28.06.2024,23.386,pátek,ne,
|
||||||
|
29.06.2024,23.386,sobota,ne,Dopočítaný kurz
|
||||||
|
30.06.2024,23.386,neděle,ne,Dopočítaný kurz
|
||||||
|
01.07.2024,23.315,pondělí,ne,
|
||||||
|
02.07.2024,23.481,úterý,ne,
|
||||||
|
03.07.2024,23.425,středa,ne,
|
||||||
|
04.07.2024,23.282,čtvrtek,ne,
|
||||||
|
05.07.2024,23.282,pátek,ano,Dopočítaný kurz (svátek)
|
||||||
|
06.07.2024,23.282,sobota,ano,Dopočítaný kurz (svátek)
|
||||||
|
07.07.2024,23.282,neděle,ne,Dopočítaný kurz
|
||||||
|
08.07.2024,23.215,pondělí,ne,
|
||||||
|
09.07.2024,23.338,úterý,ne,
|
||||||
|
10.07.2024,23.443,středa,ne,
|
||||||
|
11.07.2024,23.365,čtvrtek,ne,
|
||||||
|
12.07.2024,23.267,pátek,ne,
|
||||||
|
13.07.2024,23.267,sobota,ne,Dopočítaný kurz
|
||||||
|
14.07.2024,23.267,neděle,ne,Dopočítaný kurz
|
||||||
|
15.07.2024,23.314,pondělí,ne,
|
||||||
|
16.07.2024,23.264,úterý,ne,
|
||||||
|
17.07.2024,23.125,středa,ne,
|
||||||
|
18.07.2024,23.131,čtvrtek,ne,
|
||||||
|
19.07.2024,23.195,pátek,ne,
|
||||||
|
20.07.2024,23.195,sobota,ne,Dopočítaný kurz
|
||||||
|
21.07.2024,23.195,neděle,ne,Dopočítaný kurz
|
||||||
|
22.07.2024,23.185,pondělí,ne,
|
||||||
|
23.07.2024,23.366,úterý,ne,
|
||||||
|
24.07.2024,23.453,středa,ne,
|
||||||
|
25.07.2024,23.385,čtvrtek,ne,
|
||||||
|
26.07.2024,23.368,pátek,ne,
|
||||||
|
27.07.2024,23.368,sobota,ne,Dopočítaný kurz
|
||||||
|
28.07.2024,23.368,neděle,ne,Dopočítaný kurz
|
||||||
|
29.07.2024,23.454,pondělí,ne,
|
||||||
|
30.07.2024,23.487,úterý,ne,
|
||||||
|
31.07.2024,23.509,středa,ne,
|
||||||
|
01.08.2024,23.595,čtvrtek,ne,
|
||||||
|
02.08.2024,23.317,pátek,ne,
|
||||||
|
03.08.2024,23.317,sobota,ne,Dopočítaný kurz
|
||||||
|
04.08.2024,23.317,neděle,ne,Dopočítaný kurz
|
||||||
|
05.08.2024,23.051,pondělí,ne,
|
||||||
|
06.08.2024,23.187,úterý,ne,
|
||||||
|
07.08.2024,23.142,středa,ne,
|
||||||
|
08.08.2024,23.117,čtvrtek,ne,
|
||||||
|
09.08.2024,23.12,pátek,ne,
|
||||||
|
10.08.2024,23.12,sobota,ne,Dopočítaný kurz
|
||||||
|
11.08.2024,23.12,neděle,ne,Dopočítaný kurz
|
||||||
|
12.08.2024,23.06,pondělí,ne,
|
||||||
|
13.08.2024,23.055,úterý,ne,
|
||||||
|
14.08.2024,22.873,středa,ne,
|
||||||
|
15.08.2024,22.885,čtvrtek,ne,
|
||||||
|
16.08.2024,22.961,pátek,ne,
|
||||||
|
17.08.2024,22.961,sobota,ne,Dopočítaný kurz
|
||||||
|
18.08.2024,22.961,neděle,ne,Dopočítaný kurz
|
||||||
|
19.08.2024,22.8,pondělí,ne,
|
||||||
|
20.08.2024,22.701,úterý,ne,
|
||||||
|
21.08.2024,22.581,středa,ne,
|
||||||
|
22.08.2024,22.543,čtvrtek,ne,
|
||||||
|
23.08.2024,22.544,pátek,ne,
|
||||||
|
24.08.2024,22.544,sobota,ne,Dopočítaný kurz
|
||||||
|
25.08.2024,22.544,neděle,ne,Dopočítaný kurz
|
||||||
|
26.08.2024,22.421,pondělí,ne,
|
||||||
|
27.08.2024,22.434,úterý,ne,
|
||||||
|
28.08.2024,22.541,středa,ne,
|
||||||
|
29.08.2024,22.579,čtvrtek,ne,
|
||||||
|
30.08.2024,22.577,pátek,ne,
|
||||||
|
31.08.2024,22.577,sobota,ne,Dopočítaný kurz
|
||||||
|
01.09.2024,22.577,neděle,ne,Dopočítaný kurz
|
||||||
|
02.09.2024,22.646,pondělí,ne,
|
||||||
|
03.09.2024,22.711,úterý,ne,
|
||||||
|
04.09.2024,22.708,středa,ne,
|
||||||
|
05.09.2024,22.536,čtvrtek,ne,
|
||||||
|
06.09.2024,22.542,pátek,ne,
|
||||||
|
07.09.2024,22.542,sobota,ne,Dopočítaný kurz
|
||||||
|
08.09.2024,22.542,neděle,ne,Dopočítaný kurz
|
||||||
|
09.09.2024,22.682,pondělí,ne,
|
||||||
|
10.09.2024,22.706,úterý,ne,
|
||||||
|
11.09.2024,22.724,středa,ne,
|
||||||
|
12.09.2024,22.796,čtvrtek,ne,
|
||||||
|
13.09.2024,22.682,pátek,ne,
|
||||||
|
14.09.2024,22.682,sobota,ne,Dopočítaný kurz
|
||||||
|
15.09.2024,22.682,neděle,ne,Dopočítaný kurz
|
||||||
|
16.09.2024,22.59,pondělí,ne,
|
||||||
|
17.09.2024,22.55,úterý,ne,
|
||||||
|
18.09.2024,22.537,středa,ne,
|
||||||
|
19.09.2024,22.483,čtvrtek,ne,
|
||||||
|
20.09.2024,22.459,pátek,ne,
|
||||||
|
21.09.2024,22.459,sobota,ne,Dopočítaný kurz
|
||||||
|
22.09.2024,22.459,neděle,ne,Dopočítaný kurz
|
||||||
|
23.09.2024,22.597,pondělí,ne,
|
||||||
|
24.09.2024,22.585,úterý,ne,
|
||||||
|
25.09.2024,22.44,středa,ne,
|
||||||
|
26.09.2024,22.55,čtvrtek,ne,
|
||||||
|
27.09.2024,22.547,pátek,ne,
|
||||||
|
28.09.2024,22.547,sobota,ano,Dopočítaný kurz (svátek)
|
||||||
|
29.09.2024,22.547,neděle,ne,Dopočítaný kurz
|
||||||
|
30.09.2024,22.495,pondělí,ne,
|
||||||
|
01.10.2024,22.81,úterý,ne,
|
||||||
|
02.10.2024,22.867,středa,ne,
|
||||||
|
03.10.2024,22.968,čtvrtek,ne,
|
||||||
|
04.10.2024,22.982,pátek,ne,
|
||||||
|
05.10.2024,22.982,sobota,ne,Dopočítaný kurz
|
||||||
|
06.10.2024,22.982,neděle,ne,Dopočítaný kurz
|
||||||
|
07.10.2024,23.082,pondělí,ne,
|
||||||
|
08.10.2024,23.052,úterý,ne,
|
||||||
|
09.10.2024,23.135,středa,ne,
|
||||||
|
10.10.2024,23.16,čtvrtek,ne,
|
||||||
|
11.10.2024,23.123,pátek,ne,
|
||||||
|
12.10.2024,23.123,sobota,ne,Dopočítaný kurz
|
||||||
|
13.10.2024,23.123,neděle,ne,Dopočítaný kurz
|
||||||
|
14.10.2024,23.146,pondělí,ne,
|
||||||
|
15.10.2024,23.146,úterý,ne,
|
||||||
|
16.10.2024,23.212,středa,ne,
|
||||||
|
17.10.2024,23.244,čtvrtek,ne,
|
||||||
|
18.10.2024,23.255,pátek,ne,
|
||||||
|
19.10.2024,23.255,sobota,ne,Dopočítaný kurz
|
||||||
|
20.10.2024,23.255,neděle,ne,Dopočítaný kurz
|
||||||
|
21.10.2024,23.279,pondělí,ne,
|
||||||
|
22.10.2024,23.324,úterý,ne,
|
||||||
|
23.10.2024,23.446,středa,ne,
|
||||||
|
24.10.2024,23.345,čtvrtek,ne,
|
||||||
|
25.10.2024,23.331,pátek,ne,
|
||||||
|
26.10.2024,23.331,sobota,ne,Dopočítaný kurz
|
||||||
|
27.10.2024,23.331,neděle,ne,Dopočítaný kurz
|
||||||
|
28.10.2024,23.331,pondělí,ano,Dopočítaný kurz (svátek)
|
||||||
|
29.10.2024,23.551,úterý,ne,
|
||||||
|
30.10.2024,23.466,středa,ne,
|
||||||
|
31.10.2024,23.278,čtvrtek,ne,
|
||||||
|
01.11.2024,23.28,pátek,ne,
|
||||||
|
02.11.2024,23.28,sobota,ne,Dopočítaný kurz
|
||||||
|
03.11.2024,23.28,neděle,ne,Dopočítaný kurz
|
||||||
|
04.11.2024,23.179,pondělí,ne,
|
||||||
|
05.11.2024,23.254,úterý,ne,
|
||||||
|
06.11.2024,23.668,středa,ne,
|
||||||
|
07.11.2024,23.406,čtvrtek,ne,
|
||||||
|
08.11.2024,23.417,pátek,ne,
|
||||||
|
09.11.2024,23.417,sobota,ne,Dopočítaný kurz
|
||||||
|
10.11.2024,23.417,neděle,ne,Dopočítaný kurz
|
||||||
|
11.11.2024,23.792,pondělí,ne,
|
||||||
|
12.11.2024,23.912,úterý,ne,
|
||||||
|
13.11.2024,23.808,středa,ne,
|
||||||
|
14.11.2024,24.019,čtvrtek,ne,
|
||||||
|
15.11.2024,23.891,pátek,ne,
|
||||||
|
16.11.2024,23.891,sobota,ne,Dopočítaný kurz
|
||||||
|
17.11.2024,23.891,neděle,ano,Dopočítaný kurz (svátek)
|
||||||
|
18.11.2024,23.97,pondělí,ne,
|
||||||
|
19.11.2024,23.912,úterý,ne,
|
||||||
|
20.11.2024,23.949,středa,ne,
|
||||||
|
21.11.2024,24.057,čtvrtek,ne,
|
||||||
|
22.11.2024,24.337,pátek,ne,
|
||||||
|
23.11.2024,24.337,sobota,ne,Dopočítaný kurz
|
||||||
|
24.11.2024,24.337,neděle,ne,Dopočítaný kurz
|
||||||
|
25.11.2024,24.093,pondělí,ne,
|
||||||
|
26.11.2024,24.043,úterý,ne,
|
||||||
|
27.11.2024,23.996,středa,ne,
|
||||||
|
28.11.2024,23.96,čtvrtek,ne,
|
||||||
|
29.11.2024,23.922,pátek,ne,
|
||||||
|
30.11.2024,23.922,sobota,ne,Dopočítaný kurz
|
||||||
|
01.12.2024,23.922,neděle,ne,Dopočítaný kurz
|
||||||
|
02.12.2024,24.048,pondělí,ne,
|
||||||
|
03.12.2024,23.991,úterý,ne,
|
||||||
|
04.12.2024,24.009,středa,ne,
|
||||||
|
05.12.2024,23.851,čtvrtek,ne,
|
||||||
|
06.12.2024,23.724,pátek,ne,
|
||||||
|
07.12.2024,23.724,sobota,ne,Dopočítaný kurz
|
||||||
|
08.12.2024,23.724,neděle,ne,Dopočítaný kurz
|
||||||
|
09.12.2024,23.756,pondělí,ne,
|
||||||
|
10.12.2024,23.856,úterý,ne,
|
||||||
|
11.12.2024,23.9,středa,ne,
|
||||||
|
12.12.2024,23.906,čtvrtek,ne,
|
||||||
|
13.12.2024,23.788,pátek,ne,
|
||||||
|
14.12.2024,23.788,sobota,ne,Dopočítaný kurz
|
||||||
|
15.12.2024,23.788,neděle,ne,Dopočítaný kurz
|
||||||
|
16.12.2024,23.851,pondělí,ne,
|
||||||
|
17.12.2024,23.872,úterý,ne,
|
||||||
|
18.12.2024,23.943,středa,ne,
|
||||||
|
19.12.2024,24.15,čtvrtek,ne,
|
||||||
|
20.12.2024,24.168,pátek,ne,
|
||||||
|
21.12.2024,24.168,sobota,ne,Dopočítaný kurz
|
||||||
|
22.12.2024,24.168,neděle,ne,Dopočítaný kurz
|
||||||
|
23.12.2024,24.218,pondělí,ne,
|
||||||
|
24.12.2024,24.218,úterý,ano,Dopočítaný kurz (svátek)
|
||||||
|
25.12.2024,24.218,středa,ano,Dopočítaný kurz (svátek)
|
||||||
|
26.12.2024,24.218,čtvrtek,ano,Dopočítaný kurz (svátek)
|
||||||
|
27.12.2024,24.157,pátek,ne,
|
||||||
|
28.12.2024,24.157,sobota,ne,Dopočítaný kurz
|
||||||
|
29.12.2024,24.157,neděle,ne,Dopočítaný kurz
|
||||||
|
30.12.2024,24.168,pondělí,ne,
|
||||||
|
31.12.2024,24.237,úterý,ne,
|
||||||
|
@@ -18,6 +18,19 @@ DAILY_DATA_URL = "https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizov
|
|||||||
# Export cesty k databázovému souboru
|
# Export cesty k databázovému souboru
|
||||||
DB_PATH = database.DB_PATH
|
DB_PATH = database.DB_PATH
|
||||||
|
|
||||||
|
# Global debug flag
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
def debug_print(*args, **kwargs):
|
||||||
|
"""Print debug messages only if debug mode is enabled."""
|
||||||
|
if DEBUG:
|
||||||
|
print(*args, **kwargs)
|
||||||
|
|
||||||
|
def set_debug_mode(debug):
|
||||||
|
"""Set the debug mode for this module."""
|
||||||
|
global DEBUG
|
||||||
|
DEBUG = debug
|
||||||
|
|
||||||
def is_yearly_data_complete(year, output_dir="data"):
|
def is_yearly_data_complete(year, output_dir="data"):
|
||||||
"""
|
"""
|
||||||
Zkontroluje, zda roční data pro zadaný rok jsou kompletní podle kritérií:
|
Zkontroluje, zda roční data pro zadaný rok jsou kompletní podle kritérií:
|
||||||
@@ -33,7 +46,7 @@ def is_yearly_data_complete(year, output_dir="data"):
|
|||||||
|
|
||||||
# Zkontrolujeme, zda soubor existuje
|
# Zkontrolujeme, zda soubor existuje
|
||||||
if not os.path.exists(filepath):
|
if not os.path.exists(filepath):
|
||||||
print(f"Soubor {filepath} neexistuje.")
|
debug_print(f"Soubor {filepath} neexistuje.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Načteme data z CSV souboru
|
# Načteme data z CSV souboru
|
||||||
@@ -43,11 +56,11 @@ def is_yearly_data_complete(year, output_dir="data"):
|
|||||||
reader = csv.reader(csvfile, delimiter=',')
|
reader = csv.reader(csvfile, delimiter=',')
|
||||||
lines = list(reader)
|
lines = list(reader)
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Chyba při čtení souboru {filepath}: {e}")
|
debug_print(f"Chyba při čtení souboru {filepath}: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if len(lines) < 2:
|
if len(lines) < 2:
|
||||||
print(f"Soubor {filepath} je prázdný nebo obsahuje pouze hlavičku.")
|
debug_print(f"Soubor {filepath} je prázdný nebo obsahuje pouze hlavičku.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Získáme první a poslední datový řádek (přeskočíme hlavičku)
|
# Získáme první a poslední datový řádek (přeskočíme hlavičku)
|
||||||
@@ -63,7 +76,7 @@ def is_yearly_data_complete(year, output_dir="data"):
|
|||||||
last_data_line = line
|
last_data_line = line
|
||||||
|
|
||||||
if not first_data_line or not last_data_line:
|
if not first_data_line or not last_data_line:
|
||||||
print(f"Soubor {filepath} neobsahuje žádná data.")
|
debug_print(f"Soubor {filepath} neobsahuje žádná data.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Zpracujeme první řádek
|
# Zpracujeme první řádek
|
||||||
@@ -73,7 +86,7 @@ def is_yearly_data_complete(year, output_dir="data"):
|
|||||||
# Zkontrolujeme, zda první datum je 1.1., 2.1., 3.1. nebo 4.1. a je to pracovní den
|
# Zkontrolujeme, zda první datum je 1.1., 2.1., 3.1. nebo 4.1. a je to pracovní den
|
||||||
first_date = datetime.strptime(first_date_str, "%d.%m.%Y")
|
first_date = datetime.strptime(first_date_str, "%d.%m.%Y")
|
||||||
if first_date.year != year:
|
if first_date.year != year:
|
||||||
print(f"První datum v souboru {filepath} není z roku {year}.")
|
debug_print(f"První datum v souboru {filepath} není z roku {year}.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Zkontrolujeme, zda první datum odpovídá našim kritériím
|
# Zkontrolujeme, zda první datum odpovídá našim kritériím
|
||||||
@@ -90,11 +103,11 @@ def is_yearly_data_complete(year, output_dir="data"):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if first_date_str not in valid_first_dates:
|
if first_date_str not in valid_first_dates:
|
||||||
print(f"První datum v souboru {filepath} ({first_date_str}) není platným prvním pracovním dnem roku.")
|
debug_print(f"První datum v souboru {filepath} ({first_date_str}) není platným prvním pracovním dnem roku.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
except (ValueError, IndexError) as e:
|
except (ValueError, IndexError) as e:
|
||||||
print(f"Chyba při zpracování prvního řádku souboru {filepath}: {e}")
|
debug_print(f"Chyba při zpracování prvního řádku souboru {filepath}: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Zpracujeme poslední řádek
|
# Zpracujeme poslední řádek
|
||||||
@@ -106,14 +119,14 @@ def is_yearly_data_complete(year, output_dir="data"):
|
|||||||
expected_last_date = datetime(year, 12, 31)
|
expected_last_date = datetime(year, 12, 31)
|
||||||
|
|
||||||
if last_date != expected_last_date:
|
if last_date != expected_last_date:
|
||||||
print(f"Poslední datum v souboru {filepath} ({last_date_str}) není 31.12.{year}.")
|
debug_print(f"Poslední datum v souboru {filepath} ({last_date_str}) není 31.12.{year}.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
except (ValueError, IndexError) as e:
|
except (ValueError, IndexError) as e:
|
||||||
print(f"Chyba při zpracování posledního řádku souboru {filepath}: {e}")
|
debug_print(f"Chyba při zpracování posledního řádku souboru {filepath}: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print(f"Roční data pro rok {year} jsou kompletní.")
|
debug_print(f"Roční data pro rok {year} jsou kompletní.")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def check_yearly_data_consistency(year, output_dir="data"):
|
def check_yearly_data_consistency(year, output_dir="data"):
|
||||||
@@ -129,7 +142,7 @@ def check_yearly_data_consistency(year, output_dir="data"):
|
|||||||
|
|
||||||
# Zkontrolujeme, zda soubor existuje
|
# Zkontrolujeme, zda soubor existuje
|
||||||
if not os.path.exists(filepath):
|
if not os.path.exists(filepath):
|
||||||
print(f"Soubor {filepath} neexistuje.")
|
debug_print(f"Soubor {filepath} neexistuje.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Načteme data z CSV souboru
|
# Načteme data z CSV souboru
|
||||||
@@ -138,11 +151,11 @@ def check_yearly_data_consistency(year, output_dir="data"):
|
|||||||
reader = csv.reader(csvfile)
|
reader = csv.reader(csvfile)
|
||||||
lines = list(reader)
|
lines = list(reader)
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Chyba při čtení souboru {filepath}: {e}")
|
debug_print(f"Chyba při čtení souboru {filepath}: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if len(lines) < 2:
|
if len(lines) < 2:
|
||||||
print(f"Soubor {filepath} je prázdný nebo obsahuje pouze hlavičku.")
|
debug_print(f"Soubor {filepath} je prázdný nebo obsahuje pouze hlavičku.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Získáme seznam dat z CSV (první sloupec)
|
# Získáme seznam dat z CSV (první sloupec)
|
||||||
@@ -152,7 +165,7 @@ def check_yearly_data_consistency(year, output_dir="data"):
|
|||||||
dates_in_file.append(line[0])
|
dates_in_file.append(line[0])
|
||||||
|
|
||||||
if not dates_in_file:
|
if not dates_in_file:
|
||||||
print(f"Soubor {filepath} neobsahuje žádná data.")
|
debug_print(f"Soubor {filepath} neobsahuje žádná data.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Zkontrolujeme poslední 3 pracovní dny
|
# Zkontrolujeme poslední 3 pracovní dny
|
||||||
@@ -181,7 +194,7 @@ def check_yearly_data_consistency(year, output_dir="data"):
|
|||||||
|
|
||||||
# Pokud nemáme žádné pracovní dny k ověření, vrátíme True (nemáme co kontrolovat)
|
# Pokud nemáme žádné pracovní dny k ověření, vrátíme True (nemáme co kontrolovat)
|
||||||
if not checked_dates:
|
if not checked_dates:
|
||||||
print(f"Pro rok {year} nebyly nalezeny žádné pracovní dny k ověření v posledním týdnu.")
|
debug_print(f"Pro rok {year} nebyly nalezeny žádné pracovní dny k ověření v posledním týdnu.")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# Zkontrolujeme, zda všechny pracovní dny jsou v souboru
|
# Zkontrolujeme, zda všechny pracovní dny jsou v souboru
|
||||||
@@ -191,10 +204,10 @@ def check_yearly_data_consistency(year, output_dir="data"):
|
|||||||
missing_dates.append(date_str)
|
missing_dates.append(date_str)
|
||||||
|
|
||||||
if missing_dates:
|
if missing_dates:
|
||||||
print(f"V souboru {filepath} chybí záznamy pro následující pracovní dny: {', '.join(missing_dates)}")
|
debug_print(f"V souboru {filepath} chybí záznamy pro následující pracovní dny: {', '.join(missing_dates)}")
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
print(f"Roční data pro rok {year} jsou konzistentní.")
|
debug_print(f"Roční data pro rok {year} jsou konzistentní.")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def download_yearly_data(year, output_dir="data", force=False):
|
def download_yearly_data(year, output_dir="data", force=False):
|
||||||
@@ -210,19 +223,19 @@ def download_yearly_data(year, output_dir="data", force=False):
|
|||||||
if not force:
|
if not force:
|
||||||
# Zkontrolujeme, zda soubor existuje a je kompletní
|
# Zkontrolujeme, zda soubor existuje a je kompletní
|
||||||
if is_yearly_data_complete(year, output_dir):
|
if is_yearly_data_complete(year, output_dir):
|
||||||
print(f"Roční data pro rok {year} jsou kompletní. Není nutné je stahovat znovu.")
|
debug_print(f"Roční data pro rok {year} jsou kompletní. Není nutné je stahovat znovu.")
|
||||||
return os.path.join(output_dir, f"{year}.csv")
|
return os.path.join(output_dir, f"{year}.csv")
|
||||||
else:
|
else:
|
||||||
print(f"Roční data pro rok {year} nejsou kompletní. Stahuji znovu...")
|
debug_print(f"Roční data pro rok {year} nejsou kompletní. Stahuji znovu...")
|
||||||
|
|
||||||
url = f"{YEARLY_DATA_URL}?rok={year}"
|
url = f"{YEARLY_DATA_URL}?rok={year}"
|
||||||
print(f"Stahuji data z: {url}")
|
debug_print(f"Stahuji data z: {url}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = requests.get(url)
|
response = requests.get(url)
|
||||||
response.raise_for_status() # Vyvolá výjimku pro chybné HTTP kódy
|
response.raise_for_status() # Vyvolá výjimku pro chybné HTTP kódy
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
print(f"Chyba při stahování dat: {e}")
|
debug_print(f"Chyba při stahování dat: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Vytvoření jména souboru
|
# Vytvoření jména souboru
|
||||||
@@ -232,7 +245,7 @@ def download_yearly_data(year, output_dir="data", force=False):
|
|||||||
# Zpracování dat a uložení do CSV
|
# Zpracování dat a uložení do CSV
|
||||||
lines = response.text.strip().split('\n')
|
lines = response.text.strip().split('\n')
|
||||||
if not lines:
|
if not lines:
|
||||||
print("Stažený soubor je prázdný.")
|
debug_print("Stažený soubor je prázdný.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# První řádek obsahuje hlavičku
|
# První řádek obsahuje hlavičku
|
||||||
@@ -275,10 +288,10 @@ def download_yearly_data(year, output_dir="data", force=False):
|
|||||||
writer = csv.writer(csvfile)
|
writer = csv.writer(csvfile)
|
||||||
writer.writerow(header)
|
writer.writerow(header)
|
||||||
writer.writerows(data_rows)
|
writer.writerows(data_rows)
|
||||||
print(f"Data byla úspěšně uložena do: {filepath}")
|
debug_print(f"Data byla úspěšně uložena do: {filepath}")
|
||||||
return filepath
|
return filepath
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Chyba při zápisu do souboru: {e}")
|
debug_print(f"Chyba při zápisu do souboru: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def download_monthly_data(currency_code, start_date, end_date, output_dir="data"):
|
def download_monthly_data(currency_code, start_date, end_date, output_dir="data"):
|
||||||
@@ -289,16 +302,16 @@ def download_monthly_data(currency_code, start_date, end_date, output_dir="data"
|
|||||||
:param start_date: Počáteční datum ve formátu DD.MM.YYYY.
|
:param start_date: Počáteční datum ve formátu DD.MM.YYYY.
|
||||||
:param end_date: Koncové datum ve formátu DD.MM.YYYY.
|
:param end_date: Koncové datum ve formátu DD.MM.YYYY.
|
||||||
:param output_dir: Adresář, kam se má CSV soubor uložit.
|
:param output_dir: Adresář, kam se má CSV soubor uložit.
|
||||||
:return: Cesta k vytvořenému CSV souboru.
|
:return: Chta k vytvořenému CSV souboru.
|
||||||
"""
|
"""
|
||||||
url = f"{MONTHLY_DATA_URL}?od={start_date}&do={end_date}&mena={currency_code}&format=txt"
|
url = f"{MONTHLY_DATA_URL}?od={start_date}&do={end_date}&mena={currency_code}&format=txt"
|
||||||
print(f"Stahuji data z: {url}")
|
debug_print(f"Stahuji data z: {url}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = requests.get(url)
|
response = requests.get(url)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
print(f"Chyba při stahování dat: {e}")
|
debug_print(f"Chyba při stahování dat: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Vytvoření jména souboru
|
# Vytvoření jména souboru
|
||||||
@@ -308,7 +321,7 @@ def download_monthly_data(currency_code, start_date, end_date, output_dir="data"
|
|||||||
# Zpracování dat a uložení do CSV
|
# Zpracování dat a uložení do CSV
|
||||||
lines = response.text.strip().split('\n')
|
lines = response.text.strip().split('\n')
|
||||||
if not lines:
|
if not lines:
|
||||||
print("Stažený soubor je prázdný.")
|
debug_print("Stažený soubor je prázdný.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# První řádek obsahuje informace o měně, druhý hlavičku dat
|
# První řádek obsahuje informace o měně, druhý hlavičku dat
|
||||||
@@ -338,7 +351,7 @@ def download_monthly_data(currency_code, start_date, end_date, output_dir="data"
|
|||||||
rate = float(row[1])
|
rate = float(row[1])
|
||||||
database.insert_rate(date_str, currency_code, amount, rate)
|
database.insert_rate(date_str, currency_code, amount, rate)
|
||||||
except (ValueError, IndexError):
|
except (ValueError, IndexError):
|
||||||
print(f"Chyba při parsování řádku: {line}")
|
debug_print(f"Chyba při parsování řádku: {line}")
|
||||||
|
|
||||||
# Zápis do CSV souboru
|
# Zápis do CSV souboru
|
||||||
try:
|
try:
|
||||||
@@ -347,10 +360,10 @@ def download_monthly_data(currency_code, start_date, end_date, output_dir="data"
|
|||||||
writer = csv.writer(csvfile)
|
writer = csv.writer(csvfile)
|
||||||
writer.writerow(header)
|
writer.writerow(header)
|
||||||
writer.writerows(data_rows)
|
writer.writerows(data_rows)
|
||||||
print(f"Data byla úspěšně uložena do: {filepath}")
|
debug_print(f"Data byla úspěšně uložena do: {filepath}")
|
||||||
return filepath
|
return filepath
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Chyba při zápisu do souboru: {e}")
|
debug_print(f"Chyba při zápisu do souboru: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def download_daily_data(date, output_dir="data"):
|
def download_daily_data(date, output_dir="data"):
|
||||||
@@ -362,13 +375,13 @@ def download_daily_data(date, output_dir="data"):
|
|||||||
:return: Cesta k vytvořenému CSV souboru.
|
:return: Cesta k vytvořenému CSV souboru.
|
||||||
"""
|
"""
|
||||||
url = f"{DAILY_DATA_URL}?date={date}"
|
url = f"{DAILY_DATA_URL}?date={date}"
|
||||||
print(f"Stahuji data z: {url}")
|
debug_print(f"Stahuji data z: {url}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = requests.get(url)
|
response = requests.get(url)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
print(f"Chyba při stahování dat: {e}")
|
debug_print(f"Chyba při stahování dat: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Vytvoření jména souboru
|
# Vytvoření jména souboru
|
||||||
@@ -378,7 +391,7 @@ def download_daily_data(date, output_dir="data"):
|
|||||||
# Zpracování dat a uložení do CSV
|
# Zpracování dat a uložení do CSV
|
||||||
lines = response.text.strip().split('\n')
|
lines = response.text.strip().split('\n')
|
||||||
if not lines:
|
if not lines:
|
||||||
print("Stažený soubor je prázdný.")
|
debug_print("Stažený soubor je prázdný.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# První řádek obsahuje datum a číslo, druhý hlavičku
|
# První řádek obsahuje datum a číslo, druhý hlavičku
|
||||||
@@ -405,7 +418,7 @@ def download_daily_data(date, output_dir="data"):
|
|||||||
rate = float(row[4])
|
rate = float(row[4])
|
||||||
database.insert_rate(date, currency_code, amount, rate)
|
database.insert_rate(date, currency_code, amount, rate)
|
||||||
except (ValueError, IndexError):
|
except (ValueError, IndexError):
|
||||||
print(f"Chyba při parsování řádku: {line}")
|
debug_print(f"Chyba při parsování řádku: {line}")
|
||||||
|
|
||||||
# Zápis do CSV souboru
|
# Zápis do CSV souboru
|
||||||
try:
|
try:
|
||||||
@@ -414,10 +427,10 @@ def download_daily_data(date, output_dir="data"):
|
|||||||
writer = csv.writer(csvfile)
|
writer = csv.writer(csvfile)
|
||||||
writer.writerow(header)
|
writer.writerow(header)
|
||||||
writer.writerows(data_rows)
|
writer.writerows(data_rows)
|
||||||
print(f"Data byla úspěšně uložena do: {filepath}")
|
debug_print(f"Data byla úspěšně uložena do: {filepath}")
|
||||||
return filepath
|
return filepath
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Chyba při zápisu do souboru: {e}")
|
debug_print(f"Chyba při zápisu do souboru: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Příklad použití
|
# Příklad použití
|
||||||
@@ -426,6 +439,6 @@ if __name__ == "__main__":
|
|||||||
database.init_db()
|
database.init_db()
|
||||||
downloaded_file = download_yearly_data(2020)
|
downloaded_file = download_yearly_data(2020)
|
||||||
if downloaded_file:
|
if downloaded_file:
|
||||||
print(f"Stažený soubor: {downloaded_file}")
|
debug_print(f"Stažený soubor: {downloaded_file}")
|
||||||
else:
|
else:
|
||||||
print("Stažení se nezdařilo.")
|
debug_print("Stažení se nezdařilo.")
|
||||||
@@ -5,6 +5,19 @@ from datetime import datetime
|
|||||||
# Cesta k databázovému souboru
|
# Cesta k databázovému souboru
|
||||||
DB_PATH = "data/exchange_rates.db"
|
DB_PATH = "data/exchange_rates.db"
|
||||||
|
|
||||||
|
# Global debug flag
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
def debug_print(*args, **kwargs):
|
||||||
|
"""Print debug messages only if debug mode is enabled."""
|
||||||
|
if DEBUG:
|
||||||
|
print(*args, **kwargs)
|
||||||
|
|
||||||
|
def set_debug_mode(debug):
|
||||||
|
"""Set the debug mode for this module."""
|
||||||
|
global DEBUG
|
||||||
|
DEBUG = debug
|
||||||
|
|
||||||
def init_db():
|
def init_db():
|
||||||
"""
|
"""
|
||||||
Inicializuje databázi a vytvoří tabulku exchange_rates, pokud neexistuje.
|
Inicializuje databázi a vytvoří tabulku exchange_rates, pokud neexistuje.
|
||||||
@@ -29,7 +42,7 @@ def init_db():
|
|||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
print(f"Databáze inicializována: {DB_PATH}")
|
debug_print(f"Databáze inicializována: {DB_PATH}")
|
||||||
|
|
||||||
def insert_rate(date, currency_code, amount, rate):
|
def insert_rate(date, currency_code, amount, rate):
|
||||||
"""
|
"""
|
||||||
@@ -45,7 +58,7 @@ def insert_rate(date, currency_code, amount, rate):
|
|||||||
dt = datetime.strptime(date, "%d.%m.%Y")
|
dt = datetime.strptime(date, "%d.%m.%Y")
|
||||||
formatted_date = dt.strftime("%Y-%m-%d")
|
formatted_date = dt.strftime("%Y-%m-%d")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print(f"Neplatný formát data: {date}")
|
debug_print(f"Neplatný formát data: {date}")
|
||||||
return
|
return
|
||||||
|
|
||||||
conn = sqlite3.connect(DB_PATH)
|
conn = sqlite3.connect(DB_PATH)
|
||||||
@@ -73,7 +86,7 @@ def get_rate(date, currency_code):
|
|||||||
dt = datetime.strptime(date, "%d.%m.%Y")
|
dt = datetime.strptime(date, "%d.%m.%Y")
|
||||||
formatted_date = dt.strftime("%Y-%m-%d")
|
formatted_date = dt.strftime("%Y-%m-%d")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print(f"Neplatný formát data: {date}")
|
debug_print(f"Neplatný formát data: {date}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
conn = sqlite3.connect(DB_PATH)
|
conn = sqlite3.connect(DB_PATH)
|
||||||
|
|||||||
@@ -2,10 +2,20 @@ import json
|
|||||||
import os
|
import os
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
# Define HOLIDAYS_FILE as an absolute path based on the script's location
|
HOLIDAYS_FILE = "data/holidays.json"
|
||||||
# This makes it more robust when the script is run from different directories
|
|
||||||
_SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
# Global debug flag
|
||||||
HOLIDAYS_FILE = os.path.join(_SCRIPT_DIR, "..", "data", "holidays.json")
|
DEBUG = False
|
||||||
|
|
||||||
|
def debug_print(*args, **kwargs):
|
||||||
|
"""Print debug messages only if debug mode is enabled."""
|
||||||
|
if DEBUG:
|
||||||
|
print(*args, **kwargs)
|
||||||
|
|
||||||
|
def set_debug_mode(debug):
|
||||||
|
"""Set the debug mode for this module."""
|
||||||
|
global DEBUG
|
||||||
|
DEBUG = debug
|
||||||
|
|
||||||
def load_holidays():
|
def load_holidays():
|
||||||
"""
|
"""
|
||||||
@@ -13,30 +23,16 @@ def load_holidays():
|
|||||||
|
|
||||||
:return: Slovník, kde klíč je rok a hodnota je seznam svátků ve formátu DD.MM.
|
:return: Slovník, kde klíč je rok a hodnota je seznam svátků ve formátu DD.MM.
|
||||||
"""
|
"""
|
||||||
# Also try the relative path as fallback for backward compatibility
|
|
||||||
paths_to_try = [HOLIDAYS_FILE]
|
|
||||||
|
|
||||||
# Add relative path as fallback
|
|
||||||
if not os.path.exists(HOLIDAYS_FILE):
|
if not os.path.exists(HOLIDAYS_FILE):
|
||||||
relative_path = "data/holidays.json"
|
debug_print(f"Soubor se svátky {HOLIDAYS_FILE} neexistuje.")
|
||||||
paths_to_try.append(relative_path)
|
|
||||||
|
|
||||||
file_path = None
|
|
||||||
for path in paths_to_try:
|
|
||||||
if os.path.exists(path):
|
|
||||||
file_path = path
|
|
||||||
break
|
|
||||||
|
|
||||||
if file_path is None:
|
|
||||||
print(f"Soubor se svátky {HOLIDAYS_FILE} neexistuje.")
|
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(file_path, 'r', encoding='utf-8') as f:
|
with open(HOLIDAYS_FILE, 'r', encoding='utf-8') as f:
|
||||||
holidays = json.load(f)
|
holidays = json.load(f)
|
||||||
return holidays
|
return holidays
|
||||||
except json.JSONDecodeError as e:
|
except json.JSONDecodeError as e:
|
||||||
print(f"Chyba při čtení souboru se svátky: {e}")
|
debug_print(f"Chyba při čtení souboru se svátky: {e}")
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
def is_holiday(date_str):
|
def is_holiday(date_str):
|
||||||
@@ -49,7 +45,7 @@ def is_holiday(date_str):
|
|||||||
try:
|
try:
|
||||||
dt = datetime.strptime(date_str, "%d.%m.%Y")
|
dt = datetime.strptime(date_str, "%d.%m.%Y")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print(f"Neplatný formát data: {date_str}")
|
debug_print(f"Neplatný formát data: {date_str}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
holidays = load_holidays()
|
holidays = load_holidays()
|
||||||
@@ -70,7 +66,7 @@ def is_weekend(date_str):
|
|||||||
try:
|
try:
|
||||||
dt = datetime.strptime(date_str, "%d.%m.%Y")
|
dt = datetime.strptime(date_str, "%d.%m.%Y")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print(f"Neplatný formát data: {date_str}")
|
debug_print(f"Neplatný formát data: {date_str}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# 5 = sobota, 6 = neděle
|
# 5 = sobota, 6 = neděle
|
||||||
@@ -86,7 +82,7 @@ def get_previous_working_day(date_str):
|
|||||||
try:
|
try:
|
||||||
dt = datetime.strptime(date_str, "%d.%m.%Y")
|
dt = datetime.strptime(date_str, "%d.%m.%Y")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print(f"Neplatný formát data: {date_str}")
|
debug_print(f"Neplatný formát data: {date_str}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Odečítáme dny, dokud nenajdeme pracovní den
|
# Odečítáme dny, dokud nenajdeme pracovní den
|
||||||
@@ -104,15 +100,15 @@ def get_previous_working_day(date_str):
|
|||||||
|
|
||||||
# Příklad použití
|
# Příklad použití
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("Státní svátky v roce 2025:")
|
debug_print("Státní svátky v roce 2025:")
|
||||||
holidays = load_holidays()
|
holidays = load_holidays()
|
||||||
if "2025" in holidays:
|
if "2025" in holidays:
|
||||||
for holiday in holidays["2025"]:
|
for holiday in holidays["2025"]:
|
||||||
print(f" {holiday}")
|
debug_print(f" {holiday}")
|
||||||
|
|
||||||
test_date = "01.05.2025" # Svátek práce
|
test_date = "01.05.2025" # Svátek práce
|
||||||
print(f"\nDatum {test_date} je svátek: {is_holiday(test_date)}")
|
debug_print(f"\nDatum {test_date} je svátek: {is_holiday(test_date)}")
|
||||||
print(f"Datum {test_date} je víkend: {is_weekend(test_date)}")
|
debug_print(f"Datum {test_date} je víkend: {is_weekend(test_date)}")
|
||||||
|
|
||||||
prev_workday = get_previous_working_day("01.05.2025")
|
prev_workday = get_previous_working_day("01.05.2025")
|
||||||
print(f"Předchozí pracovní den před 01.05.2025: {prev_workday}")
|
debug_print(f"Předchozí pracovní den před 01.05.2025: {prev_workday}")
|
||||||
@@ -10,6 +10,19 @@ import database
|
|||||||
import holidays
|
import holidays
|
||||||
import data_fetcher
|
import data_fetcher
|
||||||
|
|
||||||
|
# Global debug flag
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
def debug_print(*args, **kwargs):
|
||||||
|
"""Print debug messages only if debug mode is enabled."""
|
||||||
|
if DEBUG:
|
||||||
|
print(*args, **kwargs)
|
||||||
|
|
||||||
|
def set_debug_mode(debug):
|
||||||
|
"""Set the debug mode for this module."""
|
||||||
|
global DEBUG
|
||||||
|
DEBUG = debug
|
||||||
|
|
||||||
def check_year_data_in_db(year):
|
def check_year_data_in_db(year):
|
||||||
"""
|
"""
|
||||||
Zkontroluje, zda databáze obsahuje data pro zadaný rok.
|
Zkontroluje, zda databáze obsahuje data pro zadaný rok.
|
||||||
@@ -44,7 +57,7 @@ def get_rate_for_date(date_str, currency_code):
|
|||||||
try:
|
try:
|
||||||
requested_date = datetime.strptime(date_str, "%d.%m.%Y")
|
requested_date = datetime.strptime(date_str, "%d.%m.%Y")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print(f"Neplatný formát data: {date_str}")
|
debug_print(f"Neplatný formát data: {date_str}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
year = requested_date.year
|
year = requested_date.year
|
||||||
@@ -52,17 +65,17 @@ def get_rate_for_date(date_str, currency_code):
|
|||||||
|
|
||||||
# Kontrola, zda je datum v budoucnosti
|
# Kontrola, zda je datum v budoucnosti
|
||||||
if requested_date.date() > today.date():
|
if requested_date.date() > today.date():
|
||||||
print(f"Chyba: Kurzy pro datum {date_str} ještě nebyly vydány, protože toto datum je v budoucnosti.")
|
debug_print(f"Chyba: Kurzy pro datum {date_str} ještě nebyly vydány, protože toto datum je v budoucnosti.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Kontrola, zda je dnešní datum a čas je před 14:30
|
# Kontrola, zda je dnešní datum a čas je před 14:30
|
||||||
if requested_date.date() == today.date() and today.time() < datetime.strptime("14:30", "%H:%M").time():
|
if requested_date.date() == today.date() and today.time() < datetime.strptime("14:30", "%H:%M").time():
|
||||||
print(f"Chyba: Kurzy pro dnešní datum ({date_str}) jsou vyhlašovány po 14:30. Aktuální čas je {today.strftime('%H:%M')}.")
|
debug_print(f"Chyba: Kurzy pro dnešní datum ({date_str}) jsou vyhlašovány po 14:30. Aktuální čas je {today.strftime('%H:%M')}.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Kontrola, zda databáze obsahuje data pro daný rok
|
# Kontrola, zda databáze obsahuje data pro daný rok
|
||||||
if not check_year_data_in_db(year):
|
if not check_year_data_in_db(year):
|
||||||
print(f"Databáze neobsahuje data pro rok {year}. Stahuji roční data...")
|
debug_print(f"Databáze neobsahuje data pro rok {year}. Stahuji roční data...")
|
||||||
# Stáhneme roční data s vynuceným stažením
|
# Stáhneme roční data s vynuceným stažením
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
data_fetcher.download_yearly_data(year, output_dir="data", force=True)
|
data_fetcher.download_yearly_data(year, output_dir="data", force=True)
|
||||||
@@ -72,42 +85,26 @@ def get_rate_for_date(date_str, currency_code):
|
|||||||
if rate is not None:
|
if rate is not None:
|
||||||
return rate
|
return rate
|
||||||
|
|
||||||
print(f"Kurz pro {currency_code} na datum {date_str} nebyl nalezen. Hledám nejbližší pracovní den...")
|
debug_print(f"Kurz pro {currency_code} na datum {date_str} nebyl nalezen. Hledám nejbližší pracovní den...")
|
||||||
|
|
||||||
# 2. Pokud kurz neexistuje, aplikujeme pravidla podle ČNB:
|
|
||||||
# "Kurzy devizového trhu jsou vyhlašovány pro běžně obchodované měny,
|
|
||||||
# a to každý pracovní den po 14.30 s platností pro aktuální pracovní den
|
|
||||||
# a pro případnou následující sobotu, neděli či státní svátek"
|
|
||||||
#
|
|
||||||
# To znamená:
|
|
||||||
# - Pro víkendy a svátky hledáme kurz zpět v čase (viz níže)
|
|
||||||
# - Pro běžné dny, které nemají kurz, hledáme kurz z posledního pracovního dne před nimi
|
|
||||||
|
|
||||||
|
# 2. Pokud kurz neexistuje, aplikujeme pravidla
|
||||||
# Zkontrolujeme, zda je datum víkend nebo svátek
|
# Zkontrolujeme, zda je datum víkend nebo svátek
|
||||||
if holidays.is_weekend(date_str) or holidays.is_holiday(date_str):
|
if holidays.is_weekend(date_str) or holidays.is_holiday(date_str):
|
||||||
# Pro víkendy a svátky hledáme kurz zpět v čase
|
debug_print(f"Datum {date_str} je víkend nebo státní svátek. Hledám předchozí pracovní den...")
|
||||||
# podle pravidel ČNB by měl platit kurz z posledního dne před nimi,
|
# Pro víkendy a svátky použijeme kurz z předchozího pracovního dne
|
||||||
# který měl být vyhlášen s platností pro tento víkend/svátek.
|
previous_workday = holidays.get_previous_working_day(date_str)
|
||||||
current_date = requested_date
|
if previous_workday:
|
||||||
# Odečítáme dny, dokud nenajdeme den s kurzem
|
debug_print(f"Používám kurz z předchozího pracovního dne: {previous_workday}")
|
||||||
# Omezení na 10 dní zpět
|
return database.get_rate(previous_workday, currency_code)
|
||||||
for _ in range(10):
|
else:
|
||||||
current_date -= timedelta(days=1)
|
debug_print("Nepodařilo se najít předchozí pracovní den.")
|
||||||
check_date_str = current_date.strftime("%d.%m.%Y")
|
return None
|
||||||
rate = database.get_rate(check_date_str, currency_code)
|
|
||||||
if rate is not None:
|
|
||||||
# Našli jsme kurz, použijeme ho
|
|
||||||
# (předpokládáme, že podle pravidel ČNB platí i pro následující víkend/svátek)
|
|
||||||
print(f"Datum {date_str} je víkend nebo státní svátek. Používám kurz z {check_date_str}: {rate}")
|
|
||||||
return rate
|
|
||||||
print("Nepodařilo se najít kurz pro víkend/svátek.")
|
|
||||||
return None
|
|
||||||
else:
|
else:
|
||||||
# Pro běžné dny, které nemají kurz, hledáme kurz z posledního pracovního dne před nimi
|
# Pro běžné dny hledáme zpět po pracovních dnech
|
||||||
print(f"Datum {date_str} je běžný den. Hledám kurz zpětně po pracovních dnech...")
|
debug_print(f"Datum {date_str} je běžný den. Hledám kurz zpětně po pracovních dnech...")
|
||||||
current_date = requested_date
|
|
||||||
# Odečítáme dny, dokud nenajdeme pracovní den s kurzem
|
# Odečítáme dny, dokud nenajdeme pracovní den s kurzem
|
||||||
# Omezení na 10 dní zpět
|
# Omezení na 10 dní zpět
|
||||||
|
current_date = requested_date
|
||||||
for _ in range(10):
|
for _ in range(10):
|
||||||
current_date -= timedelta(days=1)
|
current_date -= timedelta(days=1)
|
||||||
check_date_str = current_date.strftime("%d.%m.%Y")
|
check_date_str = current_date.strftime("%d.%m.%Y")
|
||||||
@@ -116,10 +113,10 @@ def get_rate_for_date(date_str, currency_code):
|
|||||||
if not holidays.is_weekend(check_date_str) and not holidays.is_holiday(check_date_str):
|
if not holidays.is_weekend(check_date_str) and not holidays.is_holiday(check_date_str):
|
||||||
rate = database.get_rate(check_date_str, currency_code)
|
rate = database.get_rate(check_date_str, currency_code)
|
||||||
if rate is not None:
|
if rate is not None:
|
||||||
print(f"Nalezen kurz z pracovního dne {check_date_str}: {rate}")
|
debug_print(f"Nalezen kurz z pracovního dne {check_date_str}")
|
||||||
return rate
|
return rate
|
||||||
|
|
||||||
print("Nepodařilo se najít kurz v posledních 10 pracovních dnech.")
|
debug_print("Nepodařilo se najít kurz v posledních 10 pracovních dnech.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Příklad použití
|
# Příklad použití
|
||||||
|
|||||||
@@ -11,6 +11,19 @@ import holidays
|
|||||||
import data_fetcher
|
import data_fetcher
|
||||||
import rate_finder
|
import rate_finder
|
||||||
|
|
||||||
|
# Global debug flag
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
def debug_print(*args, **kwargs):
|
||||||
|
"""Print debug messages only if debug mode is enabled."""
|
||||||
|
if DEBUG:
|
||||||
|
print(*args, **kwargs)
|
||||||
|
|
||||||
|
def set_debug_mode(debug):
|
||||||
|
"""Set the debug mode for this module."""
|
||||||
|
global DEBUG
|
||||||
|
DEBUG = debug
|
||||||
|
|
||||||
def get_rate_for_date_with_fallback(date_str, currency_code):
|
def get_rate_for_date_with_fallback(date_str, currency_code):
|
||||||
"""
|
"""
|
||||||
Vyhledá kurz pro zadané datum a měnu. Pokud kurz pro dané datum neexistuje,
|
Vyhledá kurz pro zadané datum a měnu. Pokud kurz pro dané datum neexistuje,
|
||||||
@@ -107,11 +120,11 @@ def generate_yearly_report(year, currency_code, output_dir="data"):
|
|||||||
:param output_dir: Adresář, kam se má CSV soubor s reportem uložit.
|
:param output_dir: Adresář, kam se má CSV soubor s reportem uložit.
|
||||||
:return: Cesta k vytvořenému CSV souboru.
|
:return: Cesta k vytvořenému CSV souboru.
|
||||||
"""
|
"""
|
||||||
print(f"Generuji report kurzů pro {currency_code} za rok {year}...")
|
debug_print(f"Generuji report kurzů pro {currency_code} za rok {year}...")
|
||||||
|
|
||||||
# Zkontrolujeme, zda databáze obsahuje data pro daný rok
|
# Zkontrolujeme, zda databáze obsahuje data pro daný rok
|
||||||
# Stáhneme roční data pouze pokud nejsou kompletní
|
# Stáhneme roční data pouze pokud nejsou kompletní
|
||||||
print(f"Kontroluji dostupnost ročních dat pro rok {year}...")
|
debug_print(f"Kontroluji dostupnost ročních dat pro rok {year}...")
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
data_fetcher.download_yearly_data(year, output_dir="data", force=False)
|
data_fetcher.download_yearly_data(year, output_dir="data", force=False)
|
||||||
|
|
||||||
@@ -123,7 +136,7 @@ def generate_yearly_report(year, currency_code, output_dir="data"):
|
|||||||
today = datetime.now()
|
today = datetime.now()
|
||||||
# Pokud je požadovaný rok v budoucnosti, nepokračujeme
|
# Pokud je požadovaný rok v budoucnosti, nepokračujeme
|
||||||
if year > today.year:
|
if year > today.year:
|
||||||
print(f"Chyba: Nelze generovat report pro budoucí rok {year}.")
|
debug_print(f"Chyba: Nelze generovat report pro budoucí rok {year}.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Pokud je požadovaný rok aktuální rok, omezíme konec na dnešní datum
|
# Pokud je požadovaný rok aktuální rok, omezíme konec na dnešní datum
|
||||||
@@ -175,10 +188,10 @@ def generate_yearly_report(year, currency_code, output_dir="data"):
|
|||||||
# Přejdeme na další den
|
# Přejdeme na další den
|
||||||
current_date += timedelta(days=1)
|
current_date += timedelta(days=1)
|
||||||
|
|
||||||
print(f"Report byl úspěšně uložen do: {filepath}")
|
debug_print(f"Report byl úspěšně uložen do: {filepath}")
|
||||||
return filepath
|
return filepath
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Chyba při zápisu do souboru: {e}")
|
debug_print(f"Chyba při zápisu do souboru: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def generate_monthly_report(year, month, currency_code, output_dir="data"):
|
def generate_monthly_report(year, month, currency_code, output_dir="data"):
|
||||||
@@ -191,11 +204,11 @@ def generate_monthly_report(year, month, currency_code, output_dir="data"):
|
|||||||
:param output_dir: Adresář, kam se má CSV soubor s reportem uložit.
|
:param output_dir: Adresář, kam se má CSV soubor s reportem uložit.
|
||||||
:return: Chta k vytvořenému CSV souboru.
|
:return: Chta k vytvořenému CSV souboru.
|
||||||
"""
|
"""
|
||||||
print(f"Generuji report kurzů pro {currency_code} za {month}/{year}...")
|
debug_print(f"Generuji report kurzů pro {currency_code} za {month}/{year}...")
|
||||||
|
|
||||||
# Zkontrolujeme, zda databáze obsahuje data pro daný rok
|
# Zkontrolujeme, zda databáze obsahuje data pro daný rok
|
||||||
# Stáhneme roční data pouze pokud nejsou kompletní
|
# Stáhneme roční data pouze pokud nejsou kompletní
|
||||||
print(f"Kontroluji dostupnost ročních dat pro rok {year}...")
|
debug_print(f"Kontroluji dostupnost ročních dat pro rok {year}...")
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
data_fetcher.download_yearly_data(year, output_dir="data", force=False)
|
data_fetcher.download_yearly_data(year, output_dir="data", force=False)
|
||||||
|
|
||||||
@@ -209,7 +222,7 @@ def generate_monthly_report(year, month, currency_code, output_dir="data"):
|
|||||||
today = datetime.now()
|
today = datetime.now()
|
||||||
# Pokud je požadovaný měsíc v budoucnosti, nepokračujeme
|
# Pokud je požadovaný měsíc v budoucnosti, nepokračujeme
|
||||||
if year > today.year or (year == today.year and month > today.month):
|
if year > today.year or (year == today.year and month > today.month):
|
||||||
print(f"Chyba: Nelze generovat report pro budoucí měsíc {month}/{year}.")
|
debug_print(f"Chyba: Nelze generovat report pro budoucí měsíc {month}/{year}.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Pokud je požadovaný měsíc aktuální měsíc, omezíme konec na dnešní datum
|
# Pokud je požadovaný měsíc aktuální měsíc, omezíme konec na dnešní datum
|
||||||
@@ -261,10 +274,10 @@ def generate_monthly_report(year, month, currency_code, output_dir="data"):
|
|||||||
# Přejdeme na další den
|
# Přejdeme na další den
|
||||||
current_date += timedelta(days=1)
|
current_date += timedelta(days=1)
|
||||||
|
|
||||||
print(f"Report byl úspěšně uložen do: {filepath}")
|
debug_print(f"Report byl úspěšně uložen do: {filepath}")
|
||||||
return filepath
|
return filepath
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Chyba při zápisu do souboru: {e}")
|
debug_print(f"Chyba při zápisu do souboru: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def generate_period_report(start_date_str, end_date_str, currency_code, output_dir="data"):
|
def generate_period_report(start_date_str, end_date_str, currency_code, output_dir="data"):
|
||||||
@@ -277,25 +290,25 @@ def generate_period_report(start_date_str, end_date_str, currency_code, output_d
|
|||||||
:param output_dir: Adresář, kam se má CSV soubor s reportem uložit.
|
:param output_dir: Adresář, kam se má CSV soubor s reportem uložit.
|
||||||
:return: Chta k vytvořenému CSV souboru.
|
:return: Chta k vytvořenému CSV souboru.
|
||||||
"""
|
"""
|
||||||
print(f"Generuji report kurzů pro {currency_code} za období {start_date_str} - {end_date_str}...")
|
debug_print(f"Generuji report kurzů pro {currency_code} za období {start_date_str} - {end_date_str}...")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
start_date = datetime.strptime(start_date_str, "%d.%m.%Y")
|
start_date = datetime.strptime(start_date_str, "%d.%m.%Y")
|
||||||
end_date = datetime.strptime(end_date_str, "%d.%m.%Y")
|
end_date = datetime.strptime(end_date_str, "%d.%m.%Y")
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print(f"Neplatný formát data: {e}")
|
debug_print(f"Neplatný formát data: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Ale nebudeme generovat report pro budoucí datumy
|
# Ale nebudeme generovat report pro budoucí datumy
|
||||||
today = datetime.now()
|
today = datetime.now()
|
||||||
# Pokud je požadované období v budoucnosti, nepokračujeme
|
# Pokud je požadované období v budoucnosti, nepokračujeme
|
||||||
if start_date.date() > today.date():
|
if start_date.date() > today.date():
|
||||||
print(f"Chyba: Nelze generovat report pro období v budoucnosti (od {start_date_str}).")
|
debug_print(f"Chyba: Nelze generovat report pro období v budoucnosti (od {start_date_str}).")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Pokud je konec období v budoucnosti, omezíme ho na dnešní datum
|
# Pokud je konec období v budoucnosti, omezíme ho na dnešní datum
|
||||||
if end_date.date() > today.date():
|
if end_date.date() > today.date():
|
||||||
print(f"Upozornění: Konec období byl omezen na dnešní datum ({today.strftime('%d.%m.%Y')}), protože zbytek je v budoucnosti.")
|
debug_print(f"Upozornění: Konec období byl omezen na dnešní datum ({today.strftime('%d.%m.%Y')}), protože zbytek je v budoucnosti.")
|
||||||
end_date = today
|
end_date = today
|
||||||
|
|
||||||
# Zkontrolujeme, zda databáze obsahuje data pro roky v rozmezí
|
# Zkontrolujeme, zda databáze obsahuje data pro roky v rozmezí
|
||||||
@@ -304,7 +317,7 @@ def generate_period_report(start_date_str, end_date_str, currency_code, output_d
|
|||||||
end_year = end_date.year
|
end_year = end_date.year
|
||||||
|
|
||||||
for year in range(start_year, end_year + 1):
|
for year in range(start_year, end_year + 1):
|
||||||
print(f"Kontroluji dostupnost ročních dat pro rok {year}...")
|
debug_print(f"Kontroluji dostupnost ročních dat pro rok {year}...")
|
||||||
os.makedirs("data", exist_ok=True)
|
os.makedirs("data", exist_ok=True)
|
||||||
data_fetcher.download_yearly_data(year, output_dir="data", force=False)
|
data_fetcher.download_yearly_data(year, output_dir="data", force=False)
|
||||||
|
|
||||||
@@ -353,10 +366,10 @@ def generate_period_report(start_date_str, end_date_str, currency_code, output_d
|
|||||||
# Přejdeme na další den
|
# Přejdeme na další den
|
||||||
current_date += timedelta(days=1)
|
current_date += timedelta(days=1)
|
||||||
|
|
||||||
print(f"Report byl úspěšně uložen do: {filepath}")
|
debug_print(f"Report byl úspěšně uložen do: {filepath}")
|
||||||
return filepath
|
return filepath
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Chyba při zápisu do souboru: {e}")
|
debug_print(f"Chyba při zápisu do souboru: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Příklad použití
|
# Příklad použití
|
||||||
|
|||||||
Reference in New Issue
Block a user