首 页
产品
方案
体验
视频
优势
客户
知识
联系
电话:0791-88108826
微信:lvyeoa
 
绿叶OA优势
技术框架
绿叶OA办公系统客户培训现场
绿叶OA办公软件客户案例
电话:0791-88108826
售前:413400260
售前:2645991708
售后:2449720376
售后:1479170164

使用ASP/VBS 调用Google Web APIs 开发自己的搜索引擎
                                
发布时间:2006-8-26 12:36:38



  Google在2002年的4月份发布了名为Google Web APIs的应用程序接口,该接口可以让程序员通过调用Google强大的搜索引擎数据库开发出自己的搜索引擎。Google Web APIs站点上则宣称: "With the Google Web APIs service, software developers can query more than 3 billion web documents directly from their own computer programs. Google uses the SOAP and WSDL standards so a developer can program in his or her favorite environment - such as Java, Perl, or Visual Studio .NET." 。
   在该API发布的时候,我曾经到Google上看了一下,发现该接口不错,当时把Google提供的Developer's Kit下了下来,里面只有JAVA的示例代码,由于本人对JAVA感冒,就没有继续研究下去,只是略微的看了一下接口的说明书。   后来,在国内的一个PHP站点上,看到了国内的第一个SOAP Google API for PHP 发布了,通过Google搜索了一下也没发现,国内有SOAP Google API for ASP/VBS的版本发布,最近两天刚忙完自己的事情,整理自己的文件的时候,看到角落里还有个GoogleApi的目录,捡起来又研究起来了。
   现把步骤和新的写下来,Share一下。希望MS程序员能够喜欢。~_*
   PS:我相信很多人都会同意我说Google是目前最POP的搜索引擎了。

[SOAP介绍]
   SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。
   目前最新以及最流行的技术非XML莫数了,MS的OFFICE2003也发布了,据说也是基于XML开发的,具有很强的扩展性。
   关于SOAP协议规范,具体可以参照 http://www.tpoi.net/SOAP.htm
   同时IBM也提供了SOAP专题 http://www-900.ibm.com/developerWorks/cn/xml/theme/ws-soap.shtml (中文的,~_*)

  Google 搜索引擎现在可以通过基于 SOAP 的 Web 服务来访问了。这意味着,开发人员现在可以在他们自己的应用程序中嵌入 Google 搜索结果和其它信息。

[WSDL介绍]
   WSDL(Web Services Description Language)网页服务描述性语言,WDSL是一种XML语法,开发人员和开发工具可以用它来表示Web服务的功能。

