#!/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 を取得します。
さらに混乱しているのは、両方の環境で華氏で問題なく動作することです。TEMP_TYPE に f を指定すると、正常に動作します。複数のマシンで発生することを確認しました。ただし、それらは同一の展開であるため、問題は 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