博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

应用程序获取Google搜索结果(一)

Posted on 2010-07-25 02:17  elric_wang  阅读(3464)  评论(0编辑  收藏  举报

      当我们需要了解一些信息是,可以通过Google、百度等搜索引擎来找到我们想要的信息,有时候还有意外的惊喜。同样,我们的应用程序有时候也需要从互联网上获取一些信息,这时候我们同样可以利用Google。

      Google提供给我们Ajax Search API,其主要目的是让建站人员能够利用JavaScript将Google搜索嵌入到自己的网页中,以便用户在访问我们的网页的同时也能耍耍他们的玩意。这个API也提供Java和Flash等支持,本文主要介绍在Java应用程序中如何利用Ajax API来获取Google搜索结果。有关Google Ajax Search API的详细内容,可以查看http://code.google.com/apis/ajaxsearch/documentation/

      所谓搜索,无非就是我们提交给Google一个关键词,然后Google服务器给我们返回它搜索的结果。因此我们只要解决两个问题,一是如何将我们要搜索的关键词告诉Google,另一个则是如何获取服务器的搜索结果,并分析这个结果,从而得到我们想要的信息。很显然,我们要先建立到服务器的网络连接,通过这个连接将关键词传送给服务器,同样是通过这个连接,获取服务器的响应,即搜索结果。Java提供了URLConnection类来实现到web服务器的连接,我们可以通过它来连接到一个URL,并且获取服务器返回的结果(包括静态的资源及服务器端动态处理结果)。关键是我们需要连接到谁呢?这就是Ajax Search API提供给我们的东东了。Ajax API提供给我们一个URL,这个URL有一些参数,我们只要将要搜索的关键词附加到这些参数中,然后建立到这个URL的连接,这是我们就向服务器发送了一个HTTP请求,服务器经处理后给出响应,响应的就是搜索结果了。这个URL的格式是:http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=XXX。你只要将"XXX”替换为你要搜索的关键词既可。再看第二个问题,如何获取搜索结果,如何分析这个结果以获取想要的信息。URLConnection提供给了我们如何获取服务器响应的方法(通过流来读取响应数据),通过这些方法我们可以读取响应结果,或得了响应结果后,我们如何“读懂”这个结果呢?这就牵涉到服务器是以什么样的形式为我们传送响应结果的。Ajax API返回的响应是一个JSON字符串,所谓JSON字符串,就是一个用于表达、传输、存储数据的一个格式化字符串,它是由一系列“名-值”对组成,其中“值”又可以是一系列“名-值”对。通过下面的例子你就能看懂JSON字符串是个什么玩意儿了:

{
     "firstName": "John",
     "lastName": "Smith",
     "age": 25,
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": "10021"
     },
     "phoneNumber": [
         { "type": "home", "number": "212 555-1234" },
         { "type": "fax", "number": "646 555-4567" }
     ]
}

 

Ajax API提供给我们的JSON字符串形式如下:

{"responseData": {
 "results": [
  {
   "GsearchResultClass": "GwebSearch",
   "unescapedUrl": "http://en.wikipedia.org/wiki/Paris_Hilton",
   "url": "http://en.wikipedia.org/wiki/Paris_Hilton",
   "visibleUrl": "en.wikipedia.org",
   "cacheUrl": "http://www.google.com/search?q\u003dcache:TwrPfhd22hYJ:en.wikipedia.org",
   "title": "\u003cb\u003eParis Hilton\u003c/b\u003e - Wikipedia, the free encyclopedia",
   "titleNoFormatting": "Paris Hilton - Wikipedia, the free encyclopedia",
   "content": "\[1\] In 2006, she released her debut album..."
  },
  {
   "GsearchResultClass": "GwebSearch",
   "unescapedUrl": "http://www.imdb.com/name/nm0385296/",
   "url": "http://www.imdb.com/name/nm0385296/",
   "visibleUrl": "www.imdb.com",
   "cacheUrl": "http://www.google.com/search?q\u003dcache:1i34KkqnsooJ:www.imdb.com",
   "title": "\u003cb\u003eParis Hilton\u003c/b\u003e",
   "titleNoFormatting": "Paris Hilton",
   "content": "Self: Zoolander. Socialite \u003cb\u003eParis Hilton\u003c/b\u003e..."
  },
  ...
 ],
 "cursor": {
  "pages": [
   { "start": "0", "label": 1 },
   { "start": "4", "label": 2 },
   { "start": "8", "label": 3 },
   { "start": "12","label": 4 }
  ],
  "estimatedResultCount": "59600000",
  "currentPageIndex": 0,
  "moreResultsUrl": "http://www.google.com/search?oe\u003dutf8\u0026ie\u003dutf8..."
 }
}
, "responseDetails": null, "responseStatus": 200}

      相信从上面JSON字符串,你已经猜到一些眉目了,这里面就包含了我们平时通过浏览器所看到的Google搜索结果中的内容。

      如何分析这个字符串呢?如何从里面提取出想要的信息呢?当然是利用现成的工具了,既然JSON提供了这种形式的表达数据的方法,那么它肯定提供了相应的parser(解析器)。相关类可以参考:http://www.json.org/java/index.html

      至此我们便得到了我们想要的搜索信息了,总结一下,大致流程是,通过URLConnection建立到http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=XXX(XXX指代你要搜索的关键词)的连接,然后获取响应结果,再用JSON的parser解析响应结果,提取所需信息。

技术博客已迁移至GitHub Pages,欢迎访问》》