#!/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')

如果您直接转到url,则可以直接查看信息。

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

===============>>#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的帮助,您将我带入了正确的方向

  ask by ScottEdge translate from so

未解决问题?本站智能推荐: