4

I am trying retrieve weather forecasting from DarkSky using their API with the code below. I am interested only in the part of hourly forecasting data:

url="https://api.darksky.net/forecast/api_key/33.972386,-84.231986"
response = requests.get(url)
data = response.json()
data

Here is the part of JSON data I get from data pull:

{'latitude': 33.972386,
 'longitude': -84.231986,
 'timezone': 'America/New_York',
 'currently': {'time': 1553052005,
  'summary': 'Clear',
  'icon': 'clear-night',
  'nearestStormDistance': 23,
  'nearestStormBearing': 169,
  'precipIntensity': 0,
  'precipProbability': 0,
  'temperature': 43.69,
  'apparentTemperature': 43.69,
  'dewPoint': 25.61,
  'humidity': 0.49,
  'pressure': 1026.37,
  'windSpeed': 1.42,
  'windGust': 4.94,
  'windBearing': 79,
  'cloudCover': 0,
  'uvIndex': 0,
  'visibility': 3.86,
  'ozone': 309.99},
 'minutely': {'summary': 'Clear for the hour.',
  'icon': 'clear-night',
  'data': [{'time': 1553052000, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052060, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052120, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052180, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052240, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052300, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052360, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052420, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052480, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052540, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052600, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052660, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052720, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052780, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052840, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052900, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052960, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053020, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053080, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053140, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053200, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053260, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053320, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053380, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053440, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053500, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053560, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053620, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053680, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053740, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053800, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053860, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053920, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053980, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054040, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054100, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054160, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054220, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054280, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054340, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054400, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054460, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054520, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054580, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054640, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054700, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054760, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054820, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054880, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054940, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055000, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055060, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055120, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055180, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055240, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055300, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055360, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055420, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055480, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055540, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055600, 'precipIntensity': 0, 'precipProbability': 0}]},
 'hourly': {'summary': 'Clear throughout the day.',
  'icon': 'clear-day',
  'data': [{'time': 1553050800,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 44.13,
    'apparentTemperature': 44.13,
    'dewPoint': 25.62,
    'humidity': 0.48,
    'pressure': 1026.33,
    'windSpeed': 1.24,
    'windGust': 4.78,
    'windBearing': 93,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 3.49,
    'ozone': 310.66},
   {'time': 1553054400,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 42.82,
    'apparentTemperature': 42.82,
    'dewPoint': 25.57,
    'humidity': 0.5,
    'pressure': 1026.44,
    'windSpeed': 1.95,
    'windGust': 5.25,
    'windBearing': 60,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 4.6,
    'ozone': 308.68},
   {'time': 1553058000,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 42.45,
    'apparentTemperature': 40.02,
    'dewPoint': 25.52,
    'humidity': 0.51,
    'pressure': 1026.39,
    'windSpeed': 4.15,
    'windGust': 8.98,
    'windBearing': 61,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 10,
    'ozone': 307.84},
   {'time': 1553061600,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 41.97,
    'apparentTemperature': 38.42,
    'dewPoint': 25.8,
    'humidity': 0.52,
    'pressure': 1025.98,
    'windSpeed': 5.52,
    'windGust': 11.44,
    'windBearing': 63,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 10,
    'ozone': 307.21},
   {'time': 1553065200,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 40.7,
    'apparentTemperature': 36.97,
    'dewPoint': 25.86,
    'humidity': 0.55,
    'pressure': 1025.88,
    'windSpeed': 5.44,
    'windGust': 10.93,
    'windBearing': 61,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 10,
    'ozone': 306.76},

Now this is bit complex json file and I have tried using json_normalize on hourly part of json file:

json_normalize(data['hourly'])

but im getting the the response like this:

        data    icon    summary
0   [{'time': 1553050800, 'summary': 'Clear', 'ico...   clear-day   Clear 
    throughout the day.

Any idea how do I access the temperature and pressure on hourly data part? So i need to get time, temperature, pressure and humidity for every hour available. Thank you

2 Answers 2

2

You should be able to access the first element in the hourly data by

data['hourly']['data'][0]['humidity']

So if you iterate over data['hourly']['data'] you should be able to get the data you want.

E.g.

for data_point in data['hourly']['data']:
    print data_point['humidity']
Sign up to request clarification or add additional context in comments.

Comments

1

You can transform the data so it contains only the values you are interested in:

Code:

import requests
import json

url = 'https://api.darksky.net/forecast/api_key/33.972386,-84.231986'
response = requests.get(url)
data = response.json()
fields = ['time', 'temperature', 'pressure', 'humidity']
transformed = [
    {
        field: rec.get(field)
        for field
        in fields
    }
    for rec
    in data['hourly']['data']
]

print(json.dumps(transformed, indent=4))

Output:

[
    {
        "time": 1553050800,
        "temperature": 44.13,
        "pressure": 1026.33,
        "humidity": 0.48
    },
    {
        "time": 1553054400,
        "temperature": 42.82,
        "pressure": 1026.44,
        "humidity": 0.5
    },
    {
        "time": 1553058000,
        "temperature": 42.45,
        "pressure": 1026.39,
        "humidity": 0.51
    },
    {
        "time": 1553061600,
        "temperature": 41.97,
        "pressure": 1025.98,
        "humidity": 0.52
    },
    {
        "time": 1553065200,
        "temperature": 40.7,
        "pressure": 1025.88,
        "humidity": 0.55
    }
]

1 Comment

Thank you for your responses this was really what I was looking for. It worked.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.