铁皮玩偶 发表于 2009-11-27 00:58

一个未完成的小程序(天气预报)想找人合作完成



以前一直订着google的免费天气预报,每天下午3:30左右发明天的天气预报,前几天考完试,没什么事做,突发奇想,做一个小程序,做了一个星期举步维艰,大一时候学的c都快忘了,而且这四年自己没有写过超过100行的程序,所以一边自学,一边做,最终还是没有完成,过几天又要忙,而且大四了忙着找工作。。。
程序的作用:订了google的天气预报,内容“山东省 济南 明天天气:5度/2度,晴....”想把这几个提取然后找个地方显示出来,然后程序自动把短信删除。

程序的实现:刚开始研究时候在网上知道短信是存在一个叫main.db的数据库文件里面,日程也在里面我就想直接写一个操作数据库的程序把这段字移过去。然后在边栏里面可以显示出来。其实还可以再复杂一点,后面说

艰苦的制作:研究了几天知道moto短信用的数据库是berkeleydb,从网上下载,编译,自己是个菜鸟级别,用linux写程序还是买了v8之后才用过,而且外部库没有用过,研究数据库的结构,读取,存储,外部库的连接。。。。都是自己一点一点搜的。。痛苦
现在程序已经完成了在电脑上移动字段的阶段,也就是说把手机里面的main。db复制到电脑上运行程序字段会移动过去,这些只是核心,自动搜索,删除什么的功能还没有,而且没有经过交叉编译,还不能在手机上运行。

程序的展望:这是最简单的实现方法,其实这个程序如果做出来后,可以给窗口程序传递参数,能实现更美观的google天气秀,而且是免费的。

ps:这几天由于自己的无知走了好多弯路,觉得自己闭门造车太慢了,想找个高手学习交流一下把这个程序弄到小8上去
   2楼我发原码,说说我们后面怎么做。

铁皮玩偶 发表于 2009-11-27 00:59

源码。。。c语言的,其实是很简单,只是我比较菜

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "db.h"//berkeleydb定义的
#define datafil "main.db"
int main()
{
DB *dbp_1;
DB *dbp_2;
DBT key_1, data,key_2;
int ret,t_ret;

//数据库文件里面有若干数据库,下面是打开短信数据库dbg_4_ems_table_in_flash并提取有用信息,具体想知道的咱们详聊
db_create(&dbp_1, NULL, 0);
dbp_1->open(dbp_1,NULL,datafil,"dbg_4_ems_table_in_flash", DB_BTREE, DB_CREATE, 0664);

memset(&key_1, 0, sizeof(key_1));
memset(&data, 0, sizeof(data));
key_1.data = "\03\00\00";//berkeleydb是key,data结构的,这个是key的值,要想实现自动搜索天气短信这个地方要改,我是为了严重弄了个定值
key_1.size = sizeof("\03\00\00");

data.doff =183; //这个是读取有用信息的位置,我可能数的有点错误所以导致做出来的显示乱码,严谨起来这里应该也改成个循环
data.dlen =16;
data.flags=DB_DBT_PARTIAL;

if ((ret = dbp_1->get(dbp_1, NULL, &key_1, &data, 0)) == 0)
printf(
"db: %s: key retrieved: data was %s.\n",
(char *)key_1.data, (char *)data.data
);
else
dbp_1->err(dbp_1, ret, "db->get");//这个后面可以添个函数返回天气情况以后给qt窗口程序用
//下面是向日程数据库里面存入天气信息
db_create(&dbp_2, NULL, 0);
dbp_2->open(dbp_2,NULL,datafil,"cal_table_event", DB_BTREE, DB_CREATE, 0664);
key_2.data = "\04\00\00"; //也是个定值要该的地方
key_2.size = sizeof("\04\00\00");

data.flags=DB_DBT_PARTIAL;
data.size = 16;
data.doff =141;
data.dlen =16;
if ((ret = dbp_2->put(dbp_2, NULL, &key_2, &data, 0)) == 0)
printf("db: %s: key stored.\n", (char *)key_2.data);
else
dbp_2->err(dbp_2, ret, "db->put");
//关闭这两个数据库数据位置被该了。我们就打工告成了
if ((t_ret = dbp_1->close(dbp_1, 0)) != 0 && ret == 0)
ret = t_ret;
//exit(ret);
if ((t_ret = dbp_2->close(dbp_2, 0)) != 0 && ret == 0)
ret = t_ret;
exit(ret);

}

我还有要说的就是berkeleydb要用到他自己带的库函数,可以去berkeleydb官方网站下载然后自己用,交叉编译器编译。
我现在只编译了pc的
v8的还没有弄
我想修改好源文件+编译好库这个程序能在v8上运行,以后还可以修改,
比如
把“中国移动”改为天气预报什么的都行应该,有兴趣的同学咱们一起做出来吧

LouisLaw 发表于 2009-11-27 01:26

楼主.
我们手机是用UTF8格式的所以或许需要
QString ctr(const char*ChineseString)
{
QTextCodec* gbkstr = QTextCodec::codecForName("UTF-8");
return gbkstr->toUnicode(ChineseString);
}

还有就是,通过解析短信确实很好...
刚才看了是完全免费的推荐给大家订制网站

引用Google原话
接收谷歌短信提醒无需支付任何费用;
如果用户转发谷歌短信提醒,谷歌不会收取任何费用。
转发操作只会产生普通的短信发送费用,取决于手机运营商的资费标准。
http://www.google.com/sms/alerts


我很菜,不会C++,只会shell脚本

snevenking 发表于 2009-11-27 07:36

支持好东西了

azzk 发表于 2009-11-27 13:20

支持一下,我是个菜鸟什么都不会,只有支持了

Nazing 发表于 2009-11-27 13:31

支持……

缘岛Jay 发表于 2009-11-27 14:27

又一高手啊 期待你的作品~

wangxingjsyc 发表于 2009-11-27 16:02

只学过c++,对C语言不在行

k_k_kls 发表于 2009-11-27 16:16

支持了~高手都谦虚

yoooooou 发表于 2009-11-27 16:59

这个很需要啊
页: [1] 2 3 4 5 6 7
查看完整版本: 一个未完成的小程序(天气预报)想找人合作完成