2. 中国武汉 430071 湖北省地震局
2. Hubei Earthquake Agency, Wuhan 430071, China
目前,公众获取地震信息的官方渠道局限于网站和手机短信,一些机构开通的微博也承担部分震情发布功能。地震信息发布渠道较少,发布形式单一,难以满足公众对震情信息的需求(贾宁,2016;向楠,2016)。为解决这一矛盾,湖北省地震局开发的地震应急通系统2.0版于2015年3月完成验收,在对内蒙古阿拉善左旗M 5.8地震和尼泊尔M 8.1地震发布中取得较好效果;中国地震信息网、北京市地震局、河北省地震局和四川省地震局等开通的新浪微博在地震信息对外发布方面也受到良好评价。
腾讯微信月活跃用户2016年底已经达到8.99亿,庞大的用户群和超强的用户黏性远超其他应用(腾讯,2016)。腾讯微信公众平台的推出为地震信息速报提供了很好的拓展领域。目前,中国地震部门有多家单位借助微信公众平台搭建震情服务系统,在科普宣传、震情速报、灾情搜集等方面服务进行尝试,并收到良好效果。但为普通民众提供数据查询与减灾自救稍显不足。本文设计并实现的湖北震情速报微信公众服务平台,拥有地震信息即时推送、震中位置定位、灾情上报等功能,可为公众提供准确、详实的震情服务。
微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限。开发者获取开发权限后,可以独立于微信公众平台,遵照微信公众平台开发规范进行自由开发,在开发完成后,与微信公众平台接口对接,即可完成开发流程,为开发者省去繁琐的应用部署程序,缩短应用开发时间并降低应用的维护成本。
微信公众服务号采用的地震信息来源于EQIM(全国速报数据交换平台)数据库,根据设定的前置条件,将EQIM数据库的数据即时同步到微信网站服务器(叶佳宁,2014)。考虑到新浪云应用(SAE)是目前国内影响力较大、技术较为成熟、数据容灾能力较高的虚拟托管平台,将其作为网站服务器。在为用户提供个性化服务方面,根据最新地震、用户地理位置和用户需求等限定字段,将个性化的地震信息推送给微信关注者,还可以结合腾讯地图、百度地图等第三方地图提供商进行基于LBS的个性化开发。
1 系统模块与功能湖北震情速报微信公众平台技术架构见图 1。通过对EQIM数据库进行时时监听,保证时时推送最新地震信息,一旦发现新的速报信息便提取地震三要素等内容,通过socket通信机制发送到微信服务器进行匹配处理。为了实现EQIM数据库与微信服务器关联的地震信息数据库同步,需要实时监控EQIM数据库新增记录,根据系统需要,将合适的数据记录提取到微信数据库,方便用户查询。为方便对微信数据库进行管理和维护,采用新浪云(SAE)作为第三方代码和数据托管平台。
![]() |
图 1 微信公众平台技术框架 Fig.1 Technological frame of WeChat public platform |
在微信服务器中有3个关键代码程序:①微信个性化匹配程序。系统在向微信关注者主动推送信息之前,需要根据用户的个性化设置进行筛选匹配;②关键字查询程序。用户发出指令,微信服务器根据限定条件获取数据库中的信息,并反馈给用户;③数据采集程序,方便用户对地震灾情进行上报。
2 关键技术实现在微信公众平台开发中,微信官方支持的开发语言有PHP、ASP、JSP、Java等(刘洋君,2016)。湖北省震情速报微信公众平台系统开发采用PHP语言,客户端网页呈现采用ext技术,数据库采用MySQL。整个系统开发在Windows 10环境下的Adobe Dreamweaver CC 2014平台完成。
2.1 开发权限的获取与接口配置微信公众平台有2种开发模式:①编辑模式,简单但功能单一;②开发者模式,可以通过开发实现复杂功能。2种模式不能互通,注册时根据开发者需求选定。本系统采用开发者模式并通过“高级功能”菜单开启。
(1)在微信公众平台(http://mp.weixin.qq.com)申请公众平台帐号,注册公众账号需要准备的材料可在官网查看,不再赘述。
(2)到指定页面申请消息接口,接口调用代码如下。
<?php
/*-------------------------------------------------
| index.php[微信公众平台接口]
+--------------------------------------------------
| Author: GnZooLi
+------------------------------------------------*/
$wechatObj = new wechat();
$wechatObj->responseMsg();
class wechat {
public function responseMsg() {
//----------接收数据---------- //
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据
//用SimpleXML解析POST过来的XML数据
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)
$toUsername = $postObj->ToUserName; //获取接收方账号
$keyword = trim($postObj->Content); //获取消息内容
$time = time(); //获取当前时间戳
//----------返回数据---------- //
//返回消息模板
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
$msgType = "text"; //消息类型
include('simsimi.php');
$contentStr = simsimi($keyword); //返回消息内容
//格式化消息模板
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr; //输出结果
}
}
?>
2.2 地震速报地震自动速报系统的工作原理是,采用实时仿真技术,结合测震、强震等资源,对地震三要素进行确定,通过部署在国家地震台网中心的自动EQIM服务器进行汇总,将地震速报信息发送给地震系统内部人员。采用地震实时触发机制,当地震发生时,通过地震速报系统获取地震三要素,并通过POST方式获取最新地震信息的三要素录入数据库,效果图见图 2。部分关键代码如下。
![]() |
图 2 地震速报信息 Fig.2 Earthquake quick-report |
<? php
$action = $ _REQUEST[“ do “]; //传递有新的地震信息
if (false);
else if ($ action);
else {
$ location = $ _REQUEST [“location “]; //获取发震地点
$ time = $_REQUEST [“time”]; //获取发震时间
$ longitude = $_REQUEST [“longitude”]; //获取发震经度
$ latitude = $ _REQUEST [“latitude ”]; //获取发震纬度
$ depth = $ _REQUEST [“depth ”]; //获取震源深度
if ($ conn = getConn()) {
sqlExec ($conn,“INSERT INTO eqimlogs VALUES (‘${status}’, ’${time}’, GETDATE (),“‘.${location}’””)
2.3 地震查询地震查询以列表的形式展示给用户,效果图见图 3,部分关键代码如下。
![]() |
图 3 地震查询列表 Fig.3 Earthquake query list |
“touser”:“OPENID”,
“msgtype”:“news”,
“news”:{
“articles”:[
{
“title”:“最新地震”
“description”:“共搜到31条记录”,
“url”:“URL”,
“picurl”:“PIC_URL”
}
]
}
}
2.4 位置服务与避难场所查询用户向微信公众号发送位置请求信息,微信指令解析模块解析POST请求,并匹配消息类型和指令,处理后调用相应服务子模块。请求消息样例如下。
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1447896530</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>30.780760</Location_X>
<Location_Y>111.30686</Location_Y>
<Scale>16</Scale>
<Label><![CDATA[位置服务]]></Label>
<MsgId>12099654321</MsgId>
</xml>
微信服务器收到用户的位置请求后,返回用户的经纬度信息(图 4),并调取第三方软件——百度地图进行回复。回复消息样例如下。
![]() |
图 4 位置服务 Fig.4 Location service |
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>2167498001</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[LOCATION]]></Event>
<Latitude>30.780760</Latitude>
<Longitude>111.30686</Longitude>
<Precision>119.385040</Precision>
</xml>
用户向微信服务器发送位置请求之后,微信服务子程序根据经纬度信息,计算并统计距用户20 km范围内的避难场所,并根据间距大小进行排序,以图片形式发送避难场所的位置、容纳人数、距离等信息,可以在百度地图上查看对应场所的具体位置信息。代码如下
If ($distance < 20000){
shopSortArrays[$distance] = array(
"Title"=>"【".$stlist[$i]['name']."】\n距离".round(($distance / 1000), 1)."千米容纳".round($stlist[$i]
['accommodate'], 1)."万人",
}
ksort($shopSortArrays); //排序
$shopArray = array();
$shopArray[] = array("Title" =>'附近避难所', "Description" =>"", "PicUrl" =>"", "Url" =>"");
foreach ($shopSortArrays as $key =>$value)
{ $shopArray[] = $value;
if (count($shopArray)>9){break; }
}
if (count($shopArray) == 1)
{$content = "附近20km内没有查询到应急避难场所。";
}
else{
$content = $shopArray;
}
3 应用推广湖北震情速递微信公众号2016年12月上线运营,用户关注度较高。地震科普、避难场所查询等功能受到广大用户好评,为地震知识宣传、地震自救服务等提供了较好的途径。
地震发布信息以最快速度推送到微信,地震详情内容包括文字和地图,详细展示地震三要素,见图 5。灾情上报以表单形式供用户填写,包括受伤人数、死亡人数、房屋破坏数目、房屋倒塌数目,还可进行备注说明和上传现场照片等操作,见图 6。地震科普功能每天推送一条精选自地震局官网的地震科普信息,见图 7。
![]() |
图 5 地震详情 Fig.5 Earthquake details |
![]() |
图 6 灾情上报 Fig.6 Disaster reporting |
![]() |
图 7 地震科普 Fig.7 Earthquake science popularization |
2017年2月23日宜昌秭归县发生3.8级地震,湖北震情速递微信公众号在中国地震台网中心发布后第一时间推送该条信息,为地震应急救援、地震分析等工作提供了较大帮助。此后,湖北震情速递微信公众号的用户,特别是湖北地区关注者数量明显增加,该公众号影响力逐步提升。
4 结束语借助微信公众平台开发公众号比开发普通APP简单、快捷,受到广大开发者的喜爱。利用微信强大的影响力进行地震速报、地震科普和地震灾情搜集具有很大意义。湖北震情速递微信公众号开通试运营后,收到较好效果,为防震减灾工作带来更多便利,但仍存在以下不足:①由于通讯网络不稳定,且微信服务器和代码托管平台指令交互产生延时,导致地震速报信息不够及时;②未与地震相关网站、微博等实现互连互通,资源和信息无法共享,造成浪费,今后将进行共享研发;③微信公众号与用户互动有待改进,未来工作中将继续开发地震自救知识问答、地震论坛等功能。
何霆, 叶佳宁. 基于微信的地震行业APP服务系统设计与实现[J]. 华南地震, 2015, 35(2): 37-42. | |
贾宁, 孙哲, 韶丹. 地震速报微信自动推送系统设计[J]. 地震地磁观测与研究, 2016, 37(2): 165-170. | |
梁兆东, 黄洋, 朱土凤. 基于图灵机器人的智能地震科普微信公众号的实现[J]. 信息化建设, 2016(1): 116-117. | |
刘洋君, 徐晓亮, 胡捷. 地震信息微信公众号的建立与开发[J]. 山西地震, 2016(1): 23-27. | |
腾讯. 腾讯公布2016年第四季度及全年业绩[EB/OL]. https://www.tencent.com/zh-cn/articles/8003411490172512.pdf. | |
微信公众平台. 微信公众平台开发者文档[EB/OL]. http://mp.weixin.qq.com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.html. | |
魏艳旭, 刘晓丹, 贾军鹏, 等. 河北地震官方微信公众服务平台[J]. 地震地磁观测与研究, 2016, 37(2): 171-176. | |
项楠, 崔满丰. 基于微信公众平台的地震科学数据共享服务方式研究[J]. 国际地震动态, 2016(9): 8-15. | |
徐丹, 韩艳杰, 张诺男, 等. 地震信息微信公众平台服务开发[J]. 地震地磁观测与研究, 2016, 37(1): 146-150. | |
叶佳宁, 何霆. 地震信息微信自动发布系统的设计与实现[J]. 华北地震科学, 2014, 32(4): 23-28. |