基于百度接口的手机无广告浏览器设计

摘要

搜索工具在人们网络生活中扮演着重要的角色,在当今发达的信息时代,人们依靠各种各样的搜索工具来在网络上寻找所需要的资料,没有搜索工具,这些正确、有效的资源就没办法呈现在人们的眼前,因此,在搜索引擎发明之前可以称为网络的黑暗时期,只有可靠的搜索引擎发明出来之后,网络才引来光明,互联网时代才正真到来。网络爬虫技术实现了最原始的信息收集,对世界上各个角落的网页收集整理,利用一定的排序算法响应给用户请求的关键词就是搜索引擎[1]。由于搜索引擎的制作和运维十分不易,世界上能过成功设计出一款优良的搜索引擎的公司基本上都成了互联网公司中的巨擘。但是目前来讲,中国国内的几家搜索引擎在用户体验上来讲并不是太好,甚至还有害,不久前的魏则西事件,和令人发指的莆田系医院的竞价排名等,搜索引擎已经成为某些公司牟利的工具。在信息如此发达的时代,我想人们时刻都在渴望能出现一款具有优异的搜索功能,没有商业广告,商业推广,没有竞价排名,无绑定搜索的绿色人性化搜索工具。

本设计就是秉承这样一种理念展开的,由于时间和水平有限,本设计在百度搜索引擎的基础上剔除商业推广,广告,去除绑定搜索,并设计出一个良好的用户界面,和方便用户使用的个性化功能,给用户带来全新的搜索体验的安卓软件。

 

关键词:搜索引擎,个性化搜索工具,绿色索引

目录

第1章 绪论 

第2章 系统需求分析 

  2.1 系统功能需求 

  2.2 系统结构图和流程图 

  2.3 系统界面需求 

  2.4 系统性能需求 

第3章 详细设计和功能实现 

  3.1基于Android的个性化搜索系统界面的设计 

    3.1.1 主界面设计 

    3.1.2 搜索记录界面设计 

    3.1.3 搜索结果界面设计 

    3.1.4 网页浏览器界面设计 

  3.2 各模块详细设计 

    3.2.1 搜索记录和输入提示模块设计 

    3.2.2 调用百度搜索接口模块设计 

    3.2.3 数据筛选提取模块设计

    3.2.4 数据过滤去乱码模块设计 

    3.2.5 各模块详细设计 

第4章 软件测试 

  4.1 软件测试的环境 

  4.2 测试阶段 

  4.3 功能测试 

  4.4 测试结论 

第5章 总结与展望 

  5.1 总结 

  5.2 不足与展望 

附录

第一章 绪论

在今日的信息化时代,人们的生活离不开互联网,互联网离不开搜索工具,一款优良的搜索工具不仅是所有网民们的福利,也是创业的理想平台。就网络搜索而言,人们主流使用的是谷歌搜索引擎,百度和搜狗等搜索引擎。就中国大陆而言,由于谷歌退出了中国,国民们主要使用的搜索引擎就是百度。由于开发较早,百度渐渐积累大量用户,商业化后百度公司也投入大量资金形成了自己的技术壁垒,到今天百度依然成为国内一家独大的运维全球最大中文搜索引擎的公司。由于其用户量巨大,百度利用竞价排名和商业推广及商业广告获取巨大利润。但是这也渐渐违背了人们的意愿,减低用户的体验度不说,人们还被搜索出来的虚假信息误导造成人力物力的损失。

人们在一边指责百度不当行为的同时却有无奈的使用它,因为市面上没有比糟糕的百度更好的选择。本设计力求能设计出一款利用百度搜索引擎的庞大数据库资源,对其索引排名进行二次排序,剔除商业推广,商业广告,满足人们日常使用并且有不错体验的基于安卓搜索工具。

本设计的主要思路如下:

