2
#!/usr/bin/env python

import subprocess
import urllib
from xml.dom import minidom

CITY_ID = '23396898'
TEMP_TYPE = 'c'

WEATHER_URL = 'http://xml.weather.yahoo.com/forecastrss?w=' + CITY_ID +' &u=' + TEMP_TYPE
WEATHER_NS = 'http://xml.weather.yahoo.com/ns/rss/1.0'

dom = minidom.parse(urllib.urlopen(WEATHER_URL))
ycondition = dom.getElementsByTagNameNS(WEATHER_NS, 'condition')[0]
CURRENT_OUTDOOR_TEMP = ycondition.getAttribute('temp')
print(CURRENT_OUTDOOR_TEMP)

当我在运行 python 2.7.1 但不在运行 2.6.1 的机器上运行它时,这工作正常。问题是实际数字是错误的。我已经验证我正确地提取了元素并且可以毫无问题地获得其他数值。但是我在 2.7.1 上运行它并获得 12 作为当前摄氏度温度,但在 2.6.1 中运行它并获得 54。

让我更加困惑的是,它在两种环境中都可以正常使用华氏温度。如果您将 f 设置为 TEMP_TYPE,它将正常工作。我已经确认它发生在多台机器上。但是它们是相同的部署,因此问题可能不是 2.6.1。谁能给我任何想法,为什么我会遇到这个问题?

在两种情况下都在 Mac OS X 上运行。

编辑:问题是 urllib.urlopen() 在 2.6 中无法正常工作,不知道为什么。

编辑:

我也用 elementtree 运行它,结果相同。看起来它可能是特定于这个环境的东西,但为什么它将它转换回华氏温度。奇怪的。

import urllib
from xml.etree.ElementTree import parse

CITY_ID = '23396898'
TEMP_TYPE = 'c'

WEATHER_URL = 'http://xml.weather.yahoo.com/forecastrss?w=' + CITY_ID +' &u=' + TEMP_TYPE
WEATHER_NS = 'http://xml.weather.yahoo.com/ns/rss/1.0'

rss = parse(urllib.urlopen(WEATHER_URL)).getroot()
ycondition = rss.find('channel/item/{%s}condition' % WEATHER_NS)
print ycondition.get('temp')

如果你直接去网址,你可以直接看到信息。

http://xml.weather.yahoo.com/forecastrss?w=2496543&u=f http://xml.weather.yahoo.com/forecastrss?w=2496543&u=c

4

1 回答 1

0

好的,感谢您的帮助。我在网址中有一个空格,这导致了问题。

WEATHER_URL = 'http://xml.weather.yahoo.com/forecastrss?w=' + CITY_ID +' &u=' + TEMP_TYPE

应该

WEATHER_URL = 'http://xml.weather.yahoo.com/forecastrss?w=' + CITY_ID +'&u=' + TEMP_TYPE

感谢@ronak 的帮助,你让我朝着正确的方向前进

于 2013-04-18T01:07:44.257 回答