import requests from bs4 import BeautifulSoup as bs STATE_CODES = { 'Andaman-Nicobar': '01', 'Andhra-Pradesh': '02', 'Arunachal-Pradesh': '03', 'Assam': '04', 'Bihar': '05', 'Chandigarh': '06', 'Chhattisgarh': '07', 'Dadra-and-Nagar-Haveli': '08', 'Daman-and-Diu': '09', 'Delhi': '10', 'Goa': '11', 'Gujarat': '12', 'Haryana': '13', # 14 'Himachal-Pradesh': '15', 'Jammu-Kashmir': '16', 'Jharkhand': '17', 'Karnataka': '18', 'Kerala': '19', 'Lakshadweep': '20', 'Madhya-Pradesh': '21', 'Maharashtra': '22', 'Manipur': '23', 'Meghalaya': '24', 'Mizoram': '25', 'Nagaland': '26', 'Odisha': '27', 'Pondicherry': '28', 'Punjab': '29', 'Rajasthan': '30', 'Sikkim': '31', 'Tamilnadu': '32', 'Telangana': '33', 'Tripura': '34', 'Uttar-Pradesh': '35', 'Uttarakhand': '36', 'West-Bengal': '37', } # List of states that are given as the input selection to https://nwp.imd.gov.in/blf/blf_temp/ to get the weather forecast STATES = { 'Andaman-Nicobar': {}, 'Andhra-Pradesh': {}, 'Arunachal-Pradesh': {}, 'Assam': {}, 'Bihar': {}, 'Chandigarh': {}, 'Chhattisgarh': {}, 'Dadra-and-Nagar-Haveli': {}, 'Daman-and-Diu': {}, 'Delhi': { 'CENTRAL-DELHI': ['CENTRAL-DELHI'], 'EAST-DELHI': ['EAST-DELHI'], 'NEW-DELHI': ['NEW-DELHI'], 'NORTH-DELHI': ['NORTH-DELHI'], 'NORTH-EAST-DELHI': ['NORTH-EAST-DELHI'], 'NORTH-WEST-DELHI': ['NORTH-WEST-DELHI'], 'SHAHDARA': ['SHAHDARA'], 'SOUTH-DELHI': ['SOUTH-DELHI'], 'SOUTH-EAST-DELHI': ['SOUTH-EAST-DELHI'], 'SOUTH-WEST-DELHI': ['SOUTH-WEST-DELHI'], 'WEST-DELHI': ['WEST-DELHI'], }, 'Goa': {}, 'Gujarat': { 'AHMADABAD': ['AHMEDABAD-CITY', 'BAVLA', 'DASKROI', 'DETROJ-RAMPURA', 'DHANDHUKA', 'DHOLERA', 'DHOLKA', 'MANDAL', 'SANAND', 'VIRAMGAM'], 'AMRELI': ['AMRELI', 'BABRA', 'BAGASARA', 'DHARI', 'JAFRABAD', 'KHAMBHA', 'KUNKAVAV-VADIA', 'LATHI', 'LILIA', 'RAJULA', 'SAVERKUNDLA'], 'ANAND': [], 'ARVALLI': [], 'BANASKANTHA': [], 'BHARUCH': [], 'BHAVNAGAR': [], 'BOTAD': [], 'CHHOTAUDEPUR': [], 'DANG': [], 'DEVBHUMI-DWARKA': [], 'DOHAD': [], 'GANDHINAGAR': [], 'GIR-SOMNATH': [], 'JAMNAGAR': [], 'JUNAGADH': [], 'KACHCHH': [], 'KHEDA': [], 'MAHESANA': [], 'MAHISAGAR': [], 'MORBI': [], 'NARMADA': [], 'NAVSARI': [], 'PANCH-MAHALS': [], 'PATAN': [], 'PORBANDAR': [], 'RAJKOT': [], 'SABAR-KANTHA': [], 'SURAT': ['BARDOLI', 'CHORASI', 'KAMREJ', 'MAHUVA', 'MANDVI', 'MANGROL', 'OLPAD', 'PALSANA', 'SURAT-CITY', 'UMARPADA'], 'SURENDRANAGAR': [], 'TAPI': [], 'VADODARA': [], 'VALSAD': [], }, 'Haryana': {}, 'Himachal-Pradesh': {}, 'Jammu-Kashmir': {}, 'Jharkhand': {}, 'Karnataka': {}, 'Kerala': {}, 'Lakshadweep': {}, 'Madhya-Pradesh': {}, 'Maharashtra': {}, 'Manipur': {}, 'Meghalaya': {}, 'Mizoram': {}, 'Nagaland': {}, 'Odisha': {}, 'Pondicherry': {}, 'Punjab': {}, 'Rajasthan': {}, 'Sikkim': {}, 'Tamilnadu': {}, 'Telangana': {}, 'Tripura': {}, 'Uttar-Pradesh': {}, 'Uttarakhand': {}, 'West-Bengal': {}, } class WEATHER: def __init__(self): self.base_url = 'https://nwp.imd.gov.in/blf/blf_temp' # Weather forecast from Govt. website def get_weather_forecast(self, state, district, is_block_level=False): self.district_url = f"{self.base_url}/block.php?dis={STATE_CODES.get(state, '') + district}" self.block_url = f'{self.base_url}/table2.php' response = requests.get(self.district_url if not is_block_level else self.block_url) soup = bs(response.text, 'html.parser') scripts = soup.findAll('font')[0] return scripts.text # Weather using Google weather API def get_weather(self, city): city = city + " weather" city = city.replace(" ", "+") headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get( f'https://www.google.com/search?q={city}&oq={city}&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8', headers=headers) soup = bs(response.text, 'html.parser') location = soup.select('#wob_loc')[0].getText().strip() time = soup.select('#wob_dts')[0].getText().strip() info = soup.select('#wob_dc')[0].getText().strip() temperature = soup.select('#wob_tm')[0].getText().strip() temperature = temperature + "°C" return time, info, temperature