import streamlit as st import datetime import requests import pandas as pd from streamlit_calendar import calendar import os API_KEY = os.getenv("FMP_API_KEY") def fetch_economic_calendar(from_date, to_date): from_str = from_date.strftime("%Y-%m-%d") to_str = to_date.strftime("%Y-%m-%d") url = ( f"https://financialmodelingprep.com/api/v3/economic_calendar" f"?from={from_str}&to={to_str}&apikey={API_KEY}" ) resp = requests.get(url) if resp.status_code == 200: return resp.json() return [] def main(): st.set_page_config(page_title="Economic Calendar", layout="wide") if "econ_data" not in st.session_state: st.session_state["econ_data"] = [] st.title("Economic Calendar") st.write("This tool displays upcoming economic events. Set parameters and click run.") st.sidebar.title("Input Parameters") with st.sidebar.expander("How to Use", expanded=False): st.write("Select a date range. Then click the button to fetch events.") today = datetime.date.today() one_month_later = today + datetime.timedelta(days=30) with st.sidebar.expander("Parameters", expanded=True): from_date = st.date_input("From Date", value=today) to_date = st.date_input("To Date", value=one_month_later) if st.sidebar.button("Retrieve Calendar"): data = fetch_economic_calendar(from_date, to_date) event_list = [] for item in data: dt_str = item.get("date", "") if dt_str: # Replacing space with 'T' for proper ISO format iso_dt = dt_str.replace(" ", "T") else: iso_dt = f"{from_date}T00:00:00" event_entry = { "start": iso_dt, "end": iso_dt, "title": f"{item.get('event', '')} ({item.get('country', '')})", "color": "#3D9DF3", } event_entry.update(item) event_list.append(event_entry) st.session_state["econ_data"] = event_list #st.subheader("Economic Calendar Results") data_econ = st.session_state["econ_data"] if data_econ: calendar_events = [ { "title": ev["title"], "start": ev["start"], "end": ev["end"], "color": ev["color"], } for ev in data_econ ] cal_options = { "initialView": "dayGridMonth", "headerToolbar": { "left": "today prev,next", "center": "title", "right": "dayGridDay,dayGridWeek,dayGridMonth", }, "navLinks": True, } calendar(events=calendar_events, options=cal_options, key="econ_cal") st.write("Data Table") st.dataframe(pd.DataFrame(data_econ), use_container_width=True) else: #st.write("No data found. Adjust the date range and click again.") st.write(" ") if __name__ == "__main__": main() hide_streamlit_style = """ """ st.markdown(hide_streamlit_style, unsafe_allow_html=True)