File size: 2,758 Bytes
75e2b6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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