杨芳 唐春燕
宜宾市南溪区气象局 四川宜宾 644100
摘 要: 利用四川省南溪区微信公众平台作为抓手,基于微信平台进行功能开发,设定自定义菜单,帮助公众号丰富界面,让用户更好更快地理解公众号的功能,利用node.js、myqsql等计算机技术,构建微信气象服务,整合天气实况、天气预报、预警信息、预报节目等内容,实现推广气象部门服务产品,达到气象预警,更好为人民服务的目的。
关键词: 微信公众号,计算机技术,气象服务
2014年9月2日,中国气象局办公室下发关于加强微信气象服务工作的通知, 要求各省(自治区、直辖市)气象局和中国气象局各直属单位完善微信等新提供到外网气象服务业务体系,共同树立气象官方微信公众服务品牌。一般的微 信服务只是申请了公网IP,将内网服务映射到外网,本文进行了更进一步的探索,将自观数据报文拆分,进行正则分析,如果气象数据有错误,将及时通报气象工作人员。
1 微信服务设计要求
本文设计的微信服务包括两个部分:
(1)对外提供气象信息预警及气象查询服务。气象预警信息传播,可以拓展公众气象服务方式,提高气象服务针对性水平,收集服务需求与建议的新平台,提高南溪区“微信气象服务支撑平台”气象服务能力。
(2)对内针对气象工作人员,提供气象报文状态监控服务。使用Python语言编程,对自动观测数据报文拆分并分析,如果数据有误,则自观设备工作状态不正常,通知气象工作人员检查设备。
2 服务器设计
系统服务器的设计,包括微信公众号服务器、数据查询服务器以及消息队列服务器,系统配置如表2-1所示:
表格2-1 服务器配置列表
.png)
2.1数据查询服务器
数据查询服务器(ip:192.168.1.151)功能主要包含:
(1)报文拆分服务
报文拆分服务器,主要使用python拆分自观数据报文,添加Crontab自动任务,监控队列管理器输出目录,当有数据报文进来时,进行报文拆分分析。
(2)数据库
数据库使用的MongoDB[1]数据库, MongoDB是一个介于关系数据库和非关系数据库之间的产品,它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
查看程序运行状态: systemctl status mongod.service
程序启动:systemctl start mongod.service
程序停止:systemctl stop mongod.service
程序重启:systemctl reload mongod.service
2.2公共号服务器
公共号服务器提供前端微信查询服务,包括针对气象服务使用者的信息以及气象服务运维者信息。该服务器直接暴露于公网,因此需要申请公网IP、执行 ICP备案以及添加防火墙,并设置防火墙TCP协议的80端口通过放行。
公共号服务器后端使用node.js部署,Node对一些特殊用例进行优化,提供替代的API,执行Javascript的速度非常快,性能非常好。用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动,非阻塞I/O?模型而得以轻量和高效,非常适合为微信请求事件提供服务。执行node.js安装命令,yum install -y nodejs,如图2-1所示
.png)
图2-1 node.js安装过程
在node.js服务器设置中,将气象网站天气实况数据、预警信息、空气质量预报的链接地址,指向内部的服务地址。
2.3消息队列服务器
消息队列服务器( ip:192.168.1.150)使用的RabbitMQ部署,RabbitMQ是一套开源(MPL)的消息队列服务软件,是一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由Erlang 写成,RabbitMQ的安装如图2-2所示:
.png)
图2-2 RabbitMQ安装过程图
设置开机启动RabbitMQ服务:chkconfig rabbitmq-server on
启动服务:service rabbitmq-server start
查看服务状态:service rabbitmq-server status
消息队列服务器的队列主要包含:
1)对外预警服务队列
获取前端查询请求,将请求信息传递至数据库查询服务器,返回查询数据至公众服务号服务器。
2)对内预警服务队列
将数据库查询服务器报文拆分数据产生的预警信息,通过该队列发送至公众号服务器,最终发至气象服务保障人员,产生微信预警。服务器连接图如图2-3所示:
.png)
图2-3 南溪区气象信息服务器连接示意图
2.4前端UI设计
气象信息服务器前端UI设计使用微信提供的接口,本设计使用的菜单接口如下[2]:
1)click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给后端服务器;
2)view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息;
3)scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传回,同时收起扫一扫工具,然后弹出“消息接收中”提示框;
4)location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
3结论
该项目通过设置node.js服务器,实现气象网站天气实况数据、预警信息、 空气质量预报等与公众气象服务微信平台无缝对接,用户轻松选择菜单栏,即可获取所需的气象信息。通过python气象自动观测数据的定时拆分分析,针对错误的自动观测数据通过RabbitMQ,将预警信息发送至微信使用者气象服务保障人员,从而实现提高气象服务能力,加强自动观测设备的保障能力,实现微信服务助力三农服务的效果。
参考文献
[1] 蔡柳青.??基于MongoDB的云监控设计与应用[D].?北京交通大学?2011
[2] 徐琼芳,聂菊荣,冯海旭,万磊.??基于微信平台的潜江气象预警信息发布系统设计与实现[A]. 第31届中国气象学会年会S13 气象通信与信息技术应用实践与新技术探索[C]. 2014