基于网页数据提取的灌溉监控Android客户端系统
2014-07-12周刚
周刚
(四川理工学院计算机学院,四川自贡643000)
基于网页数据提取的灌溉监控Android客户端系统
周刚
(四川理工学院计算机学院,四川自贡643000)
为了解决移动灌溉监控中用户体验不佳,达不到良好移动监控效果的问题,提出并设计了基于Android平台的灌溉监控客户端系统。所设计系统规避了网站无数据接口的问题,采用数据间接访问方式实现数据获取。给出了数据获取原理,分析了Android灌溉监控客户端功能,并给出实现的具体方法。经过测试表明,系统具有良好的用户体验,满足了移动灌溉监控的需要,具有良好的实用价值和推广价值。
网页数据提取;Android;灌溉监控;客户端
随着计算机网络技术和无线通信技术的发展,远程智能灌溉已经广泛的应用于温室种植、城市绿地节水灌溉,实现了现场的无人值守,同时,随着Android智能手机的普及,用户也多了一种远程监控的方式,即移动监控。然而,虽然用户可以通过手机浏览器来对灌溉监控网站进行访问,但在实际使用中由于手机屏幕大小受限,灌溉监控网页元素过多,会导致用户体验不佳,达不到良好的移动监控效果,这也正是为什么要定制新浪微博、淘宝等Android客户端软件的原因[1]。
鉴于此,提出了基于Android平台的灌溉监控客户端系统。系统不仅要实现用户在有网络通信的情况下,随时随地对现场情况进行监控,还要具有良好的用户体验,做到真正的无人值守远程监控。
1 Android客户端软件的开发模式
基于Android平台的灌溉监控客户端系统属于网站客户端软件,这类软件最突出的特点就是,先有网站再有客户端软件,通过手机客户端软件来改善用户体验。目前大多Android网站客户端开发是通过服务端开放相应的数据API接口,经过OAuth认证授权,来获取数据库后台数据,一般是一些面向公众的平台,如:豆瓣网、腾讯微博等[2_3]。
本文中的远程灌溉监控网站在开发时没有开发服务端的任何数据接口,同时为保证后台数据库服务器的安全,限制了访问权限,因此不能直接从网站数据库获取数据。然而对于灌溉监控Android客户端而言,监控网页中显示的数据才具有实际意义,因此我们可以从网页中把需要的数据提取出来,只要网页中能看到的数据,客户端都能获取到。即基于网页数据提取的Android客户端开发模式。
网页数据提取,其实质是对数据库的间接访问。其原理是在Android客户端模拟浏览器执行POST或GET请求,通过对服务器返回的嵌套了返回数据的静态html页面进行解析,提取指定标签的数据,对应显示到Android客户端。
2 灌溉监控Android客户端分析设计
图1所示为灌溉监控系统网站的主页面。
图1灌溉监控系统主页面
从该页面可以看出灌溉监控系统主要实现监控点数据的查询、监控时间间隔设置、数据的实时刷新、工作模式设定(手动/自动)、电磁阀开关设定、土壤水分上下限设定。在Android客户端设计上,由于智能手机屏幕大小受限,为了达到良好的用户体验,我们把最重要的、常用的关键功能提取出来,舍去一些不常用的功能,进行简化设计,如时间间隔设置和土壤水分上下限设定一般是固定的,因此可以省略,以节约屏幕空间;另灌溉监控客户端主要关心实时数据的变化,以及由此产生的相应控制操作,因此对于历史数据的查询意义不大。固在监控客户端设计上主要实现实时数据的报警,以及相应的控制功能和工作模式的设定。通过前文分析,对于实时数据的监测其本质是实现网页数据的实时提取,因此灌溉监控Android客户端的核心是如何从服务器返回的静态页面中提取请求返回的数据。
2.1 监控数据提取流程分析
监控数据提取流程如图2所示。
首先根据目标地址实例化POST或GET方法来模拟浏览器执行POST或GET请求,其目标地址即为图1所示网页的地址;然后为请求添加相应的键值对,如图1中的地点选择下拉选项、工作模式选择和电磁阀开关控制,设定好以后,进行提交,WEB服务器响应返回包裹了请求数据的一个静态html页面,页面中监测数据是用table标签的单元格来显示,即查询返回的数据包裹在html页面中的td标签里。html页面其本质可以看作是由字符流组成,因此转化成对字符流解析操作。
解析工作借助于JsouP。JsouP是一个Java开源html解析器(来自org.jsouP包)[4_5],支持Document类,一个Document又由elements组成,可以在Document中通过它的select方法获取指定的elements,如在html代码中查找以“tr”开头的标签,通过document.select(“tr”)来完成,找到后以elements数据类型进行保存,形成tr元素群,通过元素群进行进一步的数据解析,如在tr元素群中,查找指定表格行的单元格,通过elements的get()方法和select()方法来完成,实例如:trs.get(i+2). select(“td”),即从每个tr中选出td标签元素群,最后通过elements的html()方法来获取指定标签括起来的内容,这样就完成了数据的解析。
图2网页数据获取流程图
2.2 灌溉监控Android客户端功能设计
灌溉监控Android客户端分为控制页面和数据监控页面以及报警控制。控制页面包括工作模式的设定和电磁阀的开关控制,这些操作是一次性请求,没有返回数据,直接通过无线网络对现场控制设备进行控制,由相应的嵌入控制程序来完成。
数据监控页面负责实时的展示现场数据,是一个动态的、实时的数据读取过程,即要求Android客户端根据监测频率重复的模拟浏览器POST或GET操作,因此把数据读取做成Service形式,在Android后台运行[3]。监控页面只负责数据的显示。
报警控制用于土壤水分传感器数据超限时,模拟启动电磁阀开关,无需界面展示,而是以消息窗的形式进行提示,数据超限监控也是实时、动态的,在后台运行,故也做成Android的Service。
3 灌溉监控Android客户端实现
从前面的分析中,可以得知灌溉监控Android客户端的核心是网页数据获取并解析的过程,因此只要完成这一过程,客户端系统就已基本实现。开发过程中,开发工具选用EcliPse3.5+JDK1.6+SDK+ADT,开发平台选用Android2.2版本,并借助HtmlWatchhtml代码观察器来辅助开发[6]。
实现过程划分为两步进行:第一步,模拟浏览器执行POST或GET请求;第二步,数据解析与显示。
3.1POST或GET请求实现
模拟浏览器POST或GET请求通过HttPClient类来实现,实现中导入HttPClient的4个包:commons-co_ dec、commons-httPclient、commons-logging、log4j[7]。首先实例化一个HttPClient对象,设置Host地址和端口号,即请求页面地址,用目标地址实例化一个POST或GET方法,写出所需要的键值对,如:地点选择,然后调用HttPClient实例对象的executeMethod方法,提交POST或GET方法,返回的html以流的形式读入,存放在一个buffer缓冲字节数组中,格式化String类型保存,最后释放连接。示例代码如下:
//例化HttPClient
HttPClientclient=newHttPClient();
//设置Host地址端口是S0
client.getHostConfiguration().setHost(“httP:// ggjkxt.com”,S0);
//用目标地址实例一个POST方法
PostMethodPost=newPostMethod(“httP://ggjkxt. com/IlaswebBib”)
//将需要的键值对写出来
NameValuePairsubmit=newNameValuePair(“submit”,“刷新数据”));
NameValuePairvName=newNameValuePair(“v_ name”,“0”);
//给POST方法加入上述键值对
Post.setRequestBody(newNameValuePair[]{submit,vName});
//执行POST方法
client.executeMethod(Post);
//将POST返回的数据以流的形式读入,再把输入流流至一个buff缓冲字节数组
//StreamTool类是自己写的一个工具类,用于数据流读取
byte[]buff=StreamTool.readInPutStream(Post. getResPonseBodyAsStream());
//将返回的内容格式化为String存在html中
Stringhtml=newString(buff);
//任务完成,释放连接
Post.releaseConnection();
将该段代码功能复制到Service的执行方法中,设定Service监控频率即可。
3.2 数据解析与显示
在客户端采用ListView(列表组件)来呈现数据,客户端数据显示界面如图3示。
ListView中的数据由AdaPter(适配器)提供,AdaPter需要传一个特殊容器(包含HashMaP的ArrayList),解析得到的数据就存放在这个ArrayList(数组列表)的HashMaP中,HashMaP是Android中的一种数据类型,用于存放键值对,如在该系统中的土壤水分含量数据。HashMaP构建好后,将其绑定到ArrayList,最后通过Li_ stView来显示[S]。示例代码如下:
List>list=newArrayList>();
//将html转化成Document
图3客户端数据显示界面图
Document document=JsouP.Parse(htm l);
//选择”tr”开头的标签,存入trs元素群中
Elements trs=document.select(“tr”);
//得到整个HTML中包含tr的标签的个数
int total Trs=trs.size();
if(total Trs>0)
for(int i=0;i<total Trs;i++)
{
//从每个tr中选出td标签元素群
Elements tds=trs.get(i).select(“td”);
//得到每个tr中td的个数
int total Tds=tds.size();
//临时的Hash MaP,里面是String-Object键值对
MaPmaP=new Hash MaP();
//j是一个标识数
for(int j=0;j<total Tds;j++)
{
switch(j){
//html()方法得到标签括起来的内容
case 0:
maP.Put(“ad_name”,tds.get(j).html().to String());
break;
case 1:
//获取土壤水分数据
maP.Put(“water”,tds.get(j).html().to String());
MaP里即为存放的提取土壤水分含量等数据。
4 系统测试
灌溉监控Android客户端是一个具有时效性的系统,与原有灌溉监控网站相比,采用的是无线传输网络(Wifi或移动通信),这里对数据监控的时效性与原有网站的时效性进行对比测试,采用不同型号的Android手机分别基于Wifi和移动通信两种通信方式来进行测试,测试结果见表1。
表1各手机参数与延时对比
从测试结果来看,在Wifi通信情况下,较高性能的手机产生的数据刷新延时比低配置手机略小,这主要受制于手机硬件本身;另采用Wifi通信的方式略好于移动通信方式,这主要是移动通信方式信号不稳所致。总体情况来看,其延时都在几秒之内,对于灌溉监控这种实时性要求不高(采集频率一般以小时计算)的系统,在实际使用中基本没有影响。
5 结束语
灌溉监控Android客户端系统,通过网页数据提取的方式规避了原监控网站无API数据接口的问题,满足了灌溉监控移动办公需要,取缔了远程无人值守,其具体的实现过程具有一定的借鉴意义。良好的用户体验和较高的时效性,使得灌溉监控更具有时效性和便捷性,具有很大的实用价值。
[1]汪永松.Android平台开发之旅[M].北京:机械工业出版社,2010.
[2]李兴华.名师讲坛:Android开发实战经典[M].北京:清华大学出版社,2011.
[3]李刚.疯狂Android讲义[M].北京:电子工业出版社,2011.
[4]吴建华,徐浩,丁月华.移动网络手机实时监控系统的设计与实现[J].计算机工程与设计,2010,31(10): 2196_2198.
[5]Bailey J.Live video streaming from Android_enabled devices to Web browsers[D].Florida,USA:University of South Florida,2011.
[6]周刚,王小玲.气田移动监测系统的设计与实现[J].四川理工学院学报:自然科学版,2013,26(1):43_46.
[7]闫伟,叶建栲.多线程技术在Android手机开发中的应用[J].信息通讯,2012(1):46_47.
[8]贾文杰,孙志峰.基于Android平台的智能导游系统[J].机电工程,2011,28(10):1257_1259.
Irrigation Monitoring Android Client System Based on Webpage Data Acquisition
ZHOU Gang
(School of ComPuter Science,Sichuan University of Science&Engineering,Zigong 643000,China)
In order to resolve the Problem of Poor user exPeriencewhichmakes themobilemonitoring effect satisfied not better in mobile irrigationmonitoring,an irrigationmonitoring client system based on android is ProPosed and then designed. The designed system avoids the Problem that have no data interface in existing website,and acquires data by using indirect ways of access to data.The theory of data acquisition is given,the function of android irrigation monitoring client system is analysed,and the concrete realizationmethod is Produced.According to a system test,the system has good user exPerience,meets the needs ofmobile irrigation monitoring,and has good Practical value and Promotional value.
WebPage data acquisition;Android;irrigation monitoring;client
TP311.52
A
1673_1549(2014)02_0051_05
10.11863/j.suse.2014.02.11
2013_10_29
人工智能四川省重点实验室开放基金项目(2012RYY01)
周刚(197S_),男,四川南充人,讲师,硕士,主要从事人工智能与移动应用方面的研究,(E_mail)tanker197S@126.com