• 16235阅读
  • 11回复

用QT实现自动发送天气预报信息到手机! [复制链接]

上一主题 下一主题
离线mofei252
 

只看楼主 倒序阅读 楼主  发表于: 2008-06-14
— 本帖被 XChinux 从 Qt Programming 移动到本区(2008-06-15) —
其实这个题目有点夸大,呵呵。

给大家分享一下我前些日子做得一件事情,可能对某些人来说,能从中间体会到一些什么。

我的母亲对天气预报特别关注,每天晚上一到电视播天气预报的时候就准时的守候在电视跟前,偶尔某天错过了,她还会懊恼不已,然而她又舍不得花钱定制移动的短信天气预报服务。所以,我就想,我能为她作些什么呢?

问题描述:利用Linux下的飞信功能,用QT写一个自动发送天气预报到飞信好友的服务端,用linux的crond周期执行此服务端。

解决方案描述:
1、天气预报信息:我写了一个perl脚本,自动从天气预报网站上抓取我们这里县城的天气预报信息(今后5天的),保存到本地文件。
2、编程使用linux下的飞信功能:在linux下的飞信客户端开发出来后,我通过邮件和飞信客户端的作者联系了,希望能得到linux下的飞信库源码,但是遗憾的是,作者出于一些原因,不能提供飞信库源码。不过好在我需要使用飞信库的函数不多,仅仅是几个简单的登录和发送函数,所以我下了libfetion静态库,通过阅读linux下飞信客户端的源码,获得了我需要使用的几个函数声明。编程测试通过,万事俱备矣。
3、利用QT的QCoreApplication,写一个QT的Non-gui程序,作为我的服务端,将其挂载在单位的服务器上,每天发送一次天气预报给我的飞信好友。


执行的源码:

#include <libfetion/libfetion.h>
#include <QTextCodec>
#include <QStringList>
#include <QFile>
#include <QDir>

#include "server.h"

Server::Server()
    : QObject()
{

   
    if(!fx_init()){
        return;
    }

    //手机号码和飞信登录密码
    if(!fs_login(tel_number, tel_password)){
        return;
    }
   
    //读取本地天气预报文件
    QStringList string_list_date;
    QStringList string_list_temperature;
    QStringList string_list_weather;

    //weather文件保存脚本抓取到的天气预报,有特点的格式。
    QFile file("weather.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))return;

    while (!file.atEnd()) {
        QString string_line = file.readLine();
        string_line.chop(1);
       
        if(string_line.indexOf("℃") != -1){
            string_list_temperature << string_line;

        }else if(string_line.indexOf("00") != -1){
            string_list_date << string_line;
   
        }else {
            string_list_weather << string_line;
        }
    }
    file.close();
   

    if(string_list_weather.size() == 0 || string_list_date.size() == 0 || string_list_temperature.size() == 0){
        return;
    }

    //开始发送天气预报信息,可以选取其中的哪几天
    QString string_weather;
    for(int i = 0; i < 2; i++ ){
        string_weather.append(string_list_date.at(i));
        string_weather.append(",");
       
        string_weather.append(string_list_temperature.at(i));
        string_weather.append(",");
       
        string_weather.append(string_list_weather.at(i));
        string_weather.append(";\n");
    }

    //飞信发送   
    Fetion_Account *account = NULL;
    DList *tmp_account = fx_get_account();
   
    while(tmp_account)
    {
         account = (Fetion_Account *)tmp_account->data; 

         if(account)
         {
           
            fs_send_sms(account->id, string_weather.toLocal8Bit());
           
         }
         tmp_account = d_list_next(tmp_account);
    }

    //发送给自己
    fs_send_sms_to_self( string_weather.toLocal8Bit());
   
    fx_loginout();
    fx_terminate();
}
离线chencongsytu

只看该作者 1楼 发表于: 2008-06-16
不错,顶
离线yingzi1213

只看该作者 2楼 发表于: 2008-06-17
不错啊,很有用,能不能也发一个天气预报给我呢。
离线kwok924
只看该作者 3楼 发表于: 2008-07-31
可不可以把你的perl脚本也传上来?
谢谢
qt菜鸟
离线lgdwell

只看该作者 4楼 发表于: 2008-08-05
挺狠
我能!
离线13591754402
只看该作者 5楼 发表于: 2008-12-29
好贴  学到很多东西 谢谢 楼主``
离线hopewind1987
只看该作者 6楼 发表于: 2009-06-05
把源码发上来吧,第一步就不知道怎么做,谢谢!
离线wvins
只看该作者 7楼 发表于: 2009-06-05
顶楼主,看过楼主贴的几个小软件,做的都不错。

(受Python社区的影响)曾经想过做这样的项目。
离线charlesjun
只看该作者 8楼 发表于: 2009-06-16
顶啊,楼主可不可以发源码过来研究研究啊!
离线charlesjun
只看该作者 9楼 发表于: 2009-06-20
请教lz,server.h是放在哪里的?是自己写的,还是libfetion的头文件?
离线meronasia
只看该作者 10楼 发表于: 2009-10-24
楼主,你的思想我受用了,谢谢。
Windows7
Qt 4.52
Notpad + MinGW
离线hxing
只看该作者 11楼 发表于: 2011-05-11
楼主,可以把你是飞信库给我发一份吗?
谢谢....
553841071@qq.com
快速回复
限100 字节
 
上一个 下一个