Buenas gracias a todos por sus aportes. Si, me llamo Verónica.
En respuesta a Alexis, puede ser una forma incorrecta de realizar la
consulta pero cuando hice copy-paste, al probar con distintas localidades
funcionó. Tengo que mirar la info para desarrolladores que tiene más
detenidamente, no es larga.
Yo al 404 lo entiendo como el de page not found, de ahí que el else te diga
que no encontró la ciudad. No encuentra la página con la información de esa
localidad.



El vie., 3 de jul. de 2020 04:33, Alexis Roda <
alexis.roda.villalo...@gmail.com> escribió:

> Si python dice "KeyError: main" al ejecutar y = x["main"] es que x no
> tiene la clave "main". Averigua el valor de x, tal vez te dé una pista del
> problema.
>
> En el otro mensaje, al cambiar "main" por "cod" el error era "int value is
> not subscriptable" (o algo parecido), eso nos dice que el valor asociado a
> la clave "cod" es un número (habría que confirmarlo con la documentación de
> la API) pero el programa lo trata como una cadena (en el if x["cod"] !=
> "404"). El número 404 y la cadena "404" comparan como distintos. No sé si
> tiene que ver con el KeyError main pero es un error que habría que
> corregir. Relacionado con esto, no parece buena idea asumir que si el
> código es distinto de 404 la petición ha ido bien. Asumiendo que sean
> códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino si
> cod == 404 imprime "no encontrado" ... sino imprime "error desconocido".
>
> Me llama la atención que el script utilice el paquete requests para luego
> acabar construyendo la URL a mano. Por otro lado la URL que construye no
> parece muy correcta. Suponiendo que nombre_ciudad sea FOO:
>
> url = "http://api.openweathermap.org/data/2.5/weather?q=sp";
> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad
>
>
> al final complete_url vale
> http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO.
> Creo que deberia ser algo mas parecido a
> http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp
> .
>
> Usando requests de forma correcta te quitas problemas:
>
> url = "http://api.openweathermap.org/data/2.5/weather
> <http://api.openweathermap.org/data/2.5/weather?q=sp>"
> response = requests.get(url, data={"q": nombre_ciudad, "lang": "sp",
> "appid": api_key})
>
>
> añadirá el ? y los & donde corresponda, codificará correctamente los
> valores y no quedarán valores "desparejados" ni claves duplicadas.
>
> Visto todo esto sigo pensando que el problema es una mala petición a la
> API que devuelve un código de error que no es gestionado correctamente.
>
> Respecto a que el problema se produzca cuando escribes el programa a mano
> y que funciona si copias/pegas. En caso que no sea un error evidente en la
> transcripción y que el valor de x no te dé ninguna pista, los IDE suelen
> incluir alguna herramienta para comparar archivos. Comparalos y encuentra
> que los hace diferentes y puede causar el problema.
>
> https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.html
>
> Creo que es excesivo para este problema pero es otra herramienta que puede
> ser útil.
>
>
> Saludos
>
> Missatge de Lemarchand Barker <lemarchand8...@gmail.com> del dia dv., 3
> de jul. 2020 a les 1:22:
>
>> Hola, el código de api key funciona, porque me registré y lo usé y
>> funcionó.
>> Lo de sp fue más que nada para probar, corresponde al Multilingual
>> support. Incluso cuando hice copy-paste del código sin usar el sp,
>> funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current.
>> Lo del multilingual está ya casi al final de la página.
>> La url que uso es esta: api.openweathermap.org/data/2.5/weather? que es
>> la misma que figura en la página. Reitero, el problema me salta cada vez
>> que copio el código de forma manual, con copy-paste ningún problema.
>> Saludos
>>
>> El jue., 2 jul. 2020 a las 20:00, David Suárez vía Python-es (<
>> python-es@python.org>) escribió:
>>
>>> Vero,
>>>
>>> el problema que veo es que tienes la cadena "sp" de sobra tanto en la
>>> variable url como cuando generas complete_url y creo que no deberían ir
>>> allí, aunque no he podido checarlo por lo de la llave API.
>>>
>>> El jue., 2 de jul. de 2020 a la(s) 17:30, Lemarchand Barker (
>>> lemarchand8...@gmail.com) escribió:
>>>
>>>> Hola, este es mi código:
>>>>
>>>> import requests
>>>> import json
>>>>
>>>> api_key = "API_KEY"
>>>>
>>>> url = "http://api.openweathermap.org/data/2.5/weather?q=sp";
>>>>
>>>> nombre_ciudad = input("Ingrese nombre de la ciudad: ")
>>>>
>>>> complete_url = url + "appid=" + api_key + "&q=sp" + nombre_ciudad
>>>>
>>>> response = requests.get(complete_url)
>>>>
>>>> x = response.json()
>>>>
>>>> if x["cod"] != "404":
>>>>
>>>>     y = x["main"]
>>>>
>>>>     temperatura_actual = y["temp"]
>>>>
>>>>     celsius = temperatura_actual - 273.15
>>>>
>>>>     presion_actual = y["pressure"]
>>>>
>>>>     humedad_actual = y["humidity"]
>>>>
>>>>     z = x["clima"]
>>>>
>>>>     descripcion = z[0]["descripcion"]
>>>>
>>>>     print(f"Temperatura: {celsius}°")
>>>>     print(f"Presión atmosférica: {presion_actual} hPa")
>>>>     print(f"Humedad: {humedad_actual} %")
>>>>     print(f"Descripción: {descripcion}")
>>>>
>>>> else:
>>>>     print("Ciudad no encontrada")
>>>>
>>>> La salida es la siguiente:
>>>>
>>>> /usr/bin/python3.8 /home/raiden/Programacion/weather/weather.py
>>>> Ingrese nombre de la ciudad: Rosario
>>>> Traceback (most recent call last):
>>>>   File "/home/raiden/Programacion/weather/weather.py", line 18, in
>>>> <module>
>>>>     y = x["main"]
>>>> KeyError: 'main'
>>>>
>>>> El código original es este:
>>>> Python-find-current-weather-of-any-city-using-openweathermap-api/
>>>> <https://www.geeksforgeeks.org/python-find-current-weather-of-any-city-using-openweathermap-api/>
>>>>
>>>> Saludos y gracias
>>>>
>>>>
>>>> El jue., 2 jul. 2020 a las 18:20, Gerardo Diez (<
>>>> gerardo.diez.gar...@gmail.com>) escribió:
>>>> >
>>>> > Hola,
>>>> >
>>>> > No soy precisamente un experto, pero yo normalmente voy poniendo
>>>> prints /liga por todos lados para que me vaya mostrando el contenido de las
>>>> cadenas.
>>>> >
>>>> > No recuerdo muy bien el funcionamiento de input pero puede ser que el
>>>> string que se esté incorporando lleve un salto de línea final ( \n)?
>>>> >
>>>> > Si es así mira la función strip
>>>> >
>>>> > Un saludo
>>>> >
>>>> > El jue., 2 jul. 2020 22:01, lemarchand8679 <lemarchand8...@gmail.com>
>>>> escribió:
>>>> >>
>>>> >> Hola, había escrito para comentar que había solucionado el
>>>> inconveniente de KeyError, y es cierto en parte. Digo en parte porque si
>>>> escribo desde 0 para hacer algunas modificaciones, me tira ese error al
>>>> introducir una ciudad, y si hago un copy-paste del código funciona y la
>>>> verdad no se por qué, alguna idea? Gracias
>>>> >>
>>>> >>
>>>> >>
>>>> >> Enviado desde mi smartphone Samsung Galaxy.
>>>> >>
>>>> >> _______________________________________________
>>>> >> Python-es mailing list
>>>> >> Python-es@python.org
>>>> >> https://mail.python.org/mailman/listinfo/python-es
>>>> >
>>>> > _______________________________________________
>>>> > Python-es mailing list
>>>> > Python-es@python.org
>>>> > https://mail.python.org/mailman/listinfo/python-es
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a