使用Google的Web Service
2024-07-21 02:21:20
供稿:网友
 
一、简介 
google搜索引擎提供了基于soap的web service。这意味着不同的开发语言、开发环境都能够使用这种服务,另外,google为了简化java程序员的开发,它还提供了一套java api接口,用于访问web serivce,这使得开发一套支持google搜索功能的程序变得十分容易。开发人员可以将google的搜索功能嵌入到他们的应用程序当中。本文将介绍如何使用这些java api,以及如何使用google的web service。 
目前,google的api还是处于beta测试阶段,因此,在api的使用上还有一些限制。例如,使用这些api需要申请一个帐号。对于免费申请的帐号,为了防止开发人员不正当的使用,限制每个帐号、每天最多只能查询1000次。目前,google还没有提出正式的运营模式和收费方式。 
google api目前主要提供三种服务,分别如下: 
1)搜索服务。用户提交一个搜索内容请求,google服务器将查找超过20亿的网页内容,并且将满足用户需求的目标返回给用户,一般来说这种处理只需要几秒的时间。 
2)缓存服务(cache)。用户提交一个url,google服务器将返回搜索器访问该url的最新记录。这样,用户很容易复用google的搜索成果。 
3)拼写检查。该功能用于检查用户的查询请求是否有效。用户提交一个检查内容,google服务器将返回有效的、最接近该内容的查询请求,返回的查询请求将符合google的查询规则。 
二、相关准备工作 
为了开发基于java的程序,我们需要作如下准备工作。 
1)建立java开发环境,java sdk 1.3.1 或更新的版本。相关地址http:.//java.sun.com/j2se 
2)下载google api的jar文件,googleapi.jar。开发人员可以到http://www.google.com/apis下载。 
3)申请google访问帐号,目前google支持免费申请的方式,用户需要使用一个email帐号来获取新帐号。注意,目前免费帐号支持每天1000条的最大查询量。申请地址:http://www.google.com/apis。 
4)(可选) 如果用户需要通过java程序直接发送soap请求,开发人员需要下载相关的java 软件包,jaxm。下载地址:http://java.sun.com/xml 
三、soap的使用 
google提供了基于soap的web service,因此用户可以向google服务器提交soap的查询请求,而后google服务器将处理这些请求,并返回soap格式的查询结果。以下就是一个查询请求和查询结果。 
查询:例如,有一个查询请求,请求类型为搜索,查询的内容为“world cup”,帐号为“123456789”,如下为该查询的一个例子。 
<?xml version='1.0' encoding='utf-8'?> 
<soap-env:envelope 
xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/1999/xmlschema-instance" 
xmlns:xsd="http://www.w3.org/1999/xmlschema"> 
<soap-env:body> 
<ns1: dogooglesearch xmlns:ns1="urn:googlesearch" 
soap-env:encodingstyle= 
"http://schemas.xmlsoap.org/soap/encoding/"> 
<key xsi:type="xsd:string">123456789</key> 
<q xsi:type="xsd:string">"world cup"</q> 
<start xsi:type="xsd:int">0</start> 
<maxresults xsi:type="xsd:int">10</maxresults> 
<filter xsi:type="xsd:boolean">true</filter> 
<restrict xsi:type="xsd:string"></restrict> 
<safesearch xsi:type="xsd:boolean">false</safesearch> 
<lr xsi:type="xsd:string"></lr> 
<ie xsi:type="xsd:string">latin1</ie> 
<oe xsi:type="xsd:string">latin1</oe> 
</ns1: dogooglesearch > 
</soap-env:body> 
</soap-env:envelope> 
查询结果:如果我们执行以上查询,可以得到如下的查询结果。其中,查询结果总共有约2660000记录,使用时间为0.125012秒。item标记代表一条查询结果,在第一条查询结果中,网站的url为http://www.fifaworldcup.com。本例子仅仅列举了一条查询结果。 
<?xml version="1.0" encoding="utf-8"?> 
<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/1999/xmlschema-instance" 
xmlns:xsd="http://www.w3.org/1999/xmlschema"> 
<soap-env:body> 
<ns1:dogooglesearchresponse 
xmlns:ns1="urn:googlesearch" 
soap-env:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"> 
<return xsi:type="ns1:googlesearchresult"> 
<documentfiltering xsi:type="xsd:boolean">false</documentfiltering> 
<estimatedtotalresultscount xsi:type="xsd:int"> 
2660000</estimatedtotalresultscount> 
<directorycategories 
xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/" 
xsi:type="ns2:array" 
ns2:arraytype="ns1:directorycategory[0]"> 
</directorycategories> 
<searchtime xsi:type="xsd:double">0.125012</searchtime> 
<resultelements 
xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" 
xsi:type="ns3:array" ns3:arraytype="ns1:resultelement[10]"> 
<item xsi:type="ns1:resultelement"> 
<cachedsize xsi:type="xsd:string">10k</cachedsize> 
<hostname xsi:type="xsd:string"/> 
<snippet xsi:type="xsd:string"></snippet> 
<directorycategory xsi:type="ns1:directorycategory"> 
<specialencoding xsi:type="xsd:string"/> 
</directorycategory> 
<relatedinformationpresent xsi:type="xsd:boolean"> 
true 
</relatedinformationpresent> 
<summary xsi:type="xsd:string"> 
the official site from fifa, made by yahoo. daily news updates and loads of relevant information. 
</summary> 
<url xsi:type="xsd:string"> 
http://www.fifaworldcup.com 
</url> 
<title xsi:type="xsd:string"> 
2002 fifa <b>world</b>b>cup</b>(tm) 
</title> 
</item> 
... 
</resultelements> 
<endindex xsi:type="xsd:int">10</endindex> 
<searchtips xsi:type="xsd:string"/> 
<searchcomments xsi:type="xsd:string"/> 
<startindex xsi:type="xsd:int">1</startindex> 
<estimateisexact xsi:type="xsd:boolean">false</estimateisexact> 
<searchquery xsi:type="xsd:string"> 
"science fiction" 
</searchquery> 
</return> 
</ns1:dogooglesearchresponse> 
</soap-env:body> 
</soap-env:envelope> 
四、使用google api 
google为了提高开发人员的开发效率,提供了一套基于java的api,用于直接访问google服务器。该api包装了google的web service,使用起来比web service更加方便。该api 包主要包括如下几个类: 
googlesearch :该类封装了对于google服务器的访问,支持搜索和缓存(cache)功能。 
googlesearchdirectorycategory :表示google中的一个分类目录 
googlesearchfault :该类为exception的一个子类,用于表示api使用的错误。 
googlesearchresult :该类封装了搜索的结果。 
googlesearchresultelement:该类表示搜索结果中的每一条记录。 
如下是一个例子的源代码,用于一个简单查询,查询请求为”world cup”,查询的帐号为”123456789”。该例子将把查询结果打印出来。如果用户需要近一步解析查询结果,可以使用googlesearchresult和googlesearchresultelement类。 
import com.google.soap.search.*; 
import java.io.*; 
public class googleapitest { 
public static void main(string[] args) { 
string clientkey="123456789"; 
string query="word cup"; 
// create a google search object, set our authorization key 
googlesearch s = new googlesearch(); 
s.setkey(clientkey); 
try { 
s.setquerystring(query); 
googlesearchresult r = s.dosearch(); 
system.out.println("google search results:"+t.tostring()); 
} catch (googlesearchfault f) { 
system.out.println("the call to the google web apis failed:"+f.tostring()); 
} 
} 
} 
五、总结 
google搜索引擎提供了搜索、缓存和拼写简单功能,通过web service可以在不同的平台、不同的语言使用,为了简化soap的开发,google还提供了包装了soap服务的java api,这也大大提高了java程序员的开发效率。随着搜索内容、形式的丰富,更多的开发人员可以将这种技术运用在自己应用程序中,扩展应用程度的功能。