关于如何调用google提供的web服务的的一个实例-中国DotNet俱乐部[http:/...

来源:百度文库 编辑:神马文学网 时间:2024/04/20 06:14:19
使用google的web服务实现搜索 (http://www.chinaaspx.com/club/topic_35_15147.htm)
 
作者:Scott Mitchell
介绍
你知道google提供了一个web服务让你可以使用他的数据库去搜索吗?让你使用他
的数据库去找回已经被收藏的web页面吗?让你使用他的数据库去执行拼写检查吗?使
用google的web服务你可以在你自己的站点轻松的实现像google那样的搜索。下个月我
将写两到三篇的文章去说明如何利用google的web服务,这里我们先来看看如何利用
google的数据库去实现搜索的功能吧!
来自google的许可证
google的web服务接口目前还处在测试阶段,仅供个人使用。为了
限制限制过度的使用这个接口,google需要那些想去使用他的人可以得到
一个唯一的许可(这个许可是免费的).这个许可是为了限制个人使用者每天
的使用量不要超过1000次。请务必要认真的去读这个许可证。
web服务的快速入门
Web服务是一个额外的接口,这个接口由某个网站提供,可以被其他的网站调用。
你可以把web服务想象成一个自我包含的组件,同时带有一种或多种的调用方法。他
可以驻扎在Inetnet的任何地方。通过他所提供的调用方法而被世界任何一个地方的客户
端所调用。例如,google的web服务就提供了三种方法:doGoogleSearch(),
doGetCachedPage(), 和 doSpellingSuggestion().*The doGoogleSearch()这个方法
将返回和你输入的查询字符相符合的结果。然后这个方法返回一个GoogleSearchResult类的实例,这个实例中包含了搜索的结果。
Web服务是建立在开放的协议和标准上的。例如一个想要消费web服务的客户和
Web服务本身的通讯就是通过HTTP这样一个众所周知的开放协议来进行的。而参数和
返回值之间来来回回的传送也是通过SOAP这样一个众所周知的数据引导和排序协议来
进行的。这样一来,web服务就可以完全暴露了,打个比方来说:基于微软的IIS配置的
服务器上的由ASP.net所写的web页就可以被基于Apache培植的服务器上的PHP程序所
消费,甚至可以作为完全的桌面应用程序来使用。
当消费一个web服务的时候,通常都是先建立一个代理,这个代理将保护客户端免
于对web服务的复杂的请求。代理类是一个类,他本身包含了web服务的所有暴露出来
的方法和对象。当一个客户端程序发出请求时,这些方法将控制和引导这些参数进入
SOAP,然后通过HTTP协议传送这些SOAP请求,接着接受来自web服务的响应,再次
的引导和控制这些返回值。代理类允许客户端程序调用web服务就像是在调用自己本地
的组件一样。
如果你不是很熟悉web服务,那么这个入门指导将是一个很好的引导,但是你还是
要抽出一定的时间去读一读建立web服务和建立并消费web服务这两篇文章。
Google web服务的API
Google Web服务的信息你可以在http://www.google.com/apis/找到。在开始使用
Google的web服务之前,你需要先去下载 Google Web API Developer‘s Kit.这个666K
的文件包含了完整的WSDL文件用以描述这个web服务,还包含一些使用Java,VB.net
和C#开发的例子。下载完了Google的web服务开发工具包以后,你还需要在Google
申请一个帐号。这个帐号可以在
https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey这个地址去做。
一旦这个免费帐号被建立,那么你就会被分配给一个唯一的许可号。以后每当Google
web服务被调用的时候,这个帐号都必须 被使用,这个帐号的作用就是限制一个号每天
调用web服务的次数不可以超过1000次。
建立代理类
一旦你拥有了帐号和google接口开发工具包,那么接下来你就需要去建立用来调用
web服务的代理类了。在完成这些以前,我们需要先在WSDL文件中得到帮助,这是
一个XML格式的文件用来去描述google的web服务所提供的服务种类。这个WSDL
文件GoogleSearch.wsdl可以在google接口开发工具包中找到。
如果你使用Visual Studio.NET,那么你可以拷贝这个文件到存放ASP.NET文件的
文件夹中(如:C:\Inetpub\wwwroot\WebApplication1). 然后去项目菜单,选择
Add Web Reference选项。接下来在对话栏里输入WSDL文件的URL即可。就像这样
http://localhost/WebApplication1/GoogleSearch.wsdl。之后再点击
Add Reference按钮就可以完成这整个的过程了。这将建立一个代理类用localhost名字
空间(如果你喜欢,你可以自己改一个名字)。
如果你没有Visual Studio.net那么你可以建立代理类通过一个命令行程序去调用
wsdl.exe。wsdl.exe文件将建立一个C#或者是VB.NET文件,当然你要编译和运行
wsdl.exe文件。在命令行中直接输入如下的即可。
wsdl /protocol:SOAP /namespace:google /out:GoogleProxy.cs
C:\google\GoogleSearch.wsdl
这样将使用google名字空间去建立一个名字为GoogleProxy.cs的C#文件。使用C#
命令行编译器,csc,去编译这个类,如下:
csc /t:library /out:GoogleProxy.dll GoogleProxy.cs
这将建立一个名字叫GoogleProxy.dll的文件。一定要把这个文件拷贝到你的web应用
程序的 /bin 目录下。
关于wsdl.exe的更多的信息
如果没有Visual Studio.NET,那么要建立一个代理类需要更多的
信息,一定要读一下PowerPoint的介绍:从一个ASP.NET 的web页面
去调用web服务。
建立一个ASP.NET的web页面去调用google的web服务
既然已经建立了代理类,那么建立一个ASP.NET去调用web服务就是小事一桩了。
首先在做这件事情之前。我们需要先检查一下web服务需要那些参数。幸运的是,这些
参数都被详细的列在了Google站点的参考部分。在这里我们既然是经由google的
web服务去执行一个搜索,那么就让我们来检查一下doGoogleSearch()方法的参数。
这一方法的十个参数如下:
key:
由google提供的,必须要使用这个键值去访问google的服务,google使用这个键值起到鉴定和*记入日志的作用
q:
(看Query Terms 去查询详细的查询语法)
start:
第一个结果的首指针
maxResults :
每一个想得到的查询结果的数字。每个查询的最大值是10(注:如果你的查询没有多少匹配的话,那么得到的结果可能要少于你的提问)
filter:
激活和未激活的自动过滤,这将隐藏非常相似的结果,而这些结果都来自相同的主机。过滤器的只要作用是想去提高google的最终用户使用google时的体验,但是从你的站点应用考虑,你最好还是放弃使用它(参见Automatic Filtering的详细信息)。
restricts:
限制搜索web站点的网页索引下的子集,比如一个国家像“乌克兰”,或者是一个主题像“linux”。(参见Restricts 的详细信息)
safeSearch :
一个布尔值,在搜索结果中可以过滤掉成人内容。(参见SafeSearch的详细信息)
lr:
语言限制-限制搜索文档中含有一种或多种语言
ie:
输入代码用的,这个参数不常用,所有输入代码都应该使用UTF-8格式(参见input和output代码的详细信息)
oe:
输出代码用的,这个参数不常用,所有输出代码都应该使用UTF-8格式(参见input和output代码的详细信息)
DoGoogleSearch()方法将返回一个GoogleSearchResult对象的实例。这个对象有
一个resultElements属性,他们是一系列ResultElement对象的实例。每一个
ResultElement对象都有一个*数字属性。比如 title,snippet, URL,summary等等。
现在让我们去建立一个简单的ASP.NET web页去显示输入查询字-asp时的前十个
结果。这个使用如下的代码就可以完成。

Font-Name=”Verdana” Font-Size=”10pt”>


<%# Container.DataItem.title %>


<%# Container.DataItem.summary %>

[”>
<%# Container.DataItem.URL %>
]





[查看演示实例]
以上代码的黑体部分是调用google web服务dogooglesearch()方法所必须的。
代码如此的少是由于代理类。搜索结果用DataList来显示,每个结果都将显示标题,
概要和通往这个页面的URL。
上面的演示实例将图示google的web服务如何去执行一个搜索。但是功能确是
非常有限的,因为它仅仅显示预先定义的搜索查询的前十个结果。在接下来的Part2
部分我们将看看如何使用一个ASP.NET去建立一个更加实用的web页去使用google的
web服务。
读Part2
使用google的web服务实现搜索(2)
上一个实例演示图示了如何调用google的web服务去实现一个搜索。但是它的功能
确实是非常有限的,它仅仅可以显示限定的查询字的前十个搜索结果。在第二部分,我们
将看看如何建立一个功能类似google的搜索引擎,可以建立一个页面让用户输入关键字
,再由另一个页面返回搜索结果。
建立一个功能更加强大搜索引擎
为了建立一个通过google提供的搜索接口web服务的功能更加强大的搜索引擎,先
让我们通过ASP.NET来建立一个可以分页并且可以让用户自己输入搜索条件的web页。
完成这个的一种方法就是模仿google自己的方法,这样也就意味着将搜索条件和搜索
的页数同时放在querystring环境变量里。比方说,如果用户想要查询字”ASP”而且希望前
十到二十个记录是可见的,那么这个URL请求将是:
http://www.yourserver.com/Search.aspx?q=ASP&first=10&last=20
其实还有其他的方法可以实现这个功能的。另一个方法就是使用postback方式。
Postback方式传送自己到ASP.NET中,所以它比querystring方式可以传送更多的
东西。然而querystring有一个好处那就是用户可以使用特别的查询(对于postback方式,
它是经由HTTP报头去传送数据的,但是querystring在搜索或者标页的时候是不可以
改变的)。
尽管querystring方式有这种标记的优点,但是我还是决定 去实现这个实例演示用
postback方式。如果你喜欢,你完全可以使用querystring方式。Postback方式的原代码
如下:


Enter your search term:








Font-Name="Verdana" Font-Size="10pt">


<%# Container.DataItem.title %>


<%# Container.DataItem.snippet %>

[<%# Container.DataItem.URL %>]








|




[参看实例演示]
以上代码的主要功能子程序是DisplaySearchResults(),它将调用web服务,把结果
绑定到DataList中去,并且它还将显示各色各样的信息,比如估计匹配数,查询要求
运行的时间等等。这个子程序还将决定以前的LinkButton是激活还是不激活。
还有一点要注意的就是,当调用google搜索的web服务时,我们必须规定起始的
索引和在一页中将看见多少结果。那就是说,为了看见一个搜索的前十个记录,我们
应当设定0作为开始标记,而将10作为返回的记录数。为了看见接下来的十个记录,
我们最好将10作为开始标记(让10作为返回的记录数)。需要注意的就是,ViewState
被用来去维持开始页的标记数。每一页要显示的记录数被常数PAGE_SIZE所表示。
考虑到分页,将有两个LinkButton被使用,当点击它们的时候,nextRecs和
prevRecs事件将被触发。这些事件仅仅更新可以看见的开始记录数并且调用
DisplaySearchResults().
结论
在这篇文章中我们探究了如何去调用google搜索的web服务。为了调用这个web
服务,我们首先下载了downloading the Google Web API Developer‘s Kit,接下来我们
在google站里建立了一个帐号可以得到一个许可证。这些都做完以后,我们建立了一个
基于google web服务WSDL文件(GoogleSearch.wsdl, 被包含在被下载的Developer‘s Kit
里)的代理类。建立了代理类以后,我们仅仅就需要几行简单的ASP.NET代码就可以去调用这个
web服务了。