`

打造自己的天气预报之(七)——实现实时发送

阅读更多

在上一篇

打造自己的天气预报之(六)——对数据库的操作

中,我介绍了Python操作SQLite数据库,以实现对用户信息的读写。 到目前为止,我的天气预报就剩下“发送”按钮的功能、以及定时发送功能没有实现。 在这一篇中,我们完成这两个功能,给本系列文章划上一个句号。本文出自三思之旅博客http://think3t.iteye.com,转载请注明出处。

首先来说说“发送”按钮的功能。点击“发送”按钮就是要给当前所有用户发送指定 的天气预报邮件。发送邮件的功能之前已经实现了,只不过当时只是所有用户发送相同的邮件, 只需要稍做修改即可。直接上代码。

self.Bind(wx.EVT_BUTTON, self.OnSend, self.sendBtn)

def sendToUsers(self):
    users = self.searcher.getUserInfo()  # 从数据库中获取用户信息
    for (mail, city, note) in users:  # 获取每个用户的邮箱、城市、备注信息
        weather = WeatherInfo('http://wap.weather.com.cn/wap/weather/%s.shtml' % 
                        city).getWeather()  # 获取用户设定城市的天气信息
        mailContent = []
        for w in weather[2:4]:  # 获取天气信息的具体内容
            mailContent.append("〖" + w[0] + "〗" + w[1])  # 天气信息的内容
        mailContent = ";\r\n".join(mailContent)  # 将天气信息加入邮件正文
        self.sendToUser(mail, weather[0], mailContent)  # 发送天气邮件
    self.stBar.SetStatusText(u'全部邮件发送完成!', 1)  # 全部天气发送完成状态栏给出提示

 

现在“发送”按钮的功能也实现了,最后还剩下定时功能。定时功能也很简单,用到了wx.Timer。wx.Timer可以让你的 应用程序产生基于时间段的事件,对wx.Timer最灵活和最有效的用法是使它产生EVT_TIMER,并将该事件如同其 它事件一样进行绑定。使用wx.Timer可以分为三步:

  1. 创建定时器;
  2. 绑定定时器;
  3. 启动和停止定时器。

下面一步步详细解释一下。wx.Timer的构造函数为

wx.Timer(owner=None, id=-1)

本文出自三思之旅博客http://think3t.iteye.com,转载请注明出处。

其中参数owner是实现wx.EvtHandler的实例,即任一能够接受事件通知的wxPython控件或其它的东西。 参数id用于区分不同的定时器。如果没有指定id,则wxPython会为你生成一个id号。如果当你创建定时器时, 你不想设置参数owner和 id,那么你可以以后随时使用SetOwner(owner=None, id=-1)方法来设置, 它设置同样的两个参数。

在你创建了定时器之后,你可以如下面一行的代码来在你的事件处理控件中绑定wx.EVT_TIMER事件

self.Bind(wx.EVT_TIMER, self.OnTimerEvent)

 

如果你需要绑定多个定时器到多个处理函数,你可以给Bind函数传递每个定时器的ID,或将定时器对象 作为源参数来传递。

timer1 = wx.Timer(self)
timer2 = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.OnTimer1Event, timer1)
self.Bind(wx.EVT_TIMER, self.OnTimer2Event, timer2)

本文出自三思之旅博客http://think3t.iteye.com,转载请注明出处。

在定时器事件被绑定后,你所需要做的所有事情就是启动该定时器,使用方法 Start(milliseconds=-1, oneShot=False)。其中参数milliseconds是毫秒数。 这将在经过milliseconds时间后,产生一个wx.EVT_TIMER事件。如果 milliseconds=-1,那么将使用早先的毫秒数。如果oneShot为 True,那么定时 器只产生wx.EVT_TIMER事件一次,然后定时器停止。否则,你必须显式地使用 Stop()方法来停止定时器。

本程序创建了一个定时器实例,一方面显示状态栏上的时间,另一方面,处理定时发送功能。

self.timer = wx.Timer(self)  # 创建定时器
self.Bind(wx.EVT_TIMER, self.OnTime, self.timer)  # 绑定计时器对象
self.timer.Start(500)  # 启动定时器

def OnTime(self, event):
    t = time.localtime(time.time())  # 获取本地时间
    st = time.strftime("%H:%M:%S", t)  # 将时间对象转换成HH:MM:SS格式(24小时)字符串
    self.stBar.SetStatusText(st, 1)  # 将时间字符串显示在状态栏上
    
    if(self.isTimerOn):  # 如果定时发送复选框
        timer = self.timer_hour + ':' + self.timer_minute + ':' + self.timer_second  # 获取定时时间
        if(not cmp(st, timer)):  # 当前时间等于定时时间时
            time.sleep(1)  # 因为定时器每500毫秒刷新一次,所以延时1秒钟,防止连续发送两次
            self.sendToUsers()  # 给用户发送天气预报

本文出自三思之旅博客http://think3t.iteye.com,转载请注明出处。

至此,我的天气预报的功能已经都实现了。为了实现给手机发送天气预报短信,还需要一台能够7x24小时连续运行的电脑,把我的程序挂在上面。 同时开通139邮箱,设置长短信提醒。这样每天就能够收到免费的天气预报短信了。

当然,并不是每个人都能找到一台能够7x24小时连续运行的电脑的,难道为了一个免费的天气预报就去租一台服务器?这也太不划算了。怎么办, 难道忙了这么久写的程序只能玩玩,没一点用处?非也非也!现在云计算正在盛行,只需要找“一朵”支持Python的、免费的云即可。这样的云有吗?答案是肯定的。 在此隆重推荐Google App Engine。虽然它不是完全免费的,但是每天都有免费的1G流量,发个天气预报,足矣!Google App Engine版本的天气预报我其实 已经实现了,目前已经每天帮家人和几个朋友提供免费的短信天气。以后找机会放出来和大家交流交流。

打造自己的天气预报系列文章到此算是完结了,欢迎广大朋友们留言讨论,并欢迎大家继续关注我的博客,关注三思之旅!本程序完整源代码稍后整理之后会放出,敬请期待。

本文出自三思之旅博客http://think3t.iteye.com,转载请注明出处。

0
1
分享到:
评论

相关推荐

    打造自己的天气预报之(三)——给程序加个图形用户界面(GUI)

    总结来说,这个项目通过`MyFrame.py`和`GetWeather.py`这两个Python脚本,结合`img`目录中的天气图标,实现了一个能够查询并显示天气预报的GUI应用程序。这个过程涉及到了Python GUI编程、网络请求、JSON数据解析...

    天气课程表demo样例

    天气查询功能可能包括了获取温度、湿度、风向、风速、空气质量等关键数据,并可能有未来几天的天气预报,让用户提前做好准备。同时,它还具备课程表管理功能,用户可以方便地添加、编辑和删除自己的课程安排,提醒...

    嵌入式课程报告——基于EDP、MQTP、HTTP的物联网远程监控系统

    - **设备向平台请求数据**:设备可以使用HTTP协议向OneNET平台请求数据,如最新的天气预报等。 - **设备向平台发送数据**:同样地,设备也可以使用HTTP协议将本地收集的数据发送至OneNET平台。 ##### 4. 语音播报 ...

    MyWeatheraAPP

    在当今数字化时代,一款高效实用的天气预报应用程序能够极大地便利人们的生活。本文将详细探讨名为"MyWeatheraAPP"的应用程序,它集天气查询、定位服务和自动短信发送功能于一体,通过调用API为用户提供实时、准确的...

    海峡国际别墅Melion智能化系统设计方案及对策及对策.doc

    6. 多媒体信息服务功能:集成新闻、天气预报、社区公告等信息,方便业主随时获取生活资讯。 7. 背景音乐控制:为别墅营造舒适的音乐氛围,可根据不同场景和时间段设定播放列表,提升生活质量。 此外,设计方案还...

    简约至上:交互设式设计策略

    比如,在设计一个天气预报应用时,可以根据天气情况改变背景图片(晴天为蓝天白云,雨天为乌云密布),并配以相应音效(如雨声、鸟鸣等),让用户仿佛置身于真实场景之中。 总之,“简约至上”的设计理念旨在通过...

    Weather-APK:根据用户的当前位置显示其天气

    Weather APK是一款专为用户提供实时天气信息的应用,它利用了OpenWeatherMap API的强大功能,为用户带来了精准的天气预报服务。这款应用巧妙地结合了移动设备的定位功能,为用户提供所在位置的天气情况,使得天气...

    Sunshine:阳光安卓应用

    【阳光安卓应用——打造你的天气查询利器】 "Sunshine"是一款专为Android用户设计的简单天气应用程序,旨在提供直观、便捷的气象信息查询服务。这款应用以用户友好为设计核心,利用Java编程语言构建,实现了对天气...

    居家养老信息化解决方案.ppt

    主动关怀系统结合了天气预报、事件提醒和信息增值服务,为老人提供定制化的关怀服务。例如,系统可以自动发送生日祝福、用药提醒,以及相关的保健养生知识。此外,还有电子支付、远程诊断、健康数据分析等功能,支持...

    Weather-App:一个使用 GPS 数据查找用户当前位置并显示相关天气信息的 Android 应用程序

    这款应用不仅满足了用户对天气预报的基本需求,还体现了移动应用与地理位置服务的深度融合。 二、核心技术 1. **GPS定位**:Android系统提供了丰富的位置服务API,包括GPS(全球定位系统)和网络定位等。开发者...

    Mobile-ClevelandMetroparks:克利夫兰都会公园移动应用程序

    2. 数据同步与存储:JavaScript库如Ajax或Fetch API用于实现后台数据同步,确保用户获取到最新的公园公告、活动日程和天气预报。同时,利用Web Storage或IndexedDB,应用还可以在离线状态下保存用户偏好和部分数据,...

    Boucherot-开源

    - **信息查询**:天气预报、新闻更新、时间同步等。 - **娱乐互动**:猜谜游戏、音乐推荐、聊天机器人等。 通过掌握Boucherot,开发者不仅可以提升自己的Perl编程技能,还能为IRC社区带来更多的创新和便利。如果你...

    mastodon-pug:生活在Mastodon中的漂亮机器人,用Go语言编写

    3. **定时发布**:按照预设的时间表发布信息,如新闻摘要、天气预报等。 4. **信息聚合**:从其他来源抓取内容并分享到Mastodon,比如RSS订阅源的整合。 5. **娱乐互动**:提供游戏、谜语或问答等娱乐活动,增加...

Global site tag (gtag.js) - Google Analytics