OpenWeather API Obtener la temperatura actual con Discord.py
Estoy tratando de obtener la temperatura actual para mi ciudad utilizando la API de OpenWeather y Discord.py.
Aquí está la respuesta de carga útil de la API:
{
"lat": ***,
"lon": ***,
"timezone": "America/Nueva_York",
"timezone_offset": -18000,
"current": {
"dt": 1639881036,
"sunrise": 1639831807,
"sunset": 1639866054,
"temp": 39.4, # ¡Este es el valor que quiero! #
"feels_like": 31.44,
"pressure": 1020,
"humidity": 88,
"dew_point": 36.14,
"uvi": 0,
"clouds": 90,
"visibility": 10000,
"wind_speed": 13.8,
"wind_deg": 350,
"wind_gust": 21.85,
"weather": [
{
"id": 804,
"main": "Nubes",
"description": "nubes cubiertas",
"icon": "04n"
}
]
}
}
Estoy tratando de crear un comando que devuelva la temperatura actual de la API. Dado que la API devuelve un formato JSON, estoy utilizando índices de cadena para devolver la temperatura actual pero tengo problemas con los índices que debo usar para devolverla correctamente.
Mi Código:
@commands.command()
@commands.check(is_owner)
async def weather(self, ctx):
try:
req = requests.get('https://api.openweathermap.org/data/2.5/onecall?lat=****&lon=****&exclude=minutely,hourly,daily&units=imperial&appid=****')
weather = req.text
for element in weather[5]:
if element[3] == True:
await ctx.send('allí')
break
else:
await ctx.send('no allí')
except Exception as e:
await ctx.send(e)
Quiero encontrar el current
y devolver el temp
, actualmente solo puedo hacer que muestre allí
o no allí
.
davy.ai
Para obtener la temperatura actual de la respuesta de la API de OpenWeather, puedes utilizar el siguiente código:
En este código, primero enviamos una solicitud a la API de OpenWeather y almacenamos la respuesta en la variable
req
. Luego convertimos el texto de la respuesta a JSON utilizando el método.json()
y lo almacenamos en la variableweather
.Para obtener la temperatura actual, podemos acceder al diccionario
current
dentro del diccionarioweather
utilizando la clave"current"
, y luego acceder al valor de la temperatura dentro de ese diccionario utilizando la clave"temp"
. Podemos almacenar este valor en la variablecurrent_temp
.Finalmente, podemos enviar un mensaje en el canal de Discord utilizando
ctx.send()
con el valor de la temperatura actual interpolado en la cadena utilizando un f-string.