2013-09-25 178 views
0

這個問題涉及使用Python的json modulePython來從wunderground JSON API獲得一天的天氣預報

我的JSON請求返回從JSON文件返回一個單件的數據:

{ 
    "response":{ 
     "version":"0.1", 
     "termsofService":"http://www.wunderground.com/weather/api/d/terms.html", 
     "features":{ 
     "forecast":1 
     } 
    }, 
    "forecast":{ 
     "txt_forecast":{ 
     "date":"1:00 AM BST", 
     "forecastday":[ 
      { 
       "period":0, 
       "icon":"partlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/partlycloudy.gif", 
       "title":"Monday", 
       "fcttext":"Mostly cloudy. High of 75F. Winds less than 5 mph.", 
       "fcttext_metric":"Mostly cloudy. High of 24C. Winds less than 5 km/h.", 
       "pop":"0" 
      }, 
      { 
       "period":1, 
       "icon":"clear", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/clear.gif", 
       "title":"Monday Night", 
       "fcttext":"Clear. Low of 54F. Winds less than 5 mph.", 
       "fcttext_metric":"Clear. Low of 12C. Winds less than 5 km/h.", 
       "pop":"0" 
      }, 
      { 
       "period":2, 
       "icon":"partlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/partlycloudy.gif", 
       "title":"Tuesday", 
       "fcttext":"Clear. High of 70F. Winds less than 5 mph.", 
       "fcttext_metric":"Clear. High of 21C. Winds less than 5 km/h.", 
       "pop":"0" 
      }, 
      { 
       "period":3, 
       "icon":"mostlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/mostlycloudy.gif", 
       "title":"Tuesday Night", 
       "fcttext":"Mostly cloudy. Low of 52F. Winds less than 5 mph.", 
       "fcttext_metric":"Mostly cloudy. Low of 11C. Winds less than 5 km/h.", 
       "pop":"0" 
      }, 
      { 
       "period":4, 
       "icon":"mostlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/mostlycloudy.gif", 
       "title":"Wednesday", 
       "fcttext":"Overcast. High of 68F. Winds less than 5 mph.", 
       "fcttext_metric":"Overcast. High of 20C. Winds less than 5 km/h.", 
       "pop":"0" 
      }, 
      { 
       "period":5, 
       "icon":"chancerain", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/chancerain.gif", 
       "title":"Wednesday Night", 
       "fcttext":"Mostly cloudy in the evening, then overcast with a chance of rain. Low of 55F. Winds less than 5 mph. Chance of rain 30%.", 
       "fcttext_metric":"Mostly cloudy in the evening, then overcast with a chance of rain. Low of 13C. Winds less than 5 km/h. Chance of rain 30%.", 
       "pop":"30" 
      }, 
      { 
       "period":6, 
       "icon":"mostlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/mostlycloudy.gif", 
       "title":"Thursday", 
       "fcttext":"Overcast in the morning, then mostly cloudy. High of 66F. Winds from the East at 5 to 10 mph shifting to the North in the afternoon.", 
       "fcttext_metric":"Overcast in the morning, then mostly cloudy. High of 19C. Winds from the East at 10 to 15 km/h shifting to the North in the afternoon.", 
       "pop":"0" 
      }, 
      { 
       "period":7, 
       "icon":"mostlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/mostlycloudy.gif", 
       "title":"Thursday Night", 
       "fcttext":"Overcast. Low of 54F. Winds from the East at 5 to 10 mph.", 
       "fcttext_metric":"Overcast. Low of 12C. Winds from the East at 5 to 15 km/h.", 
       "pop":"0" 
      } 
     ] 
     }, 
     "simpleforecast":{ 
     "forecastday":[ 
      { 
       "date":{ 
        "epoch":"1379970000", 
        "pretty":"10:00 PM BST on September 23, 2013", 
        "day":23, 
        "month":9, 
        "year":2013, 
        "yday":265, 
        "hour":22, 
        "min":"00", 
        "sec":0, 
        "isdst":"1", 
        "monthname":"September", 
        "weekday_short":"Mon", 
        "weekday":"Monday", 
        "ampm":"PM", 
        "tz_short":"BST", 
        "tz_long":"Europe/London" 
       }, 
       "period":1, 
       "high":{ 
        "fahrenheit":"75", 
        "celsius":"24" 
       }, 
       "low":{ 
        "fahrenheit":"54", 
        "celsius":"12" 
       }, 
       "conditions":"Partly Cloudy", 
       "icon":"partlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/partlycloudy.gif", 
       "skyicon":"partlycloudy", 
       "pop":0, 
       "qpf_allday":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "qpf_day":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "qpf_night":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "snow_allday":{ 
        "in":0, 
        "cm":0 
       }, 
       "snow_day":{ 
        "in":0, 
        "cm":0 
       }, 
       "snow_night":{ 
        "in":0, 
        "cm":0 
       }, 
       "maxwind":{ 
        "mph":6, 
        "kph":10, 
        "dir":"SE", 
        "degrees":136 
       }, 
       "avewind":{ 
        "mph":4, 
        "kph":6, 
        "dir":"SE", 
        "degrees":144 
       }, 
       "avehumidity":81, 
       "maxhumidity":85, 
       "minhumidity":65 
      }, 
      { 
       "date":{ 
        "epoch":"1380056400", 
        "pretty":"10:00 PM BST on September 24, 2013", 
        "day":24, 
        "month":9, 
        "year":2013, 
        "yday":266, 
        "hour":22, 
        "min":"00", 
        "sec":0, 
        "isdst":"1", 
        "monthname":"September", 
        "weekday_short":"Tue", 
        "weekday":"Tuesday", 
        "ampm":"PM", 
        "tz_short":"BST", 
        "tz_long":"Europe/London" 
       }, 
       "period":2, 
       "high":{ 
        "fahrenheit":"70", 
        "celsius":"21" 
       }, 
       "low":{ 
        "fahrenheit":"52", 
        "celsius":"11" 
       }, 
       "conditions":"Partly Cloudy", 
       "icon":"partlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/partlycloudy.gif", 
       "skyicon":"mostlysunny", 
       "pop":0, 
       "qpf_allday":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "qpf_day":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "qpf_night":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "snow_allday":{ 
        "in":0, 
        "cm":0 
       }, 
       "snow_day":{ 
        "in":0, 
        "cm":0 
       }, 
       "snow_night":{ 
        "in":0, 
        "cm":0 
       }, 
       "maxwind":{ 
        "mph":5, 
        "kph":8, 
        "dir":"SE", 
        "degrees":127 
       }, 
       "avewind":{ 
        "mph":4, 
        "kph":6, 
        "dir":"SE", 
        "degrees":139 
       }, 
       "avehumidity":79, 
       "maxhumidity":92, 
       "minhumidity":70 
      }, 
      { 
       "date":{ 
        "epoch":"1380142800", 
        "pretty":"10:00 PM BST on September 25, 2013", 
        "day":25, 
        "month":9, 
        "year":2013, 
        "yday":267, 
        "hour":22, 
        "min":"00", 
        "sec":0, 
        "isdst":"1", 
        "monthname":"September", 
        "weekday_short":"Wed", 
        "weekday":"Wednesday", 
        "ampm":"PM", 
        "tz_short":"BST", 
        "tz_long":"Europe/London" 
       }, 
       "period":3, 
       "high":{ 
        "fahrenheit":"68", 
        "celsius":"20" 
       }, 
       "low":{ 
        "fahrenheit":"55", 
        "celsius":"13" 
       }, 
       "conditions":"Mostly Cloudy", 
       "icon":"mostlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/mostlycloudy.gif", 
       "skyicon":"mostlycloudy", 
       "pop":0, 
       "qpf_allday":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "qpf_day":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "qpf_night":{ 
        "in":0.06, 
        "mm":1.5 
       }, 
       "snow_allday":{ 
        "in":0, 
        "cm":0 
       }, 
       "snow_day":{ 
        "in":0, 
        "cm":0 
       }, 
       "snow_night":{ 
        "in":0, 
        "cm":0 
       }, 
       "maxwind":{ 
        "mph":3, 
        "kph":5, 
        "dir":"NNE", 
        "degrees":14 
       }, 
       "avewind":{ 
        "mph":2, 
        "kph":3, 
        "dir":"East", 
        "degrees":98 
       }, 
       "avehumidity":73, 
       "maxhumidity":95, 
       "minhumidity":65 
      }, 
      { 
       "date":{ 
        "epoch":"1380229200", 
        "pretty":"10:00 PM BST on September 26, 2013", 
        "day":26, 
        "month":9, 
        "year":2013, 
        "yday":268, 
        "hour":22, 
        "min":"00", 
        "sec":0, 
        "isdst":"1", 
        "monthname":"September", 
        "weekday_short":"Thu", 
        "weekday":"Thursday", 
        "ampm":"PM", 
        "tz_short":"BST", 
        "tz_long":"Europe/London" 
       }, 
       "period":4, 
       "high":{ 
        "fahrenheit":"66", 
        "celsius":"19" 
       }, 
       "low":{ 
        "fahrenheit":"54", 
        "celsius":"12" 
       }, 
       "conditions":"Mostly Cloudy", 
       "icon":"mostlycloudy", 
       "icon_url":"http://icons-ak.wxug.com/i/c/k/mostlycloudy.gif", 
       "skyicon":"mostlycloudy", 
       "pop":0, 
       "qpf_allday":{ 
        "in":0.06, 
        "mm":1.5 
       }, 
       "qpf_day":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "qpf_night":{ 
        "in":0.00, 
        "mm":0.0 
       }, 
       "snow_allday":{ 
        "in":0, 
        "cm":0 
       }, 
       "snow_day":{ 
        "in":0, 
        "cm":0 
       }, 
       "snow_night":{ 
        "in":0, 
        "cm":0 
       }, 
       "maxwind":{ 
        "mph":7, 
        "kph":11, 
        "dir":"East", 
        "degrees":87 
       }, 
       "avewind":{ 
        "mph":6, 
        "kph":10, 
        "dir":"ESE", 
        "degrees":109 
       }, 
       "avehumidity":81, 
       "maxhumidity":91, 
       "minhumidity":76 
      } 
     ] 
     } 
    } 
} 

