es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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í.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener la temperatura actual de la respuesta de la API de OpenWeather, puedes utilizar el siguiente 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.json()
            current_temp = weather["current"]["temp"]
            await ctx.send(f'La temperatura actual es de {current_temp}°F')
        except Exception as e:
            await ctx.send(e)
    

    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 variable weather.

    Para obtener la temperatura actual, podemos acceder al diccionario current dentro del diccionario weather 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 variable current_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.

Comments are closed.