derm-ai / app /services /environmental_condition.py
muhammadnoman76's picture
update
75e2b6c
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