我想什麼返回的是'title''fcttxt'對於具體'period'(an integer 0-7) from [forecast][txt_forecast][forecastday]塊的json響應我可以使用下面的for循環並打印所有條目('期間'0-7)

#!/usr/bin/python 

import os, sys, datetime, commands 
import urllib2 
import json 

myweather = json.load(urllib2.urlopen("http://api.wunderground.com/api/API_KEY/forecast/q/27.711,17.994.json")) 
myweather_sum = myweather['forecast']['txt_forecast']['forecastday'] 

for period in myweather_sum: 
    myforday = period['title'] 
    myfctxt = period['fcttext_metric'] 
    print myforday 
    print myfctxt 
    print "-----------------------------" 

返回:

Wednesday 
Overcast with a chance of rain. High of 19C. Winds from the North at 5 to 20 km/h. Chance of rain 50%. 
----------------------------- 
Wednesday Night 
Overcast with a chance of rain in the evening, then mostly cloudy. Low of 9C. Breezy. Winds from the North at 10 to 20 km/h. 
----------------------------- 
Thursday 
Overcast with a chance of rain. High of 16C. Breezy. Winds from the East at 10 to 20 km/h. Chance of rain 50%. 
----------------------------- 
Thursday Night 
Overcast in the evening, then mostly cloudy. Low of 9C. Winds from the SE at 10 to 15 km/h. 
----------------------------- 
Friday 
Overcast in the morning, then clear. High of 19C. Winds from the SSE at 5 to 15 km/h. 
----------------------------- 
Friday Night 
Overcast in the evening, then partly cloudy. Fog overnight. Low of 7C. Winds from the South at 10 to 15 km/h. 
----------------------------- 
Saturday 
Partly cloudy. High of 17C. Breezy. Winds from the SSE at 10 to 20 km/h. 
----------------------------- 
Saturday Night 
Overcast. Fog overnight. Low of 8C. Winds from the SE at 10 to 15 km/h. 

我想用'period'(鍵)來指定返回的預測之一。

回答

1

試試這個循環裏,假設您需要的時間爲3

#UNTESTED 
for period in myweather_sum: 
    if period['period'] == 3: 
     myforday = period['title'] 
     myfctxt = period['fcttext_metric'] 
     print myforday 
     print myfctxt 
+0

是的,就是這樣,知道這將是簡單的! – user2815865