Weather Underground API用于获取Python中的历史数据

时间:2013-08-26 18:56:40

标签: python json api wunderground

我正在尝试从Weather Underground API中提取历史数据。我改编了他们的Python示例代码(见下文)。当我运行这个时,我得到一个异常“TypeError:list indices必须是整数,而不是str”JSON流包含一堆带有每日摘要信息的字段(Dailysummary),但我无法得到它们在这里的任何值列表。

我将URL放入JSON查看器中查看结构,但无法弄清楚我做错了什么。任何帮助将不胜感激。

import urllib2
import json
f = urllib2.urlopen('http://api.wunderground.com/api/d08c4738fb303c66/geolookup/conditions/q/CA/San_Francisco.json')

json_string = f.read()
parsed_json = json.loads(json_string)
location = parsed_json['location']['city']
temp_f = parsed_json['current_observation']['temp_f']
print "Current temperature in %s is: %s" % (location, temp_f)
f.close()

h = urllib2.urlopen('http://api.wunderground.com/api/d08c4738fb303c66/history_19760508/q/CA/San_Francisco.json')
json_string = h.read()
parsed_json = json.loads(json_string)
date = parsed_json['history']['utcdate']['pretty']
print date

print type(parsed_json['history'])

snow = parsed_json['history']['dailysummary']['0']
print snow
h.close()

3 个答案:

答案 0 :(得分:2)

它在错误中说明了您的问题:您无法使用字符串索引列表:

>>> [1]['0']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>> [1][0]
1
>>>

但是你在这里做到了:

snow = parsed_json['history']['dailysummary']['0']

要修复问题,请使索引整数:

snow = parsed_json['history']['dailysummary'][0]

答案 1 :(得分:1)

我有类似的问题。由于它是长度为1的列表,因此您可以通过索引0访问列表项。现在,如果检查索引0中值项的类型,则它是字典。

type(parsed_json['history']['dailysummary'][0])
<type 'dict'>

现在,您知道它是字典,您可以使用键来访问值。在你的情况下。

print parsed_json['history']['dailysummary'][0]['snow']

这可以为您提供所需的价值。

如果有帮助,请告诉我。

答案 2 :(得分:0)

访问parsed_json dict中的内容的方法是使用密钥。您可以使用print parsed_json['history']['dailysummary'].keys()

找到您感兴趣的密钥

如果你这样做,你会看到其中一个键是u'snow',这是一个unicode字符串。

您可以使用该字符串访问您正在查找的数据,而不是:

parsed_json['history']['dailysummary']['0']

你需要的是:

parsed_json['history']['dailysummary']['snow']