(1)利用百度提供的搜索接口获取百度数据库中对用户请求的关键词的响应数据,该数据是超文本语音HTML格式的,是一个网页,这个数据可以读取过来存储在本地内存中。但是这个数据对用户而言是不可读的,必须要对其进行解析才能得到有用的内容。本设计利用多个正则表达式对其进行遍历来获取有用信息,为了能得到最终提交给用户的简便有效的信息,还要对其进行多次去乱码,去重,同一个网页的标题、内容、图像等数据的匹配等操作。

(2)分析百度接口返回的数据中商业推广、商业广告和百度全家桶推广等插入进来的网页在数据流中与正确的响应关键字的网页的格式,找出两者的差异从而对商业推广、商业广告、百度全家桶过滤掉,最后滤出来的数据是我们所需要的绿色无推广无商业捆绑的数据。这些繁琐耗时的操作都要在后台线程中实现。

(3)现在有用的数据提取出来了,接下来怎么呈现给用户呢?为了优化搜索出来的结果的显示,本设计使用类似今日头条的布局风格,将每一条信息分为标题,内容和图片按一定布局放在listview中,将每条网页信息的网址放入lixtview的点击事件中去,在点击某一条目的时候用intent转到网页浏览页面,在该页面中使用webview实现网页的浏览。并且在搜索结果展示的界面实现下拉刷新和上拉加载更多功能以及搜索不到更多内容时进行提示等功能提高用户的体验度。

(4)搜索主界面的设计。在搜索框中,本设计利用数据库技术实现搜索记录功能和输入内容提示功能,在查看搜索记录页面可以看到用户以前搜索过的内容,点击某条搜索记录可以转到相应的网页。并且有删除历史记录功能。

以上是本设计的大致思路和主要实现手段,大致看来,主要有这几个部分是本设计的难点:一,获取到百度接口传过来的数据后使用正则表达式来过滤筛选有效信息,这就要求能够有一个正确有效,鲁棒性强且对百度接口所有数据都通用的正则表达式,这要求设计中参考对比大量的同类数据,反复修改表达式最后才能达到满意效果。二,进过筛选过滤后的信息条目应该是存放在一个list列表的一个个map键值对里面,将这些列表数据迭代提取出来依次放入listview里面还是不容易的,因为百度接口传回的数据复杂繁多,不可能用一个正则表达式就能把所需要的所有的信息提取出来,至少要使用三个或以上的正则表达式才能行,这样再把这些分别提取出来的信息放到listview里面去的时候就必须要保证信息是对应的,一个标题得对应正确的内容和正确的网络地址,否则就乱套了。三,数据库这块也是个难点,本设计不仅仅要求将用户的搜索记录保存在本地的数据库中,还要能够利用这个数据库在用户输入关键字的时候进行提示,这块是个比较大的综合问题后面的具体分析中再详述。

好了,经过一段时间的思考,本设计理论上基本已经成型,接下来就要具体实现了。

第二章 系统需求分析

2.1 系统功能需求

1)用户输入关键词进行搜索能够反馈给用户正确有用的信息。

2)反馈给用户的信息包括网页或网站的标题、内容简介和相关图片。

3)反馈给用户的信息来自百度的数据库,但是剔除了其中的广告、商业推广和百度全家桶等捆绑信息。

4)反馈回来的信息存放在listview中展示给用户,点击相应的条目可以转到相应的网页或网站。

5)用数据库技术实现搜索记录的功能,用户能够查看和清除自己的搜索记录。

6)用户能在输入关键词的时候,自动调用本地的搜索记录数据库对用户的输入进行提示。

2.2 系统结构图和流程图


图2-1  系统结构图

2.3 系统界面需求

1)包含搜索输入框,搜索按钮和记录按钮。

2)点击主界面的记录按钮跳转到搜索记录界面,该界面有清除搜索记录按钮和显示搜索记录的listview

3)点击主界面的搜索按钮跳转到搜索结果页面,该页面下有listview用来显示搜索结果条目,并且在该页面下下拉可以刷新,上拉可以加载更多。

