| import gradio as gr |
| import requests |
| from bs4 import BeautifulSoup |
| import time |
|
|
| def fetch_xanthi_weather_data(url): |
| headers = { |
| 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' |
| } |
|
|
| try: |
| response = requests.get(url, headers=headers) |
| response.raise_for_status() |
| soup = BeautifulSoup(response.content, 'html.parser') |
|
|
| data = {} |
|
|
| |
| date_time_span = soup.find_all('span')[10] |
| data['last'] = date_time_span.text.strip() |
|
|
| |
| temp_element = soup.find('span', string='Θερμοκρασία') |
| if temp_element: |
| temp_value = soup.find('div', class_='lright').find('span') |
| data['temperature'] = temp_value.text.strip() |
| else: |
| data['temperature'] = 'N/A' |
|
|
| |
| humidity_element = soup.find('span', string='Υγρασία') |
| if humidity_element: |
| humidity_div = humidity_element.find_next('div', class_='lright').find('span') |
| data['humidity'] = humidity_div.text.strip() |
| else: |
| data['humidity'] = 'N/A' |
|
|
| |
| wind_element = soup.find('span', string='Άνεμος') |
| if wind_element: |
| wind_div = wind_element.find_next('div', class_='lright').find('span') |
| data['wind_speed'] = wind_div.text.strip() |
| else: |
| data['wind_speed'] = 'N/A' |
| |
| sd_element = soup.find('span', string='Σημείο Δρόσου') |
| if sd_element: |
| sd_div = sd_element.find_next('div', class_='lright').find('span') |
| data['sd'] = sd_div.text.strip() |
| else: |
| data['sd'] = 'N/A' |
|
|
| |
| pressure_element = soup.find('span', string='Βαρόμετρο') |
| if pressure_element: |
| pressure_div = pressure_element.find_next('div', class_='lright').find('span') |
| data['pressure'] = pressure_div.text.strip() |
| else: |
| data['pressure'] = 'N/A' |
|
|
| |
| rain_element = soup.find('span', string='Ραγδαιότητα') |
| if rain_element: |
| rain_div = rain_element.find_next('div', class_='lright').find('span') |
| data['rainfall'] = rain_div.text.strip() |
| else: |
| data['rainfall'] = 'N/A' |
|
|
| return data |
|
|
| except requests.exceptions.RequestException as e: |
| return {"error": f"Error fetching data: {e}"} |
| except Exception as e: |
| return {"error": f"Error parsing data: {e}"} |
|
|
| def display_weather(): |
| url = 'https://penteli.meteo.gr/stations/xanthi/' |
| weather_data = fetch_xanthi_weather_data(url) |
|
|
| if "error" in weather_data: |
| return weather_data["error"] |
|
|
| output = f""" |
| <div style="background-color: #ffffff; padding: 40px; border-radius: 10px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);"> |
| <h1>Last values: {weather_data.get('last', 'N/A')}</h1> |
| <h1>Temperature: {weather_data.get('temperature', 'N/A')}</h1> |
| <h1>Humidity: {weather_data.get('humidity', 'N/A')}</h1> |
| <h1>SD: {weather_data.get('sd', 'N/A')}</h1> |
| <h1>Pressure: {weather_data.get('pressure', 'N/A')}</h1> |
| <h1>Rainfall: {weather_data.get('rainfall', 'N/A')}</h1> |
| </div> |
| """ |
| time.sleep(1) |
| return output |
|
|
| iface = gr.Interface( |
| fn=display_weather, |
| inputs=None, |
| outputs=gr.HTML(label="Xanthi Weather"), |
| title="Μετεωρολογικός σταθμός Ξάνθης", |
| description=" " |
| ) |
|
|
| iface.launch() |