哭了,面对毕设想了很久也没想出来摘要如何写,索性先放下来码码博客放松心情。刚点进来的时候看到Wordpress面板提示News CPT,我还以为它这么智能会根据每个博主的信息定制得提供通知,哪知我点进去之后发现原来是有个wordperss的插件,可以为博客添加一个News的模块,我就想不通了,好好的你叫什么CPT啊,新闻模块关CPT什么事情啊,这是爹的名字啊!!!当然这个教训很深刻,如果哪天你不足够牛逼,连你的名字都不会是你的,别人说起CPT,很自然就会想起另外一个人,你是谁?没人鸟你…

因此,可以什么都不为,为了自己的名字,也要努力那么一点点!是不是!CPT先生!!!

好~今天回到Moonya上来,昨晚跑了一天都没有出现BUG,事实证明这东西还是可以工作的,我设置了一些好友定时给发天气预报的消息,结果一个都没发出去。明明之前已经测试过了的,后来发现是因为我写的备注名全是中文,python在处理的时候以utf8编码,但是从腾讯服务器传过来的好友信息全是unicode,所以直接就悲剧了。以后要注意统一编码的问题了,下面介绍如何利用python获得实时的天气信息。

对于一门成熟的语言Python而言,这种典型的功能肯定有人做成了相应的库供人使用,但是我们要本着能自己来就自己来的态度,因为引进一个库对于系统的兼容性来说不是好事。我们要考虑几个问题,天气数据从哪里来?我们关心哪些数据?以及怎么根据天气数据产生特色的问候?

Yahoo天气预报
首先我们可以明确,凡是能从网上获得信息,我们通过Python都可以拿到,最差最差就模拟用户和浏览器行为呗。所以我扫了一遍各种天气预报的网站,发现都很渣,反正不好看而且信息混乱,直至后来看到Yahoo提供了相关API:即通过相应的Http Reqeust返回特定地区的天气信息。直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#coding:utf-8
import urllib, sys
reload(sys)
sys.setdefaultencoding('utf-8')

from xml.dom import minidom

# 这是Yahoo提供的天气预报的URL,其中w表示地区,u表示是摄氏度还是华氏度
WEATHER_URL = 'http://xml.weather.yahoo.com/forecastrss?w=%d&u=c'

# 这是根据Yahoo提供的weather code和对应天气情况的映射表,这只是一小部分
WEATHER_MAP = {
'21':'阴霾漫天',
'23':'有大风',
'25':'很冷',
'26':'有很多云',
'34':'晴朗的很',
'35':'下雨还夹雪',
'36':'很热'
}

# Yahoo的提供的信息很多,连日出日落时间都有...
# 但是对于我来说,我只关心温度,和天气是晴朗还是下雨仅此而已...
def weather_for_zip(zip_code):
url = WEATHER_URL % zip_code
dom = minidom.parse(urllib.urlopen(url))
node = (dom.getElementsByTagName('yweather:forecast'))[0]

return {
'low': node.getAttribute('low'),
'high': node.getAttribute('high'),
'code': node.getAttribute('code')
}

# Moonya会调用这个函数,传进来的是一个地区参数
def tell_weather(code):
w = weather_for_zip(code)
weather = ''
if w['code'] not in WEATHER_MAP:
weather = '巴拉巴拉'
else:
weather = WEATHER_MAP[w['code']]
return '今天好像目测会%s,最高气温有%s,最低到%s。好吧,我还不够智能><,鬼知道你该多穿衣服还是少出门...不过天气预报是准的~' \
% (weather, w['high'], w['low'])

if __name__ == '__main__':
# 127112251这是北京的Code,其他的需要上Yahoo一个一个搜,好像没有提供专门的映射表
print weather_for_zip(12712251)
print tell_weather(12712251)

其实通过上面的注释,基本上回答了此前的三个问题,中午和同学说起这事,我们想小黄鸡的AI是不是开源的,如果是开源的直接拿来用就可以少了很多活了~好了,这篇写完了,滚回去写毕设摘要了…