Json class dict store in variables
-
- Posts: 12
- Joined: Sun Sep 03, 2017 1:43 pm
Json class dict store in variables
Hi there,
my name's Marcello from italy and i'm a newbie of python. I try to make a weather station with esp8266 ssd1306 and dht22. My scope is to get value from request json weatherunderground and store in variables. I'm going crazy because i get the data from weather underground (class dict) but i don't know how to store value in variables:
Here is my code:
import urequests
r = urequests.get("http://api.wunderground.com/api/my.api/ ... cisco.json").json() #getting data
print(type(r)) #give me class dict
print (r)
{'response': {'termsofService': 'http://www.wunderground.com/weather/api/d/terms.html', 'features': {'conditions': 1}, 'version': '0.1'}, 'current_observation': {'visibility_mi': '10.0', 'feelslike_string': '83 F (28 C)', 'precip_1hr_metric': ' 0', 'observation_epoch': '1505160367', 'dewpoint_c': 15, 'wind_degrees': 121, 'local_tz_offset': '-0700', 'dewpoint_f': 59, 'wind_string': 'From the ESE at 2.0 MPH Gusting to 6.0 MPH', 'wind_gust_mph': '6.0', 'forecast_url': 'http://www.wunderground.com/US/CA/San_Francisco.html', 'history_url': 'http://www.wunderground.com/weatherstat ... CASANFR131', 'ob_url': 'http://www.wunderground.com/cgi-bin/fin ... 122.408005', 'observation_time': 'Last Updated on September 11, 1:06 PM PDT', 'pressure_trend': '0', 'wind_dir': 'ESE', 'wind_mph': 2.0, 'wind_gust_kph': '9.7', 'precip_today_string': '0.00 in (0 mm)', 'display_location': {'wmo': '99999', 'elevation': '60.0', 'city': 'San Francisco', 'longitude': '-122.41999817', 'magic': '1', 'country_iso3166': 'US', 'state': 'CA', 'zip': '94102', 'latitude': '37.77999878', 'country': 'US', 'state_name': 'California', 'full': 'San Francisco, CA'}, 'heat_index_c': 28, 'local_time_rfc822': 'Mon, 11 Sep 2017 13:06:32 -0700', 'image': {'title': 'Weather Underground', 'url': 'http://icons.wxug.com/graphics/wu2/logo_130x80.png', 'link': 'http://www.wunderground.com'}, 'icon_url': 'http://icons.wxug.com/i/c/k/partlycloudy.gif', 'estimated': {}, 'heat_index_f': 83, 'local_tz_short': 'PDT', 'heat_index_string': '83 F (28 C)', 'pressure_mb': '1012', 'visibility_km': '16.1', 'relative_humidity': '44%', 'precip_1hr_string': '0.00 in ( 0 mm)', 'windchill_f': 'NA', 'solarradiation': '972', 'wind_kph': 3.2, 'temperature_string': '83.0 F (28.3 C)', 'precip_today_metric': '0', 'windchill_c': 'NA', 'local_tz_long': 'America/Los_Angeles', 'station_id': 'KCASANFR131', 'icon': 'partlycloudy', 'observation_time_rfc822': 'Mon, 11 Sep 2017 13:06:07 -0700', 'nowcast': '', 'pressure_in': '29.88', 'UV': '4.7', 'dewpoint_string': '59 F (15 C)', 'local_epoch': '1505160392', 'observation_location': {'country': 'US', 'longitude': '-122.408005', 'state': 'California', 'city': 'SOMA, San Francisco', 'elevation': '23 ft', 'country_iso3166': 'US', 'full': 'SOMA, San Francisco, California', 'latitude': '37.778488'}, 'temp_f': 83.0, 'temp_c': 28.3, 'precip_today_in': '0.00', 'feelslike_c': '28', 'precip_1hr_in': '0.00', 'windchill_string': 'NA', 'feelslike_f': '83', 'weather': 'Partly Cloudy'}}
I don't know how getting determinate value to store in variables.
Thank you for all your support
B.R
Marcello
my name's Marcello from italy and i'm a newbie of python. I try to make a weather station with esp8266 ssd1306 and dht22. My scope is to get value from request json weatherunderground and store in variables. I'm going crazy because i get the data from weather underground (class dict) but i don't know how to store value in variables:
Here is my code:
import urequests
r = urequests.get("http://api.wunderground.com/api/my.api/ ... cisco.json").json() #getting data
print(type(r)) #give me class dict
print (r)
{'response': {'termsofService': 'http://www.wunderground.com/weather/api/d/terms.html', 'features': {'conditions': 1}, 'version': '0.1'}, 'current_observation': {'visibility_mi': '10.0', 'feelslike_string': '83 F (28 C)', 'precip_1hr_metric': ' 0', 'observation_epoch': '1505160367', 'dewpoint_c': 15, 'wind_degrees': 121, 'local_tz_offset': '-0700', 'dewpoint_f': 59, 'wind_string': 'From the ESE at 2.0 MPH Gusting to 6.0 MPH', 'wind_gust_mph': '6.0', 'forecast_url': 'http://www.wunderground.com/US/CA/San_Francisco.html', 'history_url': 'http://www.wunderground.com/weatherstat ... CASANFR131', 'ob_url': 'http://www.wunderground.com/cgi-bin/fin ... 122.408005', 'observation_time': 'Last Updated on September 11, 1:06 PM PDT', 'pressure_trend': '0', 'wind_dir': 'ESE', 'wind_mph': 2.0, 'wind_gust_kph': '9.7', 'precip_today_string': '0.00 in (0 mm)', 'display_location': {'wmo': '99999', 'elevation': '60.0', 'city': 'San Francisco', 'longitude': '-122.41999817', 'magic': '1', 'country_iso3166': 'US', 'state': 'CA', 'zip': '94102', 'latitude': '37.77999878', 'country': 'US', 'state_name': 'California', 'full': 'San Francisco, CA'}, 'heat_index_c': 28, 'local_time_rfc822': 'Mon, 11 Sep 2017 13:06:32 -0700', 'image': {'title': 'Weather Underground', 'url': 'http://icons.wxug.com/graphics/wu2/logo_130x80.png', 'link': 'http://www.wunderground.com'}, 'icon_url': 'http://icons.wxug.com/i/c/k/partlycloudy.gif', 'estimated': {}, 'heat_index_f': 83, 'local_tz_short': 'PDT', 'heat_index_string': '83 F (28 C)', 'pressure_mb': '1012', 'visibility_km': '16.1', 'relative_humidity': '44%', 'precip_1hr_string': '0.00 in ( 0 mm)', 'windchill_f': 'NA', 'solarradiation': '972', 'wind_kph': 3.2, 'temperature_string': '83.0 F (28.3 C)', 'precip_today_metric': '0', 'windchill_c': 'NA', 'local_tz_long': 'America/Los_Angeles', 'station_id': 'KCASANFR131', 'icon': 'partlycloudy', 'observation_time_rfc822': 'Mon, 11 Sep 2017 13:06:07 -0700', 'nowcast': '', 'pressure_in': '29.88', 'UV': '4.7', 'dewpoint_string': '59 F (15 C)', 'local_epoch': '1505160392', 'observation_location': {'country': 'US', 'longitude': '-122.408005', 'state': 'California', 'city': 'SOMA, San Francisco', 'elevation': '23 ft', 'country_iso3166': 'US', 'full': 'SOMA, San Francisco, California', 'latitude': '37.778488'}, 'temp_f': 83.0, 'temp_c': 28.3, 'precip_today_in': '0.00', 'feelslike_c': '28', 'precip_1hr_in': '0.00', 'windchill_string': 'NA', 'feelslike_f': '83', 'weather': 'Partly Cloudy'}}
I don't know how getting determinate value to store in variables.
Thank you for all your support
B.R
Marcello
Re: Json class dict store in variables
Your value is already stored in a variable - r. You did that the way you save values in Python, by writing 'r = ...', which evaluates the '...' and makes the variable r refer to that value (this is called binding, and it's not like assignment in C).
In particular, r is a dictionary, and the representation is a list of key: value pairs in curly braces. You pull individual values by appending a key in square brackets (i.e. - a subscript) to r, so r['response'] or r['current_observations'] are the two values in r, both of which are also dictionaries. So you subscript those as well, and something like r['current_observation'][heat_index_c'] is 28. There are other things you can do to dictionaries, look through the python documentation for a complete list. Or type dir(r) at the repl where r is defined to get a list.
If you want to make a variable refer to a value in a dictionary, you can just do another assignment to that value, using the dictionary name with the field name as a subscript.
If you want to automatically turn all the keys in a dictionary into variables with the same name that refer to the value, you should want something different. The problem is that anything is a valid as a key value, and you may not be able to use it as a variable name, so doing it is liable to generate a syntax error, and if you manage to make the assignment in spite of that a reference to the variable is a syntax error, and beyond that you can only refer to them if you know the field name anyway , so you might as well leave them in the dictionary. So there's no easy way to do this.
In particular, r is a dictionary, and the representation is a list of key: value pairs in curly braces. You pull individual values by appending a key in square brackets (i.e. - a subscript) to r, so r['response'] or r['current_observations'] are the two values in r, both of which are also dictionaries. So you subscript those as well, and something like r['current_observation'][heat_index_c'] is 28. There are other things you can do to dictionaries, look through the python documentation for a complete list. Or type dir(r) at the repl where r is defined to get a list.
If you want to make a variable refer to a value in a dictionary, you can just do another assignment to that value, using the dictionary name with the field name as a subscript.
If you want to automatically turn all the keys in a dictionary into variables with the same name that refer to the value, you should want something different. The problem is that anything is a valid as a key value, and you may not be able to use it as a variable name, so doing it is liable to generate a syntax error, and if you manage to make the assignment in spite of that a reference to the variable is a syntax error, and beyond that you can only refer to them if you know the field name anyway , so you might as well leave them in the dictionary. So there's no easy way to do this.
- pythoncoder
- Posts: 5956
- Joined: Fri Jul 18, 2014 8:01 am
- Location: UK
- Contact:
Re: Json class dict store in variables
You can access individual observations as follows:
And so on...
Code: Select all
temperature = r['current_observation']['temp_c']
weather = r['current_observation']['weather']
wind_gust = r['current_observation']['wind_gust_kph']
Peter Hinch
Index to my micropython libraries.
Index to my micropython libraries.
-
- Posts: 12
- Joined: Sun Sep 03, 2017 1:43 pm
Re: Json class dict store in variables
Thank you so much for all your replies.
Yes, i asked how to store a determinate value from this dict. Tonight i'll try and give you a feedback.
Thank you again.
Yes, i asked how to store a determinate value from this dict. Tonight i'll try and give you a feedback.
Thank you again.
-
- Posts: 12
- Joined: Sun Sep 03, 2017 1:43 pm
Re: Json class dict store in variables
Thank you for all your support. I try and it's worked!!!
-
- Posts: 12
- Joined: Sun Sep 03, 2017 1:43 pm
Re: Json class dict store in variables
Anothe question (if possible). I want to show cloud image on oled if are rainy days or sunny days ecc...
Can i get the image from json and convert in xbm format to show in SSD1306 ?
Sorry but i'm very noob in python.
Thank you so much for all your support.
Marcello
Can i get the image from json and convert in xbm format to show in SSD1306 ?
Sorry but i'm very noob in python.
Thank you so much for all your support.
Marcello
- pythoncoder
- Posts: 5956
- Joined: Fri Jul 18, 2014 8:01 am
- Location: UK
- Contact:
Re: Json class dict store in variables
The official SSD1306 driver doesn't have a method for drawing graphics, so you'd need to subclass SSD1306_SPI or SSD1306_I2C as appropriate and write your own. Depending on your level of experience this task would range from "easy" to "quite difficult".
Peter Hinch
Index to my micropython libraries.
Index to my micropython libraries.
Re: Json class dict store in variables
That's not really true. The official SSD1306 driver uses the framebuf module, which supports drawing graphics. You just need to convert whatever graphics you are getting into a framebuf format. I believe someone already wrote a library for decoding PNG files, so this should be possible.pythoncoder wrote:The official SSD1306 driver doesn't have a method for drawing graphics, so you'd need to subclass SSD1306_SPI or SSD1306_I2C as appropriate and write your own. Depending on your level of experience this task would range from "easy" to "quite difficult".
-
- Posts: 12
- Joined: Sun Sep 03, 2017 1:43 pm
Re: Json class dict store in variables
Thank you for all of you support, i think that is too hard to deploy for my grade of knowledge.
Best regards
Best regards
- pythoncoder
- Posts: 5956
- Joined: Fri Jul 18, 2014 8:01 am
- Location: UK
- Contact:
Re: Json class dict store in variables
Good point. I should have thought of thatdeshipu wrote:...That's not really true. The official SSD1306 driver uses the framebuf module, which supports drawing graphics...
It does raise the question of whether the official driver should have one-line methods to expose the methods of the underlying framebuf (e.g. in this instance a blit() method). Such methods would make the capabilities of the driver more evident.
Peter Hinch
Index to my micropython libraries.
Index to my micropython libraries.