Spaces:
Sleeping
Sleeping
File size: 8,140 Bytes
5200163 de2af79 a62a375 468b5d8 5200163 de2af79 5200163 7e647bf 0042764 7e647bf 9677e2c 7e647bf 5200163 a14e140 5200163 9cc8f58 9e1dd87 ce707d5 29d0076 9e1dd87 29d0076 9cc8f58 613d205 29d0076 ce707d5 9cc8f58 29d0076 5200163 424157e 5200163 7e647bf 9e1dd87 0042764 424157e 9e1dd87 424157e 4ffd423 c22b5b4 4ffd423 9e1dd87 4ffd423 9e1dd87 4ffd423 9e1dd87 4ffd423 9e1dd87 4ffd423 9e1dd87 4ffd423 c22b5b4 4ffd423 424157e 4ffd423 5200163 468b5d8 5200163 424157e 5200163 7a8a059 468b5d8 |
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
import gradio as gr
import openai
import requests
from bs4 import BeautifulSoup
import os
from datetime import datetime
import time
# OpenAI API Key aus Umgebungsvariablen
openai.api_key = os.getenv('OPENAI_API_KEY')
# Funktion, um aktuelle Wetterdaten zu holen
def get_current_weather_data(lat, lon):
api_key = os.getenv('WEATHER_API_KEY')
base_url = "http://api.openweathermap.org/data/2.5/weather?"
complete_url = f"{base_url}lat={lat}&lon={lon}&appid={api_key}&units=metric&lang=de&_={datetime.now().timestamp()}"
response = requests.get(complete_url)
if response.status_code == 200:
data = response.json()
print(f"API Antwort: {data}") # Ausgabe der gesamten API-Antwort zur Fehlersuche
return data
else:
print(f"Fehler beim Abrufen der Wetterdaten: {response.status_code}")
return None
# Funktion, um Wassertemperatur zu holen
def get_water_temperature():
url = "https://www.badi-info.ch/_temp/ww/sursee.htm"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
water_temp_element = soup.find("b", {"id": "t5"})
if water_temp_element:
return water_temp_element.text.strip() + "°C"
else:
return "Wassertemperatur nicht verfügbar"
# Funktion, um GPT-3.5 Turbo zu nutzen, um eine Badeempfehlung zu generieren
def get_bathing_recommendation_with_gpt(temp, feels_like_temp, humidity, wind_speed, weather_description, water_temp):
if water_temp == "Wassertemperatur nicht verfügbar":
return "Wassertemperatur nicht verfügbar. Keine Badeempfehlung möglich."
prompt = f"""
Hier sind die aktuellen Wetterdaten:
- Temperatur: {temp:.2f}°C
- Gefühlte Temperatur: {feels_like_temp:.2f}°C
- Luftfeuchtigkeit: {humidity:.2f}%
- Wetterbeschreibung: {weather_description}
- Windgeschwindigkeit: {wind_speed:.2f} m/s
- Wassertemperatur: {water_temp}
Basierend auf diesen Daten, ist es ein guter Tag zum Baden? Bitte gib eine Empfehlung ab.
"""
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "Du bist ein hilfreicher Assistent, der Empfehlungen basierend auf Wetterdaten gibt."},
{"role": "user", "content": prompt}
],
max_tokens=256,
temperature=0.5
)
recommendation = response.choices[0].message['content'].strip()
return recommendation
# Funktion, um Wetterdaten zu holen und Bericht zu erstellen
def get_weather():
# Koordinaten für Seebad Eich
lat, lon = 47.1511104, 8.1662631
current_weather_data = get_current_weather_data(lat, lon)
if current_weather_data:
temp = current_weather_data["main"]["temp"]
feels_like_temp = current_weather_data["main"]["feels_like"]
humidity = current_weather_data["main"]["humidity"]
wind_speed = current_weather_data["wind"]["speed"]
weather_description = current_weather_data["weather"][0]["description"]
print(f"Extrahierte Wetterbeschreibung: {weather_description}") # Ausgabe der extrahierten Wetterbeschreibung zur Überprüfung
water_temp = get_water_temperature()
recommendation = get_bathing_recommendation_with_gpt(temp, feels_like_temp, humidity, wind_speed, weather_description, water_temp)
weather_report = f"""
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="manifest" href="/manifest.json">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="Wetterbericht Seebad Eich">
<title>Wetterbericht Seebad Eich</title>
<style>
body {{
font-family: Arial, sans-serif;
background-color: #333;
color: #fff;
margin: 0;
padding: 0;
width: 100%;
}}
.container {{
width: 100%;
padding: 20px;
box-sizing: border-box;
}}
h2 {{
text-align: center;
}}
table {{
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}}
th, td {{
text-align: left;
padding: 8px;
}}
h3 {{
margin-top: 40px;
}}
</style>
</head>
<body>
<div class="container">
<h2>Wetterbericht Seebad Eich</h2>
<table>
<tr>
<th>Parameter</th>
<th>Wert</th>
</tr>
<tr>
<td>Temperatur</td>
<td>{temp:.2f}°C</td>
</tr>
<tr>
<td>Gefühlte Temperatur</td>
<td>{feels_like_temp:.2f}°C</td>
</tr>
<tr>
<td>Luftfeuchtigkeit</td>
<td>{humidity:.2f}%</td>
</tr>
<tr>
<td>Wetterbeschreibung</td>
<td>{weather_description}</td>
</tr>
<tr>
<td>Windgeschwindigkeit</td>
<td>{wind_speed:.2f} m/s</td>
</tr>
<tr>
<td>Wassertemperatur am Sempachersee</td>
<td>{water_temp}</td>
</tr>
</table>
<h3 style="margin-top: 40px;">Badeempfehlung</h3>
<p>{recommendation}</p>
</div>
</body>
</html>
"""
else:
weather_report = """
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="manifest" href="/manifest.json">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="Wetterbericht Seebad Eich">
<title>Wetterbericht Seebad Eich</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #333;
color: #fff;
margin: 0;
padding: 0;
width: 100%;
}
.container {
width: 100%;
padding: 20px;
box-sizing: border-box;
}
h2 {
text-align: center;
}
p {
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h2>Wetterbericht Seebad Eich</h2>
<p>Wetterdaten konnten nicht abgerufen werden. Bitte versuchen Sie es später erneut.</p>
</div>
</body>
</html>
"""
return weather_report
# Gradio-Interface ohne Input, direktes Ausführen bei Start
iface = gr.Blocks()
def update_weather():
while True:
weather_report = get_weather()
iface.clear()
iface.HTML(weather_report)
time.sleep(3600) # Wartezeit von einer Stunde (3600 Sekunden)
with iface:
gr.HTML(get_weather())
iface.launch()
update_weather()
|