4)点击搜索结果界面中的条目跳转到网页浏览器界面,该界面能够浏览网页。

2.4 系统性能需求

1)本设计通过百度接口获取一定量的数据,需要设备联网且有较好的网速。

2)本设计中对原始数据有大量的查找匹配替换等操作,原理上对设备系统性能需求不大,但是运算能力也不能过低。

第三章 详细设计和功能测试

3.1基于Android的个性化搜索系统界面的设计

3.1.1 主界面设计

主界面采用复古羊皮纸图片作为背景,凸显本设计的绿色人性化理念,人们使用时也可以减缓视觉疲劳。在主页面的最上方放置本设计的LOGO图片,由于本设计依托百度的数据库,所以LOGO围绕“无商业推广、广告”等来设计,最后简化为“无推百度”LOGO图片以百度的熊爪印为元素适当添加创意元素。

搜索和记录按钮做成毛玻璃半透明形式,字体颜色与背景颜色类似,整体效果看上去十分简约雅致。

图3-1  系统主界面

3.1.2 搜索记录界面设计

搜索记录界面与主界面有统一的风格,清除搜索记录按钮是半透明毛玻璃样式,搜索记录和搜索日期清除呈现,用户一目了然。


图3-2  搜索记录界面

3.1.3 搜索结果界面设计

搜索结果界面依旧采用统一的风格元素,搜索结果条目包含标题、内容简介和相关图片,有类似今日头条的风格又不失独特的视觉效果,各条目整齐排列,距离适当,图文配置上整体比较有条理。

网页标题采用深橘黄色的字体,与背景颜色相仿,比背景颜色要深,整个画面呈现的是暖色调,这样用户看起来会比较舒服。内容简介使用深藏蓝色,与背景和标题形成略微的冷暖对比,增强视觉效果。

同时,内容使用较小号的字体,让用户能够抓得住界面的重点在标题,使用户快速找到所需要的答案。


图3-3  搜索结果界面

3.1.4 网页浏览器界面设计

网页浏览器界面使用全屏的webview组件,没有多余杂物,让用户观看网页内容有最大的视角,这也符合本设计简约人性化的设计思路。


图3-4  网页浏览界面

3.2 各模块详细设计

3.2.1 搜索记录和输入提示模块

本设计需要存储用户的每次搜索记录,要将搜索记录保存在一个数据库文件中。由于本设计使用的数据库只需要记录用户的搜索记录和搜索时间,所以建立的数据库中只需要含有2个条目即可。

String sql1 = "CREATE TABLE history " + "(content VARCHAR PRIMARY KEY,searchTime VARCHAR)";

db.execSQL(sql1);

本设计建立的数据库名是“history”,有contentsearchTime两个条目。

输入提示模块比较复杂,本设计建立了一个可以自动提示输入继承自EditText的类H_AutoCompleteTextView在这里面定义了监控文本输入框的监听函数,一旦监测到文本框有内容变换立即调用这个方法,然后将输入框中的字符串获取过来在搜索记录数据库查询有无匹配项,如果找到有匹配上的内容就在输入框下面的listview中输出出来,从而实现输入提示功能。关键代码如下:

TextWatcher watcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mList.clear();
mList.addAll(getSimilarString(String.valueOf(s), memoryData));//将输入框中的内容与搜索记录数据库进行比较,并复制给mList
if (mList.size() > 0) {//如果匹配上了就让适配器加载新内容
mAdapter.notifyDataSetInvalidated();
//以下为Listview加载搜索记录的具体内容
int[] top = new int[2];
H_AutoCompleteTextView.this.getLocationInWindow(top);
layoutParams.topMargin = top[1] - 15;//设置组件位置
ayoutParams.leftMargin = top[0];
relativeLayout.addView(popView, layoutParams);
popView.setFocusable(true);//设置可选中
}

3.2.2 调用百度搜索接口模块

百度搜索接口是一个特定网址,在这个特定网址某一段插入要搜索的内容然后将整个网址用httpClinet进行网络请求就能得到响应的数据了。这个百度搜索接口如下:

