基于Android的商品比价系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Android的商品比价系统的设计与实现作者:宋永生
来源:《电脑知识与技术》2011年第18期
摘要:人们在实体店购物时,为了比较商品的价格,通常需要记下商品的信息,然后到网店中或者到附近其他实体店中查看该商品的价格信息,费时费力。
为了解决这个问题,该文在Android开源手机平台的基础上,设计并实现了商品比价系统,让用户可以随时随地的了解到该商品在不同店中的价格信息,方便快捷。
关键词:网店;实体店;Android;商品;比价
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)18-4359-03
Design and Implementation of the System for Comparing Price of Goods Based on Android
SONG Yong-sheng
(Nantong Textile Vocational Technology College, Nantong 226007, China)
Abstract: In order to compare price of the goods, People usually have to keep in mind of the information of goods in the solid shop, and then look over the price of the goods in network shop and solid shop which is not far. It’s laborious. To solve this problem, the a uthor designed and implemented a system for comparing price of goods based on Android which is an open source handset system. The system for comparing price of goods can help people learn the price of the goods in different shops in time, which is convenient and efficient.
Key words: network shop; solid shop; android; goods; compare price
人们在实体店里看到喜爱的商品时,通常很想知道该商品网上的价格是多少,附近其他实体店中的价格是多少,为了进行比价,需要记下该商品的规格信息,然后到网上搜索或到附近其他实体店里查看该商品的信息,以确定从哪个渠道购买该商品更划算,这样费时费力。
Android是Google于2007年底发布的基于Linux内核的开源手机操作系统[1],得到了业界众多公司的青睐和大力支持,发展迅速,搭载Android的手机市场占有率日益攀升。
Android 平台由应用程序、应用程序框架、Android运行时、库以及Linux内核共5个部分构成[2]。
本文在Android手机平台的基础上,设计并实现了商品比价系统,通过扫描商品的条形码,即可得到该商品网上的价格及附近实体店中的价格,辅助用户在购物过程中进行决策,方便实用。
1 系统总体架构
本系统采用Java语言开发,开发环境为Eclipse 3.6,JDK 1.6,Google APIs 8(其中包括Android和Google Map的API包),Zxing 1.6,Ksoap2-Android 2.5.4,Axis2 1.5.3,Heritrix 1.14.4和HTMLParser 2.0,数据库采用Mysql 5.1,Web应用服务器采用Tomcat 6.0。
系统分为三大功能模块:Android客户端模块,WebService服务器端模块和网店商品信息采集模块。
1.1 Android客户端模块
Android客户端模块主要包括:实体店商品信息采集,商品比价和商品信息收藏三个子模块。
实体店商品信息采集子模块,主要供用户采集实体店中商品的条码、价格、店名等信息,用户可以对商品进行评价,系统同时会自动采集商品所在位置和采集时间等信息。
Android手机会将这些信息存入商品信息库。
作为回馈,用户可以得到该商品在网店及附近实体店中的价格信息。
比价子模块就是帮助用户比较该商品在网店及附近实体店中的价格,以确定从哪个渠道购买更划算。
收藏子模块就是在比价之后,用户可以将感兴趣的商品信息收藏到比价系统的收藏夹中,以备将来购买。
用户可以对收藏夹中的信息进行管理。
1.2 WebService服务器端模块
WebService服务器端模块主要包括: WebService服务提供和商品信息库两个子模块。
WebService服务提供子模块就是将商品价格信息类的商品信息查询和更新方法映射成WebService,供Android手机客户端通过SOAP协议进行调用。
商品信息库子模块主要包括商品基本信息表(主要包含条码、商品名、商品规格、厂家等字段),商家表(主要包括店名、店主、店址、URL地址、联系电话等字段)和商品价格信息表(主要包括条码、价格、卖家、客户评价、价格采集地点和采集日期等字段);
1.3 网店商品信息采集模块
网店商品价格采集模块主要包括:调用开放API采集商品信息,网页抓取,原始网页库和网页分析四个子模块。
对于开放了API的购物网站,可以通过编程调用相应的API,采集网店中的商品信息,将其存入商品信息库;对于未开放API的购物网站,可以通过网络爬虫抓取包含商品信息的网页,将这些网页存入原始网页库,然后对这些网页进行分析,将分析得到的商品信息存入商品信息库。
系统的总体架构如图1所示。
2 相关技术
2.1 条码扫描
条码的应用十分广泛。
ZXing是一个开源的Java类库,用于解析多种格式的1D/2D条形码,目标是能够对QR Code,Data Matrix,UPC的1D条码进行解码。
其提供了多种平台下的客户端,包括J2ME,J2SE和Android。
在条码扫描过程中,要发挥Zxing的最佳性能,手机的像素必须要高,并支持JSR-234标准,可以自动对焦。
在本文的应用中,在Android手机上安装Zxing软件,通过Intent调用Zxing扫描条码的Activity,将扫描的结果返回给本文的Activity。
2.2 WebService的构建和调用
WebService是一种基于SOAP协议的远程调用标准。
通过WebService可以将不同的操作系统平台,不同语言,不同技术整合到一起[3]。
采用WebService的好处是,可以保证不同操作系统的智能手机与服务器端进行通信,有利于系统的扩展。
WebService可以采用Apache组织的Axis2进行构建。
Apache Axis2是Axis的后继版本,是新一代的WebService引擎[4]。
首先编写商品价格信息的java类,然后将Java类及其字节码文件、services.xml部署到由Tomcat 和Axis2构成的WebService容器中,Java类就被映射成了WebService。
Ksoap2-Android是Android平台上一个高效、轻量级的SOAP开发包。
通过Ksoap2-Android开发包,可以在Android手机上远程调用WebService的方法。
2.3 商品信息的采集
商品信息存放在服务器端的数据库中。
为了保证实体店里商品的价格最新最全,采用先报价再询价的模式。
用户在扫描了商品的条码后,填写店名、商品的价格等信息,系统将这些信息及自动采集的商品(用户)所在位置,信息采集时间等发往服务器端,存入商品信息数据库。
对于开放API的购物网站,调用相应的API采集网店中的商品信息,存入商品信息库。
对于未开放API的购物网站,则采用网络爬虫抓取网页进行分析的方式采集网店中的商品信息。
Heritrix是一个由Java开发的、开源的Web网络爬虫,用户可以使用它从网络上抓取想要的资源[5],通过扩展它的组件,抓取相关的商品网页信息,存入原始网页库,采用HTMLParser解析这些网页,将得到的商品的信息存入商品信息数据库,保证商品信息数据库定期更新。
2.4 实体店中商品信息的地图显示
在Android手机上使用地图,可以采用Google的MapView。
在使用MapView之前必须为当期那的应用程序签名的密钥生成一个MD5指纹,然后利用此MD5指纹在Google生成Map API密钥的网站上生成一个所有用此密钥签名的应用程序通用的Map API密钥[2]。
查询用户周围实体店中该商品的价格时,服务器端如何快速确定用户当前位置周围销售该种商品的实体店,直接影响着系统的效率。
本文采用格网技术,将地表用更密集的经纬网进行划分,相邻两根经线的经度之差为0.01°,相邻两根纬线的纬度之差为0.01°。
用户当前所在位置(图2中黑点)的经度为lon,纬度为lat,那么所在格网单元(图2中的灰色的格网单元)的坐标为(lon/0.01°,lat/0.01°)。
搜索该格网单元及周围8个相邻格网单元(3×3分析窗口)中的实体店中该商品的价格信息,如果3×3分析窗口中存在该商品,则停止搜索并将这些实体店中该商品信息返回给客户端,否则分析窗口扩大为(3×3)n(,n初值为2,每扩大一次搜索范围n自动加1),同时缩小地图的放大倍数。
搜索到其他实体店中该商品的信息或n>5时(搜索范围过大,失去实际应用价值),停止搜索。
在搜索过程中,要注意边界效应,本文采用补0延拓的方法处理边界效应。
通过重写Overlay类中的draw方法,将搜索到的周围实体店中该商品价格信息显示在地图上。
代码如下:
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
if (shadow == false) {
try {
Projection projection = mapView.getProjection();
for (int i = 0; i < this.items.size(); i++) {
Point p = new Point();
projection.toPixels(this.items.get(i).getPoint(), p);
Paint paint = new Paint();
paint.setARGB(255, 255, 0, 0);
paint.setAntiAlias(true);
canvas.drawText(this.items.get(i).getTitle(), p.x, p.y, paint);
}
} catch (Exception e) {
Log.v("myandroid", " " + e.toString());
}
super.draw(canvas, mapView, shadow);
}
}
通过调用MyLocationOverlay类的enableMyLocation方法,用闪烁的蓝点表示用户当前所在的位置。
2.5 商品信息收藏
收藏夹中的商品信息存储在Android手机上的SQLite数据库中。
SQLite[1-3]是Android所带的一个标准数据库,它支持SQL语句,是一个轻量级的嵌入式数据库,可以对数据库中的数据进行增加,删除,修改和查询等操作。
将列表组件ListView与SQLite数据库中的商品信息表进行绑定,用ListView展示收藏夹中的商品信息。
3 实验分析
实验环境为HTCWildfireA3333,CPU 高通 MSM7225 528MHz,内存384MB,系统为Android 2.2,摄像头500万像素,可以自动对焦,具有GPS导航功能,主屏3.2英寸,分辨率为240×320像素。
将应用程序进行签名分发,利用91手机助手将Zxing及比价系统的安装到Android手机上。
在南通市区以购买美的FS40-10L型号风扇为例进行实验。
运行比价系统,将手机的摄像头对准商品的条码进行扫描,然后录入店名和商品价格信息。
选择网上比价,即可得到该商品在不同购物网站上的价格信息(图3所示,网店按商品价格从低到高进行排列);选择实体店比价,即可得到附近实体店中该商品的价格信息(图4所示)。
点击查看商品的详细信息(图5所示),选择出最实惠的购物网店或实体店,可以将商品信息收藏到用户的收藏夹中。
对于网店,可以直接点击网店链接地址进行购买;对于实体店,可以直接拨打系统提供的商家电话,咨询商品详细信息。
图3 网上比价图4 周围实体店比价图5 实体店中商品详细信息
由此可见,用户在购物过程中,商品比价系统可以随时随地为用户提供商品在网店和周围实体店中的价格及客户评价等信息,辅助用户进行决策,让用户可以在较短的时间内选择出较好的购物途径,节省时间和金钱。
4 结束语
本文在Android开放手机平台的基础上,设计并实现了商品比价系统,用户在购物过程中,只需用Android手机摄像头扫描商品的条码,录入商品的信息,即可得到该商品的网上价格及附近实体店中的价格信息,帮助用户快速的选择出合适的购物途径,简单实用,有着广阔的市场空间。
在其他操作系统的智能手机及PC上调用本文的WebService进行商品比价是下一步的研究工作。
参考文献:
[1] Google Android official website[EB/OL].(2010-11-30)..
[2] E2ECloud工作室.深入浅出Google Android[M].北京:人民邮电出版社,2009.
[3] 李宁.Android/Ophone开发完全讲义[M].北京:中国水利水电出版社,2010.
[4] The Apache Software Foundation.Welcome to Apache Axis2/Java[EB/OL].(2010-12-23)./axis2/java/core/index.html.
[5] 白坤,耿国华.基于Lucene/Heritrix的垂直搜索引擎的研究与应用[J].计算机应用与软件,2009,26(1):212-215,247.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。