Google 开放式 WebServices 查询接口

原创 2002年07月03日 09:47:00
 
查找引擎之王 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 web APIS

O'Reilly Network: Google Web API [April 21, 2002]'
 
原作者: smallufo

简介 Google 开放式 WebServices 查询接口

导读: 查找引擎之 google_ad_client = "pub-8433945195299443";google_ad_width = 336;google_ad_height = 280;go...
  • janrn
  • janrn
  • 2008年03月13日 18:02
  • 319

Google PR查询接口

出现terms_of_service 错误提示。把checksum的计算过程一 步步打出来,发现经过了几次右位移之后本地和服务器上的数字就不一样了。这才想到服务器是64位机, 32位系统下位移之后应该...
  • camel20
  • camel20
  • 2011年08月04日 14:34
  • 518

调用webservice接口实现几个查询

写着玩玩..... 1. 查询手机号码归属地 查询手机号码归属地 请输入正确的手机号进行查询... ...
  • u012675743
  • u012675743
  • 2015年09月10日 10:16
  • 1473

商业模式新生代之开放商业模式

今天的商业模式学习,有助于理解为什么存在竞争的公司依然能保持合作,还有怎么充分利用知识产权。     【华为曾经有H3C,华赛,海思等子公司,但是华为和中兴绝对是水生火热、互挖墙脚】   1.什...
  • jinshengtao
  • jinshengtao
  • 2014年12月14日 21:27
  • 2949

关于微软COEM,FPP和开放式许可三种购买方式的区别

什么是零售版、VOL版和OEM版  零售版是指从软件零售商处购买到的软件产品,它是针对一般家庭用户并且也是最常见的销售版本。    Windows Vista零售版分为彩盒包装和COEM简装版,彩盒包...
  • u014461454
  • u014461454
  • 2014年03月31日 17:46
  • 498

交易型开放式指数基金(ETF)与上市开放式基金(LOF)的具体区别

交易型开放式指数基金(ETF),上市开放式基金(LOF),封闭式基金,开放式基金...
  • peachpi
  • peachpi
  • 2011年03月31日 18:52
  • 3682

记阿里巴巴在线简历的三个开放式问题

1、请介绍一项你最热爱、最擅长的专业领域,并且介绍你在这个领域的学习经历和未来的学习规划。 产品设计。初中的时候那时候特别喜欢看“赢在中国”,快中考的时候还在看,且怂恿老爸去创业,也向马云、牛根生这...
  • u013517716
  • u013517716
  • 2016年04月08日 14:31
  • 1942

开放式并发的解决办法

我们知道,因为数据结构是基于断开的数据,所以 ADO.NET 和 Visual Studio .NET 使用开放式并发。因此,您需要添加业务逻辑,以解决开放式并发问题。 如果您选择使用开放式并发,则...
  • chamychen
  • chamychen
  • 2012年10月30日 22:41
  • 2001

汇总:传说中的微软的面试题,都是开放型的智力测试题,应聘IT互联网的有些会考到

第一组    1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?    2.你有一桶果冻,其中有黄色、绿色、红色三种,闭...
  • u012353255
  • u012353255
  • 2013年10月07日 21:04
  • 989

开放结构化数据服务(OTS)

开放结构化数据服务(OTS) OTS服务适用于需要处理结构化数据,同时对数据规模和并发访问要求比较高的应用,如邮箱存储、手机云空间等以用户为中心的互联网应用 开放结构化数据服务(Open Tabl...
  • ghevinn
  • ghevinn
  • 2012年10月22日 14:35
  • 1269
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Google 开放式 WebServices 查询接口
举报原因:
原因补充:

(最多只允许输入30个字)