系统网址是: http://pnpstock.sinaapp.com/
系统结构如下
Crawl
股票数据是从网页上直接抓取过来的
经过调研: "http://hq.sinajs.cn/rn=6aqcc&list=xxxxxx,yyyyyy" 获得的数据还是比较好 parse的
比如用 http://hq.sinajs.cn/rn=6aqcc&list=sh600839,sz000825, 就将得到
var hq_str_sh600839="四川长虹,2.12,2.12,2.14,2.14,2.11 ...
var hq_str_sz000825="太钢不锈,3.22,3.24,3.24,3.24,3.21 ...
而我们要的实时股票数据,所以数据必须定时抓取(设定是每十分钟)
以前我的系统跑在 Window + Apache上,因此我在windows定义计划任务,才定时抓取。 新浪云支持 crontab, 更好实现了
抓取的数据存在 StockData 中
Statistics
抓取的数据必须整理
a) 合并到最基础每日股票数据中
b) 求20日的均值等统计信息
这其中有些技巧,因为20日是指的20个交易日,并不能简单在时间上-20天
c) 把股票筛选入库
这相当于做 cache, 如果用户每次访问在给他筛选,占cpu, 运行慢, 用户量一大服务器就吃不消了
每一个筛选方式都是一个较为复杂连接多表,有多个条件的 sql select 语句
统计后保存的数据就是 SumaryData
StockFilter
因为已经做了筛选和cache, StockFilter工作不多, 只是读取 cache 表的数据而已
WebUI
就是浏览器中界面
当用户正在看数据时,数据可能已经更新, 所以应该定时更新浏览器
SelfSelectStock
就是自选股。为何做这个模块? 这是我以前用sina的股价短信提醒(每月5元钱),觉得还比较好用;后来换中国电信手机,sina竟然不支持, 所以就自己做这个功能;不过改为邮件提醒,因为网上的短信服务提供商是要收钱的。
UserManage
用户管理是个复杂的模块,涉及登陆,注册,注销,session 追踪,改密码,改邮件,确认邮件等等,我自己完成这些功能很消耗时间,而这些功能经过多年开发应该有成熟的代码,找一个修改一下为我所用。最后我选择了 userCake
Mail
我开发的原始版本没有使用 新浪云 的邮件 api, 后来改为用 新浪云的,接口比较简单, smtp server 我选择smtp.qq.com (需要在QQ上注册一个邮箱账号), 还比较稳定
本来还想给用户发送股票筛选信息,因为用户可以直接访问网页看筛选结果,此功能没有必要