dschandra commited on
Commit
b0b1de3
·
verified ·
1 Parent(s): 187fcd9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -35
app.py CHANGED
@@ -5,43 +5,55 @@ import requests
5
  import os
6
  from datetime import datetime
7
 
8
- # Assuming weather_model.py exists; if not, we'll inline it
9
- try:
10
- from weather_model import get_weather_data
11
- except ImportError:
12
- def get_weather_data(city, days, api_key):
13
- try:
 
 
 
 
 
 
14
  geo_url = f"http://api.openweathermap.org/geo/1.0/direct?q={city}&limit=1&appid={api_key}"
15
  geo_response = requests.get(geo_url).json()
16
  if not geo_response:
17
  return None
18
- lat, lon = geo_response[0]['lat'], geo_response[0]['lon']
19
-
20
- url = f"http://api.openweathermap.org/data/2.5/onecall?lat={lat}&lon={lon}&exclude=minutely,hourly&units=metric&appid={api_key}"
21
- response = requests.get(url).json()
22
-
23
- current = {
24
- 'temp': response['current']['temp'],
25
- 'weather': response['current']['weather'][0]['description'],
26
- 'humidity': response['current']['humidity'],
27
- 'wind_speed': response['current']['wind_speed']
28
- }
29
-
30
- forecast = []
31
- for i in range(min(days, len(response['daily']))):
32
- day = response['daily'][i]
33
- forecast.append({
34
- 'date': datetime.fromtimestamp(day['dt']).strftime('%Y-%m-%d'),
35
- 'temp': day['temp']['day'],
36
- 'precipitation': day.get('rain', 0) + day.get('snow', 0),
37
- 'wind_speed': day['wind_speed'],
38
- 'weather': day['weather'][0]['main']
39
- })
40
-
41
- return {'current': current, 'forecast': forecast}
42
- except Exception as e:
43
- print(f"Error fetching weather data: {e}")
44
- return None
 
 
 
 
 
 
45
 
46
  # Initialize Dash app
47
  app = dash.Dash(__name__)
@@ -51,14 +63,14 @@ app.title = "Weather Forecast Dashboard"
51
  API_KEY = os.getenv("OPENWEATHERMAP_API_KEY", "53d50455f91b6bc3c920959e2954576d")
52
 
53
  # Fixed locations
54
- LOCATIONS = ["Hyderabad", "Jogulamba Gadwal", "Bangalore"]
55
  DAYS = 5 # Fixed 5-day forecast
56
 
57
  # Layout
58
  app.layout = html.Div([
59
  html.Div([
60
  html.H1("Weather Forecast Dashboard", style={'textAlign': 'center', 'color': '#FFFFFF'}),
61
- html.P("Current weather for Hyderabad, Gadwal, and Karnataka (Bangalore).",
62
  style={'textAlign': 'center', 'color': '#D3D9D4'})
63
  ], style={'backgroundColor': '#212A31', 'padding': '20px'}),
64
 
 
5
  import os
6
  from datetime import datetime
7
 
8
+ # Inline weather_model.py with fixes
9
+ def get_weather_data(city, days, api_key):
10
+ try:
11
+ # Fallback to coordinates if city name fails
12
+ city_coords = {
13
+ "Hyderabad": {"lat": 17.3850, "lon": 78.4867},
14
+ "Gadwal": {"lat": 16.2350, "lon": 77.8050},
15
+ "Bengaluru": {"lat": 12.9716, "lon": 77.5946}
16
+ }
17
+
18
+ coords = city_coords.get(city)
19
+ if not coords:
20
  geo_url = f"http://api.openweathermap.org/geo/1.0/direct?q={city}&limit=1&appid={api_key}"
21
  geo_response = requests.get(geo_url).json()
22
  if not geo_response:
23
  return None
24
+ coords = {"lat": geo_response[0]['lat'], "lon": geo_response[0]['lon']}
25
+
26
+ url = f"http://api.openweathermap.org/data/2.5/onecall?lat={coords['lat']}&lon={coords['lon']}&exclude=minutely,hourly&units=metric&appid={api_key}"
27
+ response = requests.get(url, timeout=10).json()
28
+
29
+ current = {
30
+ 'temp': response['current']['temp'],
31
+ 'weather': response['current']['weather'][0]['description'],
32
+ 'humidity': response['current']['humidity'],
33
+ 'wind_speed': response['current']['wind_speed']
34
+ }
35
+
36
+ forecast = []
37
+ for i in range(min(days, len(response['daily']))):
38
+ day = response['daily'][i]
39
+ forecast.append({
40
+ 'date': datetime.fromtimestamp(day['dt']).strftime('%Y-%m-%d'),
41
+ 'temp': day['temp']['day'],
42
+ 'precipitation': day.get('rain', 0) + day.get('snow', 0),
43
+ 'wind_speed': day['wind_speed'],
44
+ 'weather': day['weather'][0]['main']
45
+ })
46
+
47
+ return {'current': current, 'forecast': forecast}
48
+ except requests.exceptions.RequestException as e:
49
+ print(f"Network error for {city}: {e}")
50
+ return None
51
+ except KeyError as e:
52
+ print(f"API response error for {city}: {e}")
53
+ return None
54
+ except Exception as e:
55
+ print(f"Unexpected error for {city}: {e}")
56
+ return None
57
 
58
  # Initialize Dash app
59
  app = dash.Dash(__name__)
 
63
  API_KEY = os.getenv("OPENWEATHERMAP_API_KEY", "53d50455f91b6bc3c920959e2954576d")
64
 
65
  # Fixed locations
66
+ LOCATIONS = ["Hyderabad", "Gadwal", "Bengaluru"]
67
  DAYS = 5 # Fixed 5-day forecast
68
 
69
  # Layout
70
  app.layout = html.Div([
71
  html.Div([
72
  html.H1("Weather Forecast Dashboard", style={'textAlign': 'center', 'color': '#FFFFFF'}),
73
+ html.P("Current weather for Hyderabad, Gadwal, and Bengaluru (Karnataka).",
74
  style={'textAlign': 'center', 'color': '#D3D9D4'})
75
  ], style={'backgroundColor': '#212A31', 'padding': '20px'}),
76