Micolog上的短信天气预报插件

六月 9th, 2010 发表评论 阅读评论

这两天一直下雨,由于脑袋越来越不灵光了,每次都出门忘了带雨伞。杯具了几次之后,决定弄个手机提醒天气预报的东东,每次出门前都可以提醒我一下今天和今后几天的天气。

首先,看看中国移动有没有这样的业务。结果发现有,不过是收费的。偶很穷,只好放弃,自己想办法。

接着,想到了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邮箱,更不敢开启邮件提醒服务。万一哪天移动耍流氓,天天给我发广告骚扰我咋办。哈哈。

分类: Micolog 标签: Micolog  Google  GAE  天气预报  插件  Fetion  移动 

  1. 2010-09-06 at 21:13 回复 引用
    哈哈,这个有用的。。。3q,我搭一下,看看效果。。。
  2. donglongchao
    2010-09-06 at 21:16 回复 引用
    @桑
    不客气。:-)
Powered by Google App Engine