python yahoo weather xml parse适用于2.7.1但不适用于2.6.1

时间:2013-04-17 21:51:00

标签: python

#!/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.

让我更加困惑的是,它在两种环境中都适用于华氏温度。如果你把TEM放到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

1 个答案:

答案 0 :(得分: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的帮助,你带领我走向了正确的方向