注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

吉大释然

0101 0100 0010 1011

 
 
 

日志

 
 

实时天气监视器  

2013-04-21 19:18:46|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这里的代码的缩进都消失了,而对于python来说缩进又是至关重要的。所以具体的代码请看代码文件

概述

虽然现在有很多的天气类应用,但是都需要后台运行、实时更新。有时候比较耗内存,而且必须联网,造成流量费用。所以想设计一个用飞信定时报告天气变化的程序。它的好处:

  • 完全免费,不用担心流量问题
  • 定时,自由定制,按时报告
  • 安全,飞信模块采用的是模拟登录的方式,安全。
  • 还可作为模块时间提醒只用^_^

方法

总体框架

使用python写一个程序,从天气xml服务处抓取天气数据,整理之后比对原有的日志文件,看天气状况是否有所更新。若是,调用飞信模块向本机发送短信。


在树莓Pi上,使用linux系统的crontab命令对这个程序做一个定时任务。这样就能定期启动,查天气,发送更新的结果了。

程序编写

python程序部分并不麻烦,主要是在整理收到的xml数据。

天气信息

这里采用的是webxml的天气服务。使用SOApy.WSDL获取


#Fetch the weather form Web.
 def __fetchWeather(self):
 _connection=SOAPpy.WSDL.Proxy('http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl') 
 _connection.soapproxy.config.buildWithNamespacePrefix = 0 
 for i in _connection.methods:
 _connection.methods[i].namespace = _connection.wsdl.targetNamespace
 self._raw_weather=_connection.getWeatherbyCityName(theCityName='58457')

这里的theCityName='58457'是对应的杭州的城市码,不同的城市码可以在它的网站上查到。

构造天气字典

将获取的天气信息,对自己感兴趣的部分,构造一个天气字典备用。这里,我感兴趣的是天气实况、未来三天天气预报。对其他信息感兴趣?可以把抓来的raw数据打印出来,自己找找。


def __ctr_weather_dict(self,raw_data):
 self.dict_weather={}

if os.path.exists(self._log_file):
 with open(self._log_file) as f:
 self.dict_weather = cPickle.load(f)
 self.dict_weather['last_update'] = self.dict_weather['update_time']
 else:
 self.dict_weather['last_update'] = None

self.dict_weather['city_name'] = self.__conv_raw(raw_data[0][1])
 self.dict_weather['3_prediction'] = self.__conv_raw(raw_data[0][6]) + self.__conv_raw(raw_data[0][5]) + os.linesep + self.__conv_raw(raw_data[0][13]) + self.__conv_raw(raw_data[0][12]) + os.linesep + self.__conv_raw(raw_data[0][18]) + self.__conv_raw(raw_data[0][17]) + os.linesep
 self.dict_weather['state_now'] = self.__conv_raw(raw_data[0][10])
 self.dict_weather['update_time'] = self.__conv_raw(raw_data[0][4])

比对原有日志


def __log_compare(self):
 if (self.dict_weather['last_update'] == self.dict_weather['update_time']):
 return False
 else:
 return True

比对原有日志文件,看是否有更新,若有才发送

飞信发送

这里发送飞信,采用的是github上的一个[WapFetion模块](https://github.com/whtsky/PyWapFetion)
使用非常方便,参看他的example.py就一清二楚了。

定时任务设定

采用Linux系统自带的crontab命令来设定定时启动程序。
首先,写一个脚本,很简单,就是为了启动这个python程序


#!/bin/bash
cd /path/to/Weather.py
python ./Weather.py

使用命令crontab -e编辑cron服务,其基本格式为:


*     *    *     *    *    command
分  时  日  月  周  命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

把启动程序的sh路径填入command里面,然后按照上述格式选择相应的启动间隔,即可定时启动服务了。
来看看效果吧:


  评论这张
 
阅读(161)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018