本文由232189044贡献
    doc1。
    Google 开放式 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];
字符串长度web
    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 web APIS O'Reilly Network: Google Web API [April 21, 2002]'

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。