[SOAP 与API]
   我简单的作了VBS的程序,通过SNIFFER PRO抓去下列数据包,以便作分析。

   Step 1 >
      发送请求数据包

      POST./search/beta2.HTTP/1.1
      User-Agent:.Mozilla/4.0.(compatible;.MSIE.6.0;.MS.Web.Services.Client.Protocol.1.0.3705.0)
      Content-Type:.text/xml;.charset=utf-8
      SOAPAction:."urn:GoogleSearchAction"
      Content-Length:.883
      Expect:.100-continue
      Connection:.Keep-Alive
      Host:.api.google.com

      API.Google.Com返回连接建立成功数据包

   Step 2 >
      发送数据包

      <?xml.version="1.0".encoding="utf-8"?>
      <soap:Envelope.xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
      xmlns:tns="urn:GoogleSearch"
      xmlns:types="urn:GoogleSearch/encodedTypes"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <soap:Body.soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <tns:doGoogleSearch>
      <key.xsi:type="xsd:string">fewCIPdQFHIhHaO+vWpBTjlblc6ajHKN</key>
      <q.xsi:type="xsd:string">............</q>
      <start.xsi:type="xsd:int">0</start>
      <maxResults.xsi:type="xsd:int">1</maxResults>
      <filter.xsi:type="xsd:boolean">false</filter>
      <restrict.xsi:type="xsd:string"./>
      <safeSearch.xsi:type="xsd:boolean">false</safeSearch>
      <lr.xsi:type="xsd:string"./><ie.xsi:type="xsd:string"./><oe.xsi:type="xsd:string"./>
      </tns:doGoogleSearch></soap:Body></soap:Envelope>
      
       API.Google.Com返回数据包

       HTTP/1.1.100.Continue....

    Step 3 >
       发送数据包

      <?xml.version="1.0".encoding="utf-8"?>
      <soap:Envelope.xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
      xmlns:tns="urn:GoogleSearch"
      xmlns:types="urn:GoogleSearch/encodedTypes"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <soap:Body.soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <tns:doGoogleSearch>
      <key.xsi:type="xsd:string">fewCIPdQFHIhHaO+vWpBTjlblc6ajHKN</key>
      <q.xsi:type="xsd:string">............</q>
      <start.xsi:type="xsd:int">0</start>
      <maxResults.xsi:type="xsd:int">1</maxResults>
      <filter.xsi:type="xsd:boolean">false</filter>
      <restrict.xsi:type="xsd:string"./>
      <safeSearch.xsi:type="xsd:boolean">false</safeSearch>
      <lr.xsi:type="xsd:string"./><ie.xsi:type="xsd:string"./>
      <oe.xsi:type="xsd:string"./>
      </tns:doGoogleSearch></soap:Body></soap:Envelope>

      API.Google.com返回数据包
      HTTP/1.1.200.OK
      Date:.Sun,.16.Mar.2003.20:25:26.GMT
      Server:.e.h.c.a.p.a
      Content-Length:.2046
      Keep-Alive:.timeout=10,.max=50
      Connection:.Keep-Alive
      Content-Type:.text/xml;.charset=utf-8
      <?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">313</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.057075</searchTime>
      <resultElements.xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/"
      xsi:type="ns3:Array"
      ns3:arrayType="ns1:ResultElement[1]">
      <item.xsi:type="ns1:ResultElement">
      <cachedSize.xsi:type="xsd:string">1k</cachedSize>
      <hostName.xsi:type="xsd:string"></hostName>
      <snippet.xsi:type="xsd:string"></snippet>
      <directoryCategory.xsi:type="ns1:DirectoryCategory">
      <specialEncoding.xsi:type="xsd:string"></specialEncoding>
      <fullViewableName xsi:type="xsd:string">
      </fullViewableName>
      </directoryCategory>
      <relatedInformationPresent.xsi:type="xsd:boolean">true</relatedInformationPresent>
      <directoryTitle.xsi:type="xsd:string"></directoryTitle>
      <summary.xsi:type="xsd:string"></summary>
      <URL.xsi:type="xsd:string">http://www.roror.org/</URL>
      

<title.xsi:type="xsd:string">Your.browser.does.not.support.frames..We.recommend.upgrading.your.<b>...</b>.</title>
      </item></resultElements>
      <endIndex.xsi:type="xsd:int">1</endIndex>
      <searchTips.xsi:type="xsd:string"></searchTips>
      <searchComments.xsi:type="xsd:string"></searchComments>
      <startIndex.xsi:type="xsd:int">1</startIndex>
      <estimateIsExact.xsi:type="xsd:boolean">false</estimateIsExact>
      <searchQuery.xsi:type="xsd:string">............</searchQuery>
      </return>.</ns1:doGoogleSearchResponse>
      </SOAP-ENV:Body>.</SOAP-ENV:Envelope>.

   ~_* 抓包就贴到这里,相信有些同志应该已经能看见一些端倪了吧。大家可以去看一下下面的URL,相信就知道上面的东东返回的是啥搜索结果了。
http://www.google.com/search?q=%E9%9B%A8%E5%A3%B0%E8%AE%BA%E5%9D%9B&ie=UTF-8&oe=UTF-8&hl=zh-CN&lr=

上面URL的第一条搜索记录
Your browser does not support frames. We recommend upgrading your ...
www.roror.org/ - 1k - 2003年3月15日 - 网页快照 - 类似网页

[ASP/VBS 程序的实现]
    首先通过下面的URL申请一个Google Web APIs的序列号:
https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey
    填写完Email地址和Password以后,提交表单,然后到邮箱收一下Mail,激活账号,接着就能收到Licence了。

    Your Google Web APIs license key is fewCIPdQFHIhHaO+vWpBTjlblc6ajHKN(这就是Licence了) 。

    然后安装SOAP组件,本文所提到的SOAP组件使用的是http://www.pocketsoap.com/ 发布的PocketSOAP v1.4.2(released February 8, 2003)。
    下载URL如下:
    Win32 Version v1.4.2 Packaged Install      http://www.pocketsoap.com/pocketsoap/PocketSOAP.1.4.2.exe
    注:Win95用户需要先安装DCOM95,Win95/98用户另外需要安装SSL支持。Dcom95相关URL
