Spaces:
Sleeping
Sleeping
| 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 = """ | |
| <style> | |
| #MainMenu {visibility: hidden;} | |
| footer {visibility: hidden;} | |
| </style> | |
| """ | |
| st.markdown(hide_streamlit_style, unsafe_allow_html=True) | |