"http://www.baidu.com/s?wd="+querry+"&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=3&rsv_sug=0&rsv_sug4=95&rsv_sug1=1&inputT=1001"

其中querry是要搜索的关键词,并且是URL编码后的字符串。以下是URLEncode代码段:

try {
querry = URLEncoder.encode(bundle.getString("str").toString(),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();}

3.2.3 数据筛选提取模块

这个模块是本设计的核心和亮度。本设计采用正则表达式来对海量的数据进行筛选过滤。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字。在此对正则表达式的知识就不过多赘述,下面只大致讲述其使用技巧:

首先找出要从元数据中提取有效信息所共有的部分,然后用“(.*?)”替代要提取的内容,然后将表达式中的引号进行转义,即在其前面加斜杠,换行也要转义,这样做是为了将其保存在字符串变量中进行匹配操作。之后多次测试精简正则表达式,最终得到最好的样式。

经过反复计算测试后,本设计使用了如下正则表达式:

1"\"title\":\"(.*?)\",\"url\":\"(.*?)\""用来提取百度接口数据库中不含商业推广、广告和百度全家桶等捆绑网站的网页标题和网址。

2"\">(.*?)</div><div class=\"f13\""用来提取百度接口数据库中的网页内容简介。

3"img class=\"c-img c-img6\" src=\"(.*?)\""用来提取百度接口数据库中的网页代表图片。

这三个正则表达式均能高效正确的提取所需要的有用信息,以第一个正则表达式为例提取信息的关键代码如下:

Pattern p_title = Pattern.compile(gettitle);
Matcher m_title = p_title.matcher(httpstring);
while (m_title.find()) {
Map<String, Object> mapt = new HashMap<String, Object>();
MatchResult mr_title = m_title.toMatchResult();
mapt.put("title", mr_title.group(1));
mapt.put("url", mr_title.group(2));
mapt.put("title_po", mr_title.start());
result_title.add(mapt);
}

可以看出这三个表达式提取出来后的数据存储在三个list列表里面,接下来就要对其进行相关匹配操作才能将正确的网址和内容跟标题对应上。以下以标题和内容相对应的代码片段:

for (int a = 0; a < result_title.size(); a++) {
for (int b = 0; b < result_content.size(); b++) {
int dd = Integer.parseInt(result_title.get(a).get("title_po")
.toString())
- Integer.parseInt(result_content.get(b)
.get("content_end").toString());
if (dd < 1000 && dd > 0) {
Map<String, Object> maptc = new HashMap<String, Object>();
maptc.put("title", result_title.get(a).get("title"));
maptc.put("url", result_title.get(a).get("url"));
maptc.put("content", result_content.get(b).get("content"));
maptc.put("end", result_content.get(b).get("content_po"));
result_title_content.add(maptc);
break;
}
}
}

这段代码的思想是计算每一片内容项与标题所在的位置,如果两者距离在01000个字符之间就是正确的配对数据。本设计对百度接口反馈回来的数据做了大量的研究比较后得出了这两个数据片只要是在01000个字符距离之间就可以绝对正确的匹配上。同理,图片和标题的匹配也采用同样的方法,字符距离的阈值依旧设置为01000

3.2.4 数据过滤去乱码模块

经过上一步的操作后得到的数据虽然是正确的信息,不包含商业推广、广告和捆绑网页,但是其中包含有大量的乱码,本设计继续大胆采用正则表达式对其进行去伪存真。本设计在这个模块使用的正则表达式是:"<(.*?)>""&(.*?);"去乱码操作中使用的关键代码如下:

while (rm.find()) {
MatchResult mrr = rm.toMatchResult();
qqString = qqString.replace("<" + mrr.group(1) + ">", "");
}

第4章  软件测试

     一款应用开发出来关键还是要看有没有漏洞,程序健不健壮,各个功能模块是否完善。因此在程序开发出来之后的软件测试是十分重要的,在这个过程中可以发现漏洞与不足从而进行修正使软件更完美。

4.1软件测试的环境

本设计中使用的软件测试环境为2种,一种是运行在电脑上的安卓模拟器环境,另一种是真机环境。在安卓模拟器中测试软件,主要是方便编程调试;真机环境下测试用来感受软件的上手体验度。

4.2 测试阶段

本设计在测试阶段发现了许许多多的漏洞和不足,在次我大致罗列一下测试阶段所遇到的问题和解决方案:

1)发现搜索结果中大量有效的内容没有出现在,甚至有的关键词搜索不出来东西,经过调试后发现,是数据筛选提取模块中对标题、内容和图片数据进行匹配时阈值不够准确导致。最后多次实验后把阈值定为01000,成功解决这个问题。

