资源大全 | 神秘文化 | 在线翻译 | QQ专区 | 视频教程 | 彩信频道 | 搜索引擎 | BT下载 |  | 网站地图
设为首页
加入收藏
联系站长
您现在的位置: 一百网络 >> JSP编程 >> 其他相关 >> 文档正文
最近更新
普通文档 JSP漏洞大观
普通文档 成为一个成功Jsp程序员的
普通文档 测试你对技术的掌握度:
普通文档 如何使页面不被浏览器Ca
普通文档 简介 Google 开放式 Web
普通文档 为什么要自己写底层涵式
普通文档 谈对JSTL和TagLib的看法
普通文档 请输入关键字
普通文档 为什么thinging in java
普通文档 评估Java在商务集成方面
推荐文章
  • 此栏目下没有推荐文档
  • 简介 Google 开放式 WebServices 查询接口

    文章作者:佚名 录入时间:2006-7-5 来源:不详
    网站声明:本站的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出处和原始作者,文章版权归本网站与文章作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。


    查找引擎之王 google 于 4/11 开放了它的查询接口,可以让全世界各地的 Java 以及 .NET 程序员,免费地以 WebServices 的方式,对 google 下查找指令,并且可以将结果使用于自己的程序或网页中,并且几乎目前所有的程序语言都有 WebServices 的相关软体包,本次介绍应该可以给大家一个简单的 WebServices 概念 ...

    查找引擎之王 google 于 4/11 开放了它的查询接口,可以让全世界各地的 Java 以及 .NET 程序员,免费地以 WebServices 的方式,对 google 下查找指令,并且可以将结果使用于自己的程序或网页中。不过使用上也有限制,它一天只允许未付费的程序员查找 1000 次。要使用前,必须先向 google 注册帐号,取得一个 32 位长度的 license key ,每次呼叫查询时,必须带入这个 license key 即可使用。因为 WebServices 以 WSDL (Web Service Definition Language) 的方式描述所开放的接口,走的通讯协定是 SOAP on HTTP ,所以理论上可以穿越防火墙。 Java 范例程序如下∶ 

    import java.io.*;
    import com.google.soap.search.*; // 这是 googleapi.jar ,由 google 所提供 

    public class SearchGoogle {

      public static void main(String[] args) {
        if (args.length != 2) 
        {
          System.err.println("Usage: java SearchGoogle LicenseKey 查询字符串 ");
          System.exit(1);
        }
        String clientKey = args[0];
        String queryString = args[1];

        System.out.println(" 查询字符串 = " + queryString);

        // 产生查找对象,设定输出编码 (big5)
        GoogleSearch s = new GoogleSearch();
        s.setKey(clientKey);
        s.setOutputEncoding("big5");

        try 
        {
          s.setQueryString(qyeryString);
          GoogleSearchResult r = s.doSearch();
          System.out.println(" 查找结果 :");
          System.out.println("======================");
          System.out.println(r.toString());
        } 
        catch (GoogleSearchFault e) 
        {
          System.out.println(" 查找失败 ");
        }
      }
    }

     

    使用方法以及查询结果(执行环境∶ Linux + JDK 1.3.1_01 ,主机位于防火墙后端)∶ 


    java -classpath .:../lib/googleapi.jar 
    SearchGoogle xxxxxxxxx- 我的 LicenseKey-xxxxxxxxx LinuxFab

    查询字符串 = LinuxFab
    查找结果 :
    ======================
    {
    TM = 0.048257
    Q = "LinuxFab"
    CT = ""
    TT = ""
    CATs =
      {
      {SE="Big5", FVN="Top/World/Chinese_Traditional/ 计算机 /Operating_Systems/Unix/Linux"}
      }
    Start Index = 1
    End Index = 10
    Estimated Total Results Number = 11500
    Document Filtering = true
    Estimate Correct = false
    Rs =
      {
      
      [
      URL = "http://bbs.ee.ntu.edu.tw/boards/Linux/21/"
      Title = " ◆ 【 LinuxFab 早报】 "
      Snippet = " ◆ 【 LinuxFab 早报】 . ... 5, ◇ 【 LinuxFab 本周专栏】 如何制作简易 Floppy Liunx, linuxfab. 07/13/01. ... "
      Directory Category = {SE="", FVN=""}
      Directory Title = ""
      Summary = ""
      Cached Size = "11k"
      Related information present = true
      Host Name = ""
      ],
      
      [
      URL = "http://bbs.ee.ntu.edu.tw/boards/Linux/21/73.html"
      Title = " ◇ 【 LinuxFab 早报】 - Linux 2.4.10 内核中剽窃了 ┅ "
      Snippet = " ◇ 【 LinuxFab 早报】 - Linux 2.4.10 内核中 剽窃了 ┅ . 发信人 : linuxfab.bbs ... "
      Directory Category = {SE="", FVN=""}
      Directory Title = ""
      Summary = ""
      Cached Size = "10k"
      Related information present = true
      Host Name = "bbs.ee.ntu.edu.tw"
      ],
      
      [
      URL = "http://www.lslnet.com/linux/docs/linux-3033.htm"
      Title = "LinuxFab: Red Hat7.0 ? 新特色 - [? 森林 - 自由 ? 件 ]"
      Snippet = " ... LinuxFab: Red Hat7.0 ? 新特色 ? 森林 http://www.lslnet.com 2000 年 9 月 24 日 09:59 ... 摘自∶ http:linuxfab.cx [ ?? 窗口 ]. ... "
      Directory Category = {SE="", FVN=""}
      Directory Title = ""
      Summary = ""
      Cached Size = "5k"
      Related information present = true
      Host Name = ""
      ],
     下略 
     

    当然,输出结果不是这么杂乱, google 所提供的 api 有各种查找设定方法,例如从第几笔开始查找、设定传回笔数、偏好查找(避免查找 java 时传回 咖啡 的结果) ... 等等,各位可以好好玩一玩。 

    如果您不想使用 google 的 library ,您也可以利用手边的 WebServices 工具程序,自动抓取 google 所提供的 WSDL 文档(位于∶ http://api.google.com/GoogleSearch.wsdl ),并且产生相关的 java 对象。以下以 GLUE 这套 Java WebServices 软体包做范例∶ 


    $ wsdl2java http://api.google.com/GoogleSearch.wsdl -p example -d example/

    write file example/IGoogleSearchPort.java
    write file example/GoogleSearchServiceHelper.java
    write file example/ResultElement.java
    write file example/DirectoryCategory.java
    write file example/GoogleSearchResult.java
    write file GoogleSearchService.map
          
     

    GLUE 的强处在于它自动为您处理所有 XML <-> Java Object Mapping 以及 SOAP 传输的问题,您甚至不需要看懂 WSDL 便可直接使用 WebServices !我们现在已经将 WSDL 转换成 Java 对象, package 名为 example ,接下来便是撰写 Client 去连接 google ∶ 

    import java.io.*;
    import electric.registry.Registry; // 包含于 GLUE-STD.jar ,为 GLUE 标准版的 library
    import example.*; //GLUE 自动为您由 WSDL 产生出来的 Java 对象 

    public class SearchGoogle2 {

      public static void main(String[] args) {
        if (args.length != 2) 
        {
          System.err.println("Usage: java SearchGoogle LicenseKey 查询字符串 ");
          System.exit(1);
        }
        String clientKey = args[0];
        String queryString = args[1];

        System.out.println(" 查询字符串 = " + queryString );
        String url = "http://api.google.com/GoogleSearch.wsdl";
        
        try
        {
          // 利用 GLUE 产生的接口,去 bind google 的 WSDL
          IGoogleSearchPort searcher = (IGoogleSearchPort) Registry.bind(url , IGoogleSearchPort.class);
          // 查询
          GoogleSearchResult result = searcher.doGoogleSearch
          ( clientKey , queryString , 0 , 1 , false , "" , false , "" , "Big5" , "Big5" );
          
          System.out.println(" 查找结果 :");
          System.out.println("======================");
          System.out.println(" 回应数量∶ " + result.resultElements.length );
          System.out.println(" 第一笔结果∶ ");
          System.out.println(" 简介∶ " + result.resultElements[0].summary );
          System.out.println("URL ∶ " + result.resultElements[0].URL );
          System.out.println(" 片段∶ " + result.resultElements[0].snippet );
          System.out.println(" 标头∶ " + result.resultElements[0].title );
          System.out.println(" 主机∶ " + result.resultElements[0].hostName );
          System.out.println(" 目录∶ " + result.resultElements[0].directoryTitle );
        }
        catch (electric.registry.RegistryException e)
        {
          System.out.println(" 错误∶ " + e.getMessage());
        }
      } 
    }

          
     

    执行结果指令如下∶ 

    $ java -classpath .:../lib/GLUE-STD.jar:../lib/j2ee.jar:../lib/jnet.jar 
    SearchGoogle2 xxxxxxxxx- 我的 LicenseKey-xxxxxxxxx LinuxFab
    查询字符串 = LinuxFab
    查找结果 :
    ======================
    回应数量∶ 1
    第一笔结果∶
    简介∶
    URL ∶ http://bbs.ee.ntu.edu.tw/boards/Linux/21/
    片段∶◆ 【 LinuxFab 早报】 . ... 5, ◇ 【 LinuxFab 本周专栏】 如何制作简易 Floppy Liunx, linuxfab. 07/13/01. ...
    标头∶◆ 【 LinuxFab 早报】
    主机∶
    目录∶

     

    要注意的是,这只是 google beta2 版本的 WSDL ,未来接口一定会有所更动,而且远端主机 (api.google.com) 仍然不太稳定,有时候会连不过去,有时又会出现 Internal Server Error 的错误。不过以上的介绍应该可以给大家一个简单的 WebServices 概念了吧?目前几乎所有的程序语言都有 WebServices 的相关软体包,不论您是 PHP 网页制作者,或是 VB 窗口程序员,应该都找到相关的软体包,直接在您的网页 / 程序上面撰写 WebServices 的 Client 以及 Server 。 

    截稿前消息∶全球最大的网络书店 Amazon ,也开始提供 WebServices 接口给代销商( associates ,可以在个人网页上放置连往 Amazon 的 icon 或连结,藉此赚取部分成交金额)使用。代销商现在可以利用 Amazon 提供的 WebServices 撰写 Web/Desktop 应用程序了!看来类似的 WebServices 将会逐渐在许多大站点中陆续被采用,或许 LinuxFab/SourceFab 可以考虑引进此技术,使本站成为华人 Open Source 界的网络运算中心。

  • 上一篇文档:

  • 下一篇文档:
  •     查找更多“简介 Google 开放式 WebServices 查询接口”的内容  
    相关连接
  • JSP漏洞大观

  • 成为一个成功Jsp程序员的九步

  • 测试你对技术的掌握度:JSP程序员成长之路

  • 如何使页面不被浏览器Cache保留

  • 为什么要自己写底层涵式?