Spaces:
Runtime error
Runtime error
| import requests | |
| from bs4 import BeautifulSoup | |
| class EnvironmentalData: | |
| def __init__(self, city): | |
| self.city = city | |
| self.aqi_url = f"https://api.waqi.info/feed/{city}/?token=466cde4d55e7c5d6cc658ad9c391214b593f46b9" | |
| self.uv_url = f"https://www.weatheronline.co.uk/Pakistan/{city}/UVindex.html" | |
| def fetch_aqi_data(self): | |
| try: | |
| response = requests.get(self.aqi_url) | |
| data = response.json() | |
| if data["status"] == "ok": | |
| return { | |
| "Temperature": data["data"]["iaqi"].get("t", {}).get("v", "N/A"), | |
| "Humidity": data["data"]["iaqi"].get("h", {}).get("v", "N/A"), | |
| "Wind Speed": data["data"]["iaqi"].get("w", {}).get("v", "N/A"), | |
| "Pressure": data["data"]["iaqi"].get("p", {}).get("v", "N/A"), | |
| "AQI": data["data"].get("aqi", "N/A"), | |
| "Dominant Pollutant": data["data"].get("dominentpol", "N/A"), | |
| } | |
| return self.get_default_aqi_data() | |
| except: | |
| return self.get_default_aqi_data() | |
| def get_default_aqi_data(self): | |
| return { | |
| "Temperature": "N/A", | |
| "Humidity": "N/A", | |
| "Wind Speed": "N/A", | |
| "Pressure": "N/A", | |
| "AQI": "N/A", | |
| "Dominant Pollutant": "N/A" | |
| } | |
| def fetch_uv_data(self): | |
| try: | |
| response = requests.get(self.uv_url) | |
| soup = BeautifulSoup(response.text, 'html.parser') | |
| gr1_elements = soup.find_all(class_='gr1') | |
| if gr1_elements: | |
| tr_elements = gr1_elements[0].find_all('tr') | |
| if len(tr_elements) > 1: | |
| second_tr = tr_elements[1] | |
| td_elements = second_tr.find_all('td') | |
| if len(td_elements) > 1: | |
| return int(td_elements[1].text.strip()) | |
| return "N/A" | |
| except: | |
| return "N/A" | |
| def get_environmental_data(self): | |
| aqi_data = self.fetch_aqi_data() | |
| uv_index = self.fetch_uv_data() | |
| environmental_data = { | |
| "Temperature": f"{aqi_data['Temperature']} °C" if aqi_data['Temperature'] != "N/A" else "N/A", | |
| "Humidity": f"{aqi_data['Humidity']} %" if aqi_data['Humidity'] != "N/A" else "N/A", | |
| "Wind Speed": f"{aqi_data['Wind Speed']} m/s" if aqi_data['Wind Speed'] != "N/A" else "N/A", | |
| "Pressure": f"{aqi_data['Pressure']} hPa" if aqi_data['Pressure'] != "N/A" else "N/A", | |
| "Air Quality Index": aqi_data['AQI'], | |
| "Dominant Pollutant": aqi_data["Dominant Pollutant"], | |
| "UV_Index": uv_index | |
| } | |
| return environmental_data |