http://www.microsoft.com/com/dcom/dcom95/dcom1_3.asp
    我使用的是Win2k Adv Server,就不需要那么麻烦了。先运行下载的PocketSOAP进行安装。
安装完成以后,就可以编写代码了。

    为了调试的方便,我使用VBS进行编写,ASP和VBS本来就如出一辙,稍加修改就可以放到WEB上了。

    代码如下,把下面代码复制保存到google.vbs,然后运行Cscript google.vb 关键字 就可以了。

 

Dim oArgs, ArgNum, t, key, searchRes

Set oArgs = WScript.Arguments
ArgNum = 0

While ArgNum < oArgs.Count
  FullParameter = FullParameter + oArgs(ArgNum) + " "
  ArgNum = ArgNum + 1
Wend

'填写为自己申请到的Licence就可以了
key = "fewCIPdQFHIhHaO+vWpBTjlblc6ajHKN"

set t = CreateObject("pocketsOAP.HTTPTransport")
't.SetProxy "localhost", 7070 '设置Proxy

set res = GoogleSearch ( FullParameter, 0, 10, true, "", true, "", "", "" )
WScript.Echo String(80, "_")
Wscript.Echo "已向英特网搜索" & FullParameter
Wscript.Echo "共约有" & res.ItemByName("estimatedTotalResultsCount").Value & "项查询结果"
Wscript.Echo "搜索结果如下:"
WScript.Echo String(80, "_")
searchRes = res.ItemByName("resultElements").Value
for i = lbound(searchRes) to ubound(searchRes)
    wscript.echo searchRes(i).Nodes.ItemByName("title").Value & vbCRLF & vbTab & _
searchRes(i).Nodes.ItemByName("URL").Value &

vbCRLF
next

Function GoogleSearch ( searchTerm, _
                        start, _
                        maxResults, _
                        MatchFilter, _
                        restrict, _
                        safeSearch, _
                        languageRestrict, _
                        inputEncoding, _
                        outputEncoding )
    dim e
    set e = CreateObject("PocketSOAP.Envelope.2")
    e.SetMethod "doGoogleSearch", "urn:GoogleSearch"

    e.Parameters.Create "key", key
    e.Parameters.Create "q", searchTerm
    e.Parameters.Create "start", start
    e.Parameters.Create "maxResults", maxResults
    e.Parameters.Create "filter", MatchFilter
    e.Parameters.Create "restrict", restrict
    e.Parameters.Create "safeSearch", safeSearch
    e.Parameters.Create "lr", languageRestrict
    e.Parameters.Create "ie", inputEncoding
    e.Parameters.Create "oe", outputEncoding
    
    
    t.SOAPAction = "urn:GoogleSearchAction"
    
    t.send "http://api.google.com/search/beta2", e.serialize
    e.parse t
    set GoogleSearch = e.parameters.item(0).Nodes
end Function



[Google Web APIs 介绍]
   每个Goolge 账号和Licence Key一天只能自动查询1000次,每次最多返回 10 条搜索结果。因此,请求可以找到编号在 990 到 1000 之间的结果,但找不到第 1001 个。使用之前,请仔细阅读Google的服务条款(PERSONAL AND LEGITIMATE USES ONLY)。
   
   搜索请求

   搜索请求提交一个查询字符串和一组参量到Google Web APIs 服务,然后收到一组搜索结果。搜索结果是由超过20亿Web页面索引而来。

   Cache请求

    Cache请求提交一个URL到Google Web APIs 服务,然后收到Google's crawlers最后访问的页面(如果可以提供)。Cache页面的返回类型是Base64编码格式的文本。

   拼写建议

   Google 搜索引擎意识到用户通常并不知道如何拼写要找的主题,所以内置一个拼写检查器,它可以分析查询、提出建议。不论什么样的搜索,都会有这样的拼写建议。



联系我们
电话:0791-88108826
微信:lvyeoa
QQ:413400260
QQ:2645991708
Email:oa169@163.com

核心产品

医院内部办公系统
智慧政务协同办公
企业OA办公平台
教育综合办公系统
建筑企业网络办公
移动办公系统

微信联系

©2007-2024 南昌绿新软件技术有限公司赣ICP备12000799号