|

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.")

Leave a Reply

Your email address will not be published. Required fields are marked *