Python从wunderground json api获得单日天气预报

时间:2013-09-25 15:34:41

标签: python json python-2.7 wunderground

这个问题涉及使用python的json module

从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
            }
         ]
      }
   }
}

我想要返回的是来自json响应的'title'块的特定'fcttxt'的{​​{1}}和'period'(an integer 0-7)我可以使用以下for循环和打印所有条目(对于'期间'0-7)

[forecast][txt_forecast][forecastday]

返回:

#!/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. (键)来指定返回哪一个预测。

1 个答案:

答案 0 :(得分:1)

尝试此循环,假设您所需的期间为3

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