import streamlit as st import requests from bs4 import BeautifulSoup import datetime import pytz # Set the timezone to Indian Standard Time (IST) indian_timezone = pytz.timezone('Asia/Kolkata') # Custom CSS for styling custom_css = """ """ st.markdown(custom_css, unsafe_allow_html=True) # Prescribed limits for AQI, PM2.5, PM10, and temperature PRESCRIBED_LIMITS = { 'AQI': { 'good': (0, 50), 'moderate': (51, 100), 'unhealthy_sensitive': (101, 150), 'unhealthy': (151, 200), 'very_unhealthy': (201, 300), 'hazardous': (301, 500) }, 'PM2.5': { 'good': (0, 12.0), 'moderate': (12.1, 35.4), 'unhealthy_sensitive': (35.5, 55.5), 'unhealthy': (55.6, 150.4), 'very_unhealthy': (150.5, 250.4), 'hazardous': (250.5, float('inf')) }, 'PM10': { 'good': (0, 50), 'moderate': (51, 100), 'unhealthy_sensitive': (101, 250), 'unhealthy': (251, 350), 'very_unhealthy': (351, 430), 'hazardous': (431, float('inf')) }, 'Temperature': { 'comfortable': (0, 25), 'moderate': (26, 30), 'warm': (31, 35), 'hot': (36, float('inf')) } } # Color codes for different AQI, PM2.5, PM10, and temperature levels COLOR_CODES = { 'good': 'green', 'moderate': 'yellow', 'unhealthy_sensitive': 'orange', 'unhealthy': 'red', 'very_unhealthy': 'purple', 'hazardous': 'maroon' } def check_safety_level(value, parameter): for level, limits in PRESCRIBED_LIMITS[parameter].items(): if limits[0] <= value <= limits[1]: return level return None def get_aqi_data(): url = 'https://www.aqi.in/dashboard/india/jammu-and-kashmir/srinagar' r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') meta_tag = soup.find('meta', {'name': 'description'}) line = meta_tag['content'] # Extract AQI value aqi_start = line.find("AQI) is") + len("AQI) is") aqi_end = line.find(" level") aqi = int(line[aqi_start:aqi_end].strip().split()[0]) aqi_level = line[aqi_start:aqi_end].strip().split()[1] # Extract PM2.5 value pm25_start = line.find("PM2.5 (") + len("PM2.5 (") pm25_end = line.find(" µg/m³)", pm25_start) pm25 = float(line[pm25_start:pm25_end].strip()) # Extract PM10 value pm10_start = line.find("PM10 (") + len("PM10 (") pm10_end = line.find(" µg/m³)", pm10_start) pm10 = float(line[pm10_start:pm10_end].strip()) # Extract temperature value temp_start = line.find("temperature (") + len("temperature (") temp_end = line.find("˚C)", temp_start) temp = float(line[temp_start:temp_end].strip()) return aqi, aqi_level, pm25, pm10, temp def main(): # Logo logo = 'LOGO.png' st.image(logo, width=200) st.title('Real Time SXR AQI Dashboard') st.subheader(f'Real-time Air Quality Monitoring - {datetime.datetime.now(indian_timezone).strftime("%Y-%m-%d %H:%M:%S")}') # Displaying date and time aqi, aqi_level, pm25, pm10, temp = get_aqi_data() # Display AQI with safety level st.markdown('### Current Data:') st.write(f"- **AQI:** {aqi} ({aqi_level})") aqi_safety = check_safety_level(aqi, 'AQI') if aqi_safety: st.write(f"Safety Level: {aqi_safety}") color_code = COLOR_CODES[aqi_safety] st.markdown(f'

The AQI level is {aqi_safety}.

', unsafe_allow_html=True) # Display PM2.5 with safety level st.write(f"- **PM2.5:** {pm25} µg/m³") pm25_safety = check_safety_level(pm25, 'PM2.5') if pm25_safety: st.write(f"Safety Level: {pm25_safety}") color_code = COLOR_CODES[pm25_safety] st.markdown(f'

The PM2.5 level is {pm25_safety}.

', unsafe_allow_html=True) # Display PM10 with safety level st.write(f"- **PM10:** {pm10} µg/m³") pm10_safety = check_safety_level(pm10, 'PM10') if pm10_safety: st.write(f"Safety Level: {pm10_safety}") color_code = COLOR_CODES[pm10_safety] st.markdown(f'

The PM10 level is {pm10_safety}.

', unsafe_allow_html=True) # Display temperature with safety level st.write(f"- **Temperature:** {temp}˚C") # Developer section st.markdown('### Developer:') st.text('Adil Aziz') st.text('Data Scientist') st.text('adilaziz2013@gmail.com') if __name__ == '__main__': main()