Spaces:
Sleeping
Sleeping
| import dash | |
| from dash import dcc, html, Input, Output | |
| import plotly.graph_objs as go | |
| import requests | |
| from datetime import datetime | |
| from weather_model import get_weather_data # Assuming this file exists | |
| # Initialize Dash app | |
| app = dash.Dash(__name__) | |
| app.title = "Weather Forecast Dashboard" | |
| # Replace with your OpenWeatherMap API key | |
| API_KEY = "53d50455f91b6bc3c920959e2954576d" | |
| # Layout | |
| app.layout = html.Div([ | |
| html.Div([ | |
| html.H1("Weather Forecast Dashboard", style={'textAlign': 'center', 'color': '#FFFFFF'}), | |
| html.P("Get real-time updates and predictions for your location.", | |
| style={'textAlign': 'center', 'color': '#D3D9D4'}) | |
| ], style={'backgroundColor': '#212A31', 'padding': '20px'}), | |
| html.Div([ | |
| dcc.Input(id='city-input', type='text', value='New York', | |
| style={'width': '50%', 'margin': '10px', 'padding': '5px'}), | |
| html.Button('Get Weather', id='submit-btn', n_clicks=0, | |
| style={'backgroundColor': '#748D92', 'color': '#212A31', 'padding': '5px 15px'}), | |
| dcc.Dropdown(id='forecast-days', options=[ | |
| {'label': '5 Days', 'value': 5}, | |
| {'label': '10 Days', 'value': 10} | |
| ], value=5, style={'width': '50%', 'margin': '10px'}) | |
| ], style={'backgroundColor': '#2E3944', 'padding': '20px', 'borderRadius': '10px'}), | |
| html.Div(id='weather-summary', style={'color': '#FFFFFF', 'padding': '20px'}), | |
| dcc.Graph(id='temperature-graph'), | |
| dcc.Graph(id='precipitation-graph'), | |
| dcc.Graph(id='wind-graph'), | |
| ], style={'backgroundColor': '#1A2329', 'fontFamily': 'Arial', 'minHeight': '100vh'}) | |
| # Callback to update dashboard | |
| def update_dashboard(n_clicks, city, days): | |
| if n_clicks == 0: | |
| return "Enter a city and click 'Get Weather'.", {}, {}, {} | |
| weather_data = get_weather_data(city, days, API_KEY) | |
| if not weather_data: | |
| return "City not found!", {}, {}, {} | |
| # Summary | |
| current = weather_data['current'] | |
| summary = html.Div([ | |
| html.H3(f"Current Weather in {city}"), | |
| html.P(f"Temperature: {current['temp']}°C"), | |
| html.P(f"Condition: {current['weather']}"), | |
| html.P(f"Humidity: {current['humidity']}%"), | |
| html.P(f"Wind Speed: {current['wind_speed']} km/h"), | |
| ]) | |
| # Temperature Graph | |
| dates = [d['date'] for d in weather_data['forecast']] | |
| temps = [d['temp'] for d in weather_data['forecast']] | |
| temp_fig = { | |
| 'data': [go.Scatter(x=dates, y=temps, mode='lines+markers', name='Temperature')], | |
| 'layout': go.Layout(title='Temperature Forecast', xaxis={'title': 'Date'}, | |
| yaxis={'title': 'Temperature (°C)'}, template='plotly_dark') | |
| } | |
| # Precipitation Graph | |
| precip = [d['precipitation'] for d in weather_data['forecast']] | |
| precip_fig = { | |
| 'data': [go.Bar(x=dates, y=precip, name='Precipitation')], | |
| 'layout': go.Layout(title='Precipitation Forecast', xaxis={'title': 'Date'}, | |
| yaxis={'title': 'Precipitation (mm)'}, template='plotly_dark') | |
| } | |
| # Wind Speed Graph | |
| wind = [d['wind_speed'] for d in weather_data['forecast']] | |
| wind_fig = { | |
| 'data': [go.Scatter(x=dates, y=wind, mode='lines+markers', name='Wind Speed')], | |
| 'layout': go.Layout(title='Wind Speed Forecast', xaxis={'title': 'Date'}, | |
| yaxis={'title': 'Wind Speed (km/h)'}, template='plotly_dark') | |
| } | |
| return summary, temp_fig, precip_fig, wind_fig | |
| # Run server on port 7860 for Hugging Face Spaces | |
| if __name__ == '__main__': | |
| app.run_server(debug=True, host='0.0.0.0', port=7860) |