2)在搜索某些关键词时,发现在百度接口的第一页中提取出来的有用信息比较少的时候,在搜索结果界面只显示较少的那几个结果显得不够人性化。能不能在百度搜索第一页有用信息少时自动加载第二页呢?最后本设计成功实现在有用数据不足10条时自动继续加载下一页功能,这样就能保证搜索结果界面有足够多的条目。

3)在软件使用过程中偶尔发现软件闪退,经查明是在对搜索接口回馈的数据进行循环提取的时候程序无响应了,在循环语句中加入相应的try-catch语句后成功解决闪退问题。

4)测试过程中发现软件所占用的内存越来越大,拖累了软件的运行速度,之后在代码中为变量申请的内存空间在使用完之后进行内存释放操作从而解决这个问题。

4.3 功能测试

1)搜索记录数据库功能测试。本模块功能能够完好实现事先设计的内容,无卡顿和匹配不上的问题,搜索记录展示页面记录能够正常显示,点击相应的条目能够正常跳转,点击清除历史记录也能正常清除。

图4-1 搜索记录数据库功能测试

2)搜索功能测试。点击主界面的搜索按钮能够正常跳转到搜索结果界面,跳转时间跟测试环境的网速和搜索内容的热度有关,索要搜索的内容在百度数据库中有比较多的数据的话会有几秒的延迟,不过大部分情况下搜索速度与在百度搜索官方搜索工具下搜索没有太大差异。

3)搜索结果展示功能测试。本软件基本实现本设计所要求的格式布局,搜索结果条目排列清晰,间距适当,颜色效果和文字大小都比较让人满意。还有就是在显示条目中的图片是按照原图的大小来显示的,在条目中的文字和图片偶尔有不对应的情况,这部分尚无更好的解决办法。

图4-2 搜索结果展示功能测试 

4)真机环境测试。本软件使用的真机是小米5手机,安卓版本是6.0本设计使用的安卓依赖包是4.4.2的版本,高版本可以向下兼容,6.0版本中测试本软件没有任何问题。

经测试,在真机环境下运行速度比电脑上安卓模拟器快得多,页面的颜色和字体也更鲜艳。各个模块功能的测试同模拟器环境下一样没有出现异常。

4.4 测试结论

本设计经过真机和模拟环境的测试后,发现所预期的功能基本上都实现了,并且有较强的鲁棒性。本软件包括布局文件在内共有有2000多行代码,重复代码量很少,所用的图片等媒体资源所用内存也不大,因此整个软件只有1.43MB,用较少的代码实现强大的功能。

在总的测试来看,整体情况是十分稳定的,但是偶尔还是有页面无响应的情况。在程序中有不少对异常的捕获处,在这些地方都是可能发生异常的地方,不过由于有些异常在本设计中由于不清楚异常来源,比如在循环语句中莫名其妙的跑飞,对这样的异常本设计只是抛出该异常,并没有给出发生该异常时的具体处理办法,因此程序可能会在少数未知情况下会出错。

第5章  总结与展望

5.1  总结

本设计基本实现了一款没有广告、商业推广和绑定网页,界面简约,功能人性化,搜索高效的基于Android的搜索工具。由于时间仓促本设计只实现了在百度数据库里面提取搜索信息而没能把世界上各大优秀的搜索引擎整合过来,同时也没有对搜索内容进行再次的排序优化和接入用户的评价排序。这些功能在后续版本中再添加吧。

从整个课程设计来看取得的成果还是不错的,也学会了许多新的知识,巩固了安卓系统开发的技术。

本设计使用了不少的新颖的技术,比如下拉刷新和上拉加载更多。在参考许多网络上的开源代码和书籍资料之后,本设计才成功接入符合本设计要求的上下拉操作。除此之外还有输入提示功能也是本设计的一大开发重点。输入提示看上去是一个简单的功能,在真正实现的过程中却是不容易的。一开始甚至是无从下手,后来借鉴了网上的资料后才找到了头绪。诚然,本设计中只有这2个功能模块引用过网络上的资源包或代码段,其他所有功能及代码均是原创。

在市面上来看,本设计是首个剔除百度广告、商业推广和捆绑页面的安卓应用软件,在功能实现中利用正则表达式提取百度接口反馈回来的数据从而实现基于百度数据库的搜索工具也是原创设计。

本设计的开发过程中也不是一帆风顺的,在软件测试阶段遇到了大量的漏洞和错误,在查阅许多的书籍和网络资料后才一一解决。之后为了找出更多不易发现或容易忽视的漏洞,本设计交给多位用户上手体验测试,在用户们的反馈和建议中不断改进了本设计,最终实现了比较稳定的状态。

5.2 不足与展望

本设计理念是很好的,设计出来的结果也让人较为满意,但是不足的地方依然很多。

第一,本设计只提取了百度搜索的数据库,没有将世界上其他较好的搜索引擎接进来,同时在利用百度数据库时并没有完全将有用的网页全部提取出来,本设计搜索出来的结果在剔除了广告和商业推广之外同时也遗漏了不少有用网页,这是使用正则表达式的弊端,当然由于没有建立自己的搜索数据库这样的弊端是避免不了的。在以后版本的发展中应当把世界各个优良的搜索引擎整合进来,同时用更好的排序算法将其提交给客户端。

第二,本设计没有加入用户评价排序算法,由于百度搜索引擎的技术优势已经形成国内一家独大的局面,利用百度搜索引擎的原有排序是最好的考虑,但是百度的搜索引擎依旧是不够完善和先进的,甚至世界上最优秀的谷歌搜索引擎目前也面临着搜索技术已然落后时代的问题。用户评价排诉是进一步优化搜索排名的有效途径,其思想是在用户搜索某一个关键词后用户在浏览各个答案后找到其最满意的答案,并且给提供这个答案的网页打分。服务器记录下用户搜索的关键词和对某个网页的评分。经过大量用户的使用后将会产生一个十分有价值的关键词——网页——分数表格数据库,在搜索工具中将这个数据库和原有的排序综合起来生成新的排序将会是更完美的搜索工具。

第三,本设计看似简约,实则是简陋,界面效果也没有太多亮点,软件的可操作性也比较低,扩展功能和用户登录功能都没有实现,这些在后续版本中要加以考虑。

附录

无推搜索致力于剔除商业广告,商业推广,软件公司全家桶;优化搜索算法;整合世界优秀搜索引擎并综合用户评价进行搜索排名;为大众打造一款轻便高效绿色无污染的搜索工具而努力目前版本仅整合百度。
本人真是被无良百度的竞价排名恶心到了,又无奈国内没有更好的搜索工具可供使用,百度在搜索方面还是最适合国人的,为了防止魏则西事件再次发生,本人希望国内代码高手可以一起来开发出一款整合世界各大优秀搜索引擎,剔除广告,竞价排名等垃圾,打造一款正真优秀的全面搜索工具。
为推动无推搜索的发展,我将现在版本的无推搜索完全开源。
欢迎与我交流。

基于百度接口的手机无广告浏览器apk下载




©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页