Getting "name 'get_weather' is not defined error and no json_data returned? - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Getting "name 'get_weather' is not defined error and no json_data returned? (/thread-34888.html) |
Getting "name 'get_weather' is not defined error and no json_data returned? - trthskr4 - Sep-12-2021 I'm stumped again. Been trying different ways of getting this to work and its solution is evading me. LOL Just learning and am running Python 3.9.7 My next hurdle is to get the api key from it once and store in config.ini permanently and then get the user interface window up and running. from tkinter import * from configparser import ConfigParser import requests name = input("Name?: ") age = input("Age?: ") weightLBS = input("Weight in lbs?: ") diagnosed = input("Have you been diagnosed with MD by doctor?: ") api_key = input("API key? ") #Weather API json and data pull url = "http//api.openweathermap.org/data/2.5/weather?q={},{}&appid={}" city = input("City where you are?: ") state = input("State where you are? ") api_key = config_file = 'config.ini' config = ConfigParser() config.read('config_file') #api_key = input(api_key) #(config.ini[api_key][key]) def get_weather(city, state, api_key): result = requests.get_weather(url.format(city, state, api_key)) if result: print(result.json_data) json_data = result.json() city = json['name'] temp_kelvin = json['main']['temp'] temp_min_kelvin= json['main']['temp_min'] temp_max_kelvin = json['main']['temp_max'] temp_fahrenheit = (temp_kelvin - 273.15) * 9 / 5 + 32 temp_min_fahrenheit = (temp_min_kelvin - 273.15) * 9 / 5 + 32 temp_max_fahrenheit = (temp_max_kelvin - 273.15) * 9 / 5 + 32 humidity = json['main']['humidity'] pressure = json['main']['pressure' * 0.0295301] condition = json_data['weather'][0]['main'] #max_press = int(json_data['main']['pressure_max']) #min_press = int(json_data['main']['pressure_min']) final = (name, city, state, age, weight, diagnosed, temp_fahrenheit, temp_min_fahrenheit, temp_max_fahrenheit, humidity, pressure, condition) return final print(get_weather(city, state, api_key)) RE: Getting "name 'get_weather' is not defined error and no json_data returned? - ibreeden - Sep-13-2021 It is not clear to me what you are asking. You are getting an error message? Then please show the complete error stack trace (in error tags).You import requests . But does "requests" have a method "get_weather"?(Because in line 34 you call requests.get_weather() .)
RE: Getting "name 'get_weather' is not defined error and no json_data returned? - snippsat - Sep-13-2021 I showed you a working function in your last Thread Now you mess it up with serval errors one mention bye ibreeden and call json should be json_data .All the globals values should not just get be used in function if there not are in function parameter. As mention in last post do small teste as your function now it's not working at all, then you stop and fix function before adding ConfigParser and GUI. To show a example with ConfigParser using my code from last Thread. As api_key is personal to you should not need to type in every time,have in api_key in the .ini file.key.ini: [key] api_key = xxxxxxxxxxxxx import requests from configparser import ConfigParser def get_weather(city, api_key): api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}" json_data = requests.get(api).json() return json_data def get_api_key(): config = ConfigParser() config.read('key.ini') api_key = config['key']['api_key'] return api_key if __name__ == '__main__': city = 'Winnsboro,Louisiana' weather = get_weather(city, get_api_key()) print(weather['name']) print(weather['main']['temp']) print(weather[ 'weather'][0]['description'])
RE: Getting "name 'get_weather' is not defined error and no json_data returned? - trthskr4 - Sep-13-2021 Sorry, replied to wrong reply. RE: Getting "name 'get_weather' is not defined error and no json_data returned? - trthskr4 - Sep-13-2021 (Sep-13-2021, 12:44 PM)snippsat Wrote: I showed you a working function in your last Thread I can copy/paste your code into my VS code as a new file and use the identical config.ini and get errors. I don't know if I don't have something set up correctly in VS code or what. The only difference is that I want to input the city and state in because I travel and need to change locations. In the error at the bottom it shows Python 37, I only have 3.9. installed. import requests from configparser import ConfigParser city = input("City where you are?: ") state = input("State where you are? ") ##Weather API json and data def get_weather(city, api_key): api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}" json_data = requests.get(api).json() return json_data def get_api_key(): config = ConfigParser() config.read('key.ini') api_key = config['key']['api_key'] return api_key if __name__ == '__main__': city = 'Winnsboro, Texas' weather = get_weather(city, get_api_key()) print(weather['name']) print(weather['main']['temp']) print(weather[ 'weather'][0]['description'])I get this error now. City where you are?: Winnsboro State where you are? Texas Traceback (most recent call last): File "c:/Users/xxxxxxxxxxxxx.py", line 22, in <module> weather = get_weather(city, get_api_key()) File "c:/Users/xxxxxxxxxxxxxx.py", line 17, in get_api_key api_key = config['key']['api_key'] File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\configparser.py", line 958, in __getitem__ raise KeyError(key) KeyError: 'key' RE: Getting "name 'get_weather' is not defined error and no json_data returned? - snippsat - Sep-13-2021 (Sep-13-2021, 03:01 PM)trthskr4 Wrote: In the error at the bottom it shows Python 37, I only have 3.9. installed.Click down in left corner then Python: Select Interpreter will show up an choice Python 3.9 Now it use version the come with Microsoft Visual Studio stand alone,and not the same as Vs Code. Some setup tips here VS Code from start You most have key.ini in same folder as you run script,or give path where it is.Add input last not before the function,so like this. import requests from configparser import ConfigParser def get_weather(city, api_key): api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}" json_data = requests.get(api).json() return json_data def get_api_key(): config = ConfigParser() config.read('key.ini') api_key = config['key']['api_key'] return api_key if __name__ == '__main__': city = input("City where you are?: ") state = input("State where you are? ") city = f'{city},{state}' weather = get_weather(city, get_api_key()) print(weather['name']) print(weather['main']['temp']) print(weather[ 'weather'][0]['description'])Test. # Version G:\div_code\answer\weather λ python -V Python 3.9.5 # Files in folder G:\div_code\answer\weather λ ls key.ini open_weather.py # Run G:\div_code\answer\weather λ python open_weather.py City where you are?: Houston State where you are? Texas Houston 296.82 mist RE: Getting "name 'get_weather' is not defined error and no json_data returned? - trthskr4 - Sep-14-2021 I finally got this to work beautifully. I uninstalled Python 3.9.7 and installed 3.9.6 and set it back up and voila. Thanks for all your help. |