Mini project in python with exchange rate API
Using the NBP API – https://api.nbp.pl/
- collect a date range (from – to) from the user
- download the 1 currency code of interest (e.g. EUR, USD, etc.) – Table A
- From the downloaded course data, display the course with the date
- lowest odds
- top rate
- Today’s rate or the closest to today’s rate, if there is no rate for today
save these 3 data to a text file (description, date, course)
import requests
from datetime import datetime
import os
# Funkcja do pobrania danych z API NBP
def get_currency_data(start_date, end_date, currency_code):
url = f'https://api.nbp.pl/api/exchangerates/rates/a/{currency_code}/{start_date}/{end_date}/'
response = requests.get(url)
return response.json() if response.status_code == 200 else None
# Pobieranie danych od użytkownika
start_date = input("Podaj datę początkową (YYYY-MM-DD): ")
end_date = input("Podaj datę końcową (YYYY-MM-DD): ")
currency_code = input("Podaj kod waluty (np. EUR, USD): ").upper()
# Pobranie danych o kursach
data = get_currency_data(start_date, end_date, currency_code)
if data and 'rates' in data and data['rates']:
rates = data['rates']
# Wyświetlenie kursów
for rate in rates:
print(f"Data: {rate['effectiveDate']}, Kurs: {rate['mid']}")
# Analiza kursów
min_rate = min(rates, key=lambda x: x['mid'])
max_rate = max(rates, key=lambda x: x['mid'])
today = datetime.now() # Użyj datetime teraz, aby uzyskać czas i datę
today_date_str = today.date().isoformat() # Użyj daty jako stringa w formacie YYYY-MM-DD
today_rate = None
# Znalezienie kursu na dzisiaj lub najbliższego
for rate in rates:
if rate['effectiveDate'] == today_date_str:
today_rate = rate
break
if today_rate is None:
closest_date = min(rates, key=lambda x: abs(datetime.fromisoformat(x['effectiveDate']) - today))
today_rate = closest_date
# Wyświetlenie wyników
print(f"\nNajmniejszy kurs: {min_rate['mid']} z dnia {min_rate['effectiveDate']}")
print(f"Największy kurs: {max_rate['mid']} z dnia {max_rate['effectiveDate']}")
print(f"Kurs na dziś (lub najbliższy): {today_rate['mid']} z dnia {today_rate['effectiveDate']}")
# Zapis do pliku
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop", "currency_rates.txt")
try:
with open(desktop_path, "w") as file:
file.write(f"Najmniejszy kurs: {min_rate['mid']} z dnia {min_rate['effectiveDate']}\n")
file.write(f"Największy kurs: {max_rate['mid']} z dnia {max_rate['effectiveDate']}\n")
file.write(f"Kurs na dziś (lub najbliższy): {today_rate['mid']} z dnia {today_rate['effectiveDate']}\n")
print(f"Dane zostały zapisane do pliku {desktop_path}.")
except Exception as e:
print(f"Błąd podczas zapisywania do pliku: {e}")
else:
print("Błąd w pobieraniu danych. Sprawdź kod waluty lub zakres dat.")