Spaces:
Running
Running
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 |