#!/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
答案 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的帮助,你带领我走向了正确的方向