贾显锋,刘洲荣
(柳州市气象局,广西 柳州 545002)
近年来,我国的气象现代化建设成效显著,建成了全国综合气象信息共享平台(CIMISS),实现了气象资料的实时收集、分发及规范化存储管理,为各级气象台站共享气象信息和业务应用提供了便捷高效的服务手段[1]。
CIMISS提供了气象数据统一服务接口(MUSIC),从而为气象数据应用提供了解决方案,并为部分程序开发语言提供了开发接口和较为详尽的应用开发示例,这为基层台站业务应用开发和科研工作提供了良好的应用开发环境[2-3],各级气象部门利用CIMISS开发了多种业务应用系统[4-10]。然而,作者在科研应用开发过程中也发现MUSIC提供的开发接口并没有完全覆盖所有编程语言,对于一些目前仍作为主要开发工具的 BCB、Delphi、Visual Basic等编程语言并没有提供相应的开发示例Demo。作者尝试使用Windows应用程序编程接口(API)来编程调用CIMISS数据,以期解决在CIMISS应用中遇到的问题。Windows API是Windows自带的应用程序开发接口,理论上所有Windows平台上的开发语言都支持 Windows API应用[11-16],这为解决MUSIC不支持的编程语言提供了一种新的解决方案。
MUSIC提供了客户端、Web service和REST等三种编程服务方式[17-18],本文以REST服务方式为例,提出基于Windows API的CIMISS资料调用方案。
利用REST服务方式,通过在客户端发送符合REST风格的HTTP请求,CIMISS服务器即可返回所请求的数据。可见,利用REST方式调用CIMISS资料,HTTP请求功能是关键。BCB6.0本身无现成的HTTP请求函数,为了能实现HTTP请求功能,需要利用WINDOWS API函数来开发实现该功能。WINDOWS 提 供 了 InternetOpen、InternetOpenUrl、InternetReadFile、InternetCloseHandle等 4个函数可以实现HTTP请求相关操作,其中InternetOpen用于建立网络连接,InternetOpenUrl用于打开网络资源,InternetReadFile用于读取服务器上的数据,InternetCloseHandle用于关闭已建立的网络连接。
利用上述4个API函数,我们可以自己设计一个HTTP请求函数,用于从服务器获取数据:首先建立网络连接,然后将HTTP请求串url发送到服务器打开网络资源,接着循环读取服务器发送回来的请求响应数据,直至完全读完数据,最后关闭网络连接,释放资源。HTTP请求函数流程图如图1所示,其完整代码如下:1
值得注意的是,上述自定义函数中在循环读取数据的时候,必须每次都要在得到的数据后加入字符串结束符‘\0’,否则将导致数据异常。利用上述函数,只要网络正常连接且输入的资源定位串(url)无误即可返回所请求的资源。例如,我们要获取百度的首页数据,调用 HttpRequest(“http://www.baidu.com”)即可。同样地,只要我们给出正确的MUSIC的REST接口调用资源定位串url,就可以获取相应的CIMISS数据。
有了自定义的HTTP请求函数,我们就可以实现对CIMISS平台的资料进行读取和处理。通过REST 方式获得的数据有 xml、json、jsonp、html、text等五种格式,获取数据后需要从相应格式转换为所需要的格式。下面给出BCB6.0编程的xml格式解码函数代码。
有了HTTP请求函数和xml解码函数,我们就可自如地调取和应用CIMISS数据了。下面以BCB6.0编程调用CIMISS地面气象实时资料为例,给出一个完整的调用例子:
需要注意的是,对于文件类的资料检索,需要进行两次HTTP请求,第一次请求得到文件名、文件格式、文件大小、文件下载地址等相关信息后,再次利用文件下载地址进行HTTP请求即可获得文件数据,将文件数据保存为指定的文件类型即可。
通过多种应用试验,证实基于Windows API编程的CIMISS数据调用方式具有代码简洁、运行稳定可靠、调取资料响应迅速等特点,可在业务系统中进行实际应用。
CIMISS提供了良好的数据环境,这为开发业务系统提供了便利条件。为了实现对灾害性天气进行自动监测预警,我们以基于Windows API的HTTP请求函数作为调用CIMISS资料的核心技术,开发了“灾害天气监测预警业务系统”,系统主界面如图2所示。该系统以CIMISS地面实时资料作为基础,实现对地面气象观测资料要素进行实时自动监测,当监测到降水、气温、风速、能见度等要素达到设定阈值时,自动通过电脑语音、字幕、手机短信等方式发出告警信息,弥补了预报员人工监测天气上的不足,对灾害性天气的监测和防御起到重要作用。该系统在业务运行中稳定可靠,发挥了较大的效益。这也证实了Windows API编程调用CIMISS资料进行业务应用是可行的。
图2 “灾害天气监测预警业务系统”主界面
本文从解决BCB6.0编程实现HTTP请求功能作为出发点,成功解决了BCB6.0对CIMISS气象资料的调用。其主要技术特点有:
(1)Windows API编程技术兼容性强,理论上所有基于Windows的编程语言都可支持此方案。
(2)采用基于Windows API编程方式实现对CIMISS资料调用,有效解决了MUSIC对BCB6.0等一些编程语言兼容性不太好的问题,为CIMISS资料应用提供了一种新的解决方案。
(3)基于 Windows API的HTTP请求代码简洁,稳定性好,容易搭建CIMISS应用架构,便于快速开发业务应用系统。
[1]季永华,孙超,刘一鸣,等.CIMISS中气象观测资料处理入库效率优化方法[J].气象科技,2017,45(1):29-34.
[2]熊劦,邓卫华,胡佳军,等.基于CIMISS的区域灾害性天气实时监测与报警系统的设计与实现 [J].气象科技,2017,45(3):453-458.
[3]熊安元,赵芳,王颖,等.全国综合气象信息共享系统的设计与实现[J].应用气象学报,2015,26(4):500-512.
[4]李志鹏,胡佳军,杨立苑,等.基于CIMISS的气象数据处理时效监视系统设计与实现 [J].气象与减灾研究,2016,39(4):309-113.
[5]王旻燕,邓莉,赵芳,等.CIMISS中气象卫星数据存储和服务模型[J].安徽农业科学,2012,40(8):4785-4789.
[6]王宏记,杨代才.基于CIMISS的长江流域气象水文信息共享系统设计与实现研究 [J].安徽农业科学,2014,42(32):11565-11570.
[7]杨润芝,马强,李德泉,等.内存转发模型在CIMISS数据收发系统中的应用[J].应用气象学报,2012,23(3):377-384.
[8]王祝先.黑龙江省CIMISS前端通信系统设计[J].黑龙江科学,2017,8(17):62-63.
[9]潘雪,董洋,杨英奎.基于CIMISS报文快速处理系统设计[J].现代化农业,2017,12:62-63.
[10]史彩霞,黎颖智,张许斌.基于CIMISS的广西气象服务信息综合业务系统的设计与实现[J].气象研究与应用,2016,37(4):82-85.
[11]刘波涛,冯翠丽.物联网应用中嵌入式HTTP协议的设计与实现[J].佳木斯大学学报(自然科学版),2011,29(5):713-718.
[12]吕浩勇,胡寅,张朝阳.一种基于HTTP协议的动态Web资源缓存机制及实现[J].黄冈师范学院学报,2014,34(6):65-66.
[13]王艳萍,张锐.在Delphi下用Windows API函数实现串行通信[J].宁夏工程技术,2003,2(2):141-143.
[14]隋永朋,魏振钢.Win32 Api函数的重要作用及调用[J].山东理工大学学报(自然科学版),200620 (6):97-99,102.
[15]AMARDEO C,SARMA,JG.Identitiesin the future lnternet of Things[J].Wireless Pers Commun 2009,49:353-363.
[16]Intemational Telecommunication Union UIT.ITU Internet Reports 2005:The Internet of Things[R].2005.
[17]国家气象信息中心.全国综合气象信息共享平台(CIMISS)总体设计总论卷[Z].2009.
[18]国家气象信息中心.全国综合气象信息共享平台(CIMISS)总体设计架构[Z].2011.