Micolog上的短信天气预报插件
这两天一直下雨,由于脑袋越来越不灵光了,每次都出门忘了带雨伞。杯具了几次之后,决定弄个手机提醒天气预报的东东,每次出门前都可以提醒我一下今天和今后几天的天气。
首先,看看中国移动有没有这样的业务。结果发现有,不过是收费的。偶很穷,只好放弃,自己想办法。
接着,想到了GAE的应用可以建立cron任务,应该可以。不过一个帐号只能建立最多十个应用,我不想为了这么一点小小的东西就浪费一个名额。于是决定在我的博客上弄一个插件来完成。
然后,搜索了一下,发现已经有人开发好了这个插件,用的是雅虎的天气咨询,然后登录飞信来发送。我也不想重造轮子,就下载安装上了。
没想到杯具了,老是有DownloadError的异常抛出。看了一下源代码,可能是来自urllib的urlopen函数。
不解,后来读了一下文档,知道了。原来Google为了安全方面的考虑,在GAE上禁用了socket,只能用他自己的urlfetch库。
接着,修改了一下源代码,还是有问题。不过这次是登录飞信的函数中抛出的异常。
我以为是自己的程序有问题,就在本地登录了一下飞信。结果很正常,没有问题。
只是如果从GAE上来登录,就会有错误,应该是超时错误。
接着读文档,发现fetch函数的默认超时是5秒,我猜是不是这个原因。
修改一下代码,将deadline设置为10秒这个最大值,结果还是不行。
接着上网搜索,果然找到了原因。原来不是我的程序的原因,是飞信服务器的问题。
估计是因为在GAE上使用飞信的人太多了,中国移动已经将GAE的ip封了。因为所有的GAE应用都是使用一个ip来访问飞信的服务器,封掉很容易。
看来直接连接到飞信已经不行了,只好借助第三方的api接口来间接使用飞信的功能了。
找到两个比较好的API接口,在线试了一下。结果觉得这个http://sms.api.bz/比较好,就选择这个了。
修改好代码后,又解决了几个编码解码的小问题。
上线后测试,还是有问题。不解。
将msg换成几个字符,而不是天气信息的时候,竟然可以用。一旦换成天气信息就不行了。
测试了一下,天气信息是可以正常得到的,显示也没有问题。
经过一番折磨,发现问题。原来在生成天气信息的时候,为了格式好看一些,加了几个空格。
汗。
网址中有空格,这么低级的错误我都犯。
去掉空格后,一切正常。
只不过雅虎的这个信息太少了,还不齐全。我就换成了Google的天气预报,结果还好。
设置好cron.yaml后,果然定时发送过来了。只不过这个第三方的接口不太稳定,而且热门时间也有比较大的延迟。
不过能用就不错了。
其实我们也可以到sina等网站上抓取天气预报的页面来分析提取信息,不过有点麻烦。Google返回的是xml文件,相对来说解析比较容易,不需要自己写正则表达式了。
当然,前者的预报更加准确详细,后者的还是相对粗糙。鱼与熊掌不可得兼啊。
还有一个方法也可以做到这个效果,不使用通过飞信等。这个地址http://weatherlib.appspot.com/可以向你的手机邮箱发送天气信息,同时你要开启邮件提醒服务。这样,天气信息就会发送到你手机上了。
不过偶不使用139邮箱,更不敢开启邮件提醒服务。万一哪天移动耍流氓,天天给我发广告骚扰我咋办。哈哈。
不客气。:-)