簡(jiǎn)介 Google 開(kāi)放式 WebServices 查詢接口
發(fā)表時(shí)間:2023-08-13 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]查找引擎之王 google 于 4/11 開(kāi)放了它的查詢接口,可以讓全世界各地的 Java 以及 .NET 程序員,免費(fèi)地以 WebServices 的方式,對(duì) google 下查找指令,并且可以將...
查找引擎之王 google 于 4/11 開(kāi)放了它的查詢接口,可以讓全世界各地的 Java 以及 .NET 程序員,免費(fèi)地以 WebServices 的方式,對(duì) google 下查找指令,并且可以將結(jié)果使用于自己的程序或網(wǎng)頁(yè)中,并且?guī)缀跄壳八械某绦蛘Z(yǔ)言都有 WebServices 的相關(guān)軟體包,本次介紹應(yīng)該可以給大家一個(gè)簡(jiǎn)單的 WebServices 概念 ...
查找引擎之王 google 于 4/11 開(kāi)放了它的查詢接口,可以讓全世界各地的 Java 以及 .NET 程序員,免費(fèi)地以 WebServices 的方式,對(duì) google 下查找指令,并且可以將結(jié)果使用于自己的程序或網(wǎng)頁(yè)中。不過(guò)使用上也有限制,它一天只允許未付費(fèi)的程序員查找 1000 次。要使用前,必須先向 google 注冊(cè)帳號(hào),取得一個(gè) 32 位長(zhǎng)度的 license key ,每次呼叫查詢時(shí),必須帶入這個(gè) license key 即可使用。因?yàn)?WebServices 以 WSDL (Web Service Definition Language) 的方式描述所開(kāi)放的接口,走的通訊協(xié)定是 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);
// 產(chǎn)生查找對(duì)象,設(shè)定輸出編碼 (big5)
GoogleSearch s = new GoogleSearch();
s.setKey(clientKey);
s.setOutputEncoding("big5");
try
{
s.setQueryString(qyeryString);
GoogleSearchResult r = s.doSearch();
System.out.println(" 查找結(jié)果 :");
System.out.println("======================");
System.out.println(r.toString());
}
catch (GoogleSearchFault e)
{
System.out.println(" 查找失敗 ");
}
}
}
使用方法以及查詢結(jié)果(執(zhí)行環(huán)境∶ Linux + JDK 1.3.1_01 ,主機(jī)位于防火墻后端)∶
java -classpath .:../lib/googleapi.jar
SearchGoogle xxxxxxxxx- 我的 LicenseKey-xxxxxxxxx LinuxFab
查詢字符串 = LinuxFab
查找結(jié)果 :
======================
{
TM = 0.048257
Q = "LinuxFab"
CT = ""
TT = ""
CATs =
{
{SE="Big5", FVN="Top/World/Chinese_Traditional/ 計(jì)算機(jī) /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 早報(bào)】 "
Snippet = " ◆ 【 LinuxFab 早報(bào)】 . ... 5, ◇ 【 LinuxFab 本周專欄】 如何制作簡(jiǎn)易 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 早報(bào)】 - Linux 2.4.10 內(nèi)核中剽竊了 ┅ "
Snippet = " ◇ 【 LinuxFab 早報(bào)】 - Linux 2.4.10 內(nèi)核中 剽竊了 ┅ . 發(fā)信人 : 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 = ""
],
下略
當(dāng)然,輸出結(jié)果不是這么雜亂, google 所提供的 api 有各種查找設(shè)定方法,例如從第幾筆開(kāi)始查找、設(shè)定傳回筆數(shù)、偏好查找(避免查找 java 時(shí)傳回 咖啡 的結(jié)果) ... 等等,各位可以好好玩一玩。
如果您不想使用 google 的 library ,您也可以利用手邊的 WebServices 工具程序,自動(dòng)抓取 google 所提供的 WSDL 文檔(位于∶ http://api.google.com/GoogleSearch.wsdl ),并且產(chǎn)生相關(guān)的 java 對(duì)象。以下以 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 的強(qiáng)處在于它自動(dòng)為您處理所有 XML <-> Java Object Mapping 以及 SOAP 傳輸?shù)膯?wèn)題,您甚至不需要看懂 WSDL 便可直接使用 WebServices !我們現(xiàn)在已經(jīng)將 WSDL 轉(zhuǎn)換成 Java 對(duì)象, package 名為 example ,接下來(lái)便是撰寫(xiě) Client 去連接 google ∶
import java.io.*;
import electric.registry.Registry; // 包含于 GLUE-STD.jar ,為 GLUE 標(biāo)準(zhǔn)版的 library
import example.*; //GLUE 自動(dòng)為您由 WSDL 產(chǎn)生出來(lái)的 Java 對(duì)象
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 產(chǎn)生的接口,去 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(" 查找結(jié)果 :");
System.out.println("======================");
System.out.println(" 回應(yīng)數(shù)量∶ " + result.resultElements.length );
System.out.println(" 第一筆結(jié)果∶ ");
System.out.println(" 簡(jiǎn)介∶ " + result.resultElements[0].summary );
System.out.println("URL ∶ " + result.resultElements[0].URL );
System.out.println(" 片段∶ " + result.resultElements[0].snippet );
System.out.println(" 標(biāo)頭∶ " + result.resultElements[0].title );
System.out.println(" 主機(jī)∶ " + result.resultElements[0].hostName );
System.out.println(" 目錄∶ " + result.resultElements[0].directoryTitle );
}
catch (electric.registry.RegistryException e)
{
System.out.println(" 錯(cuò)誤∶ " + e.getMessage());
}
}
}
執(zhí)行結(jié)果指令如下∶
$ java -classpath .:../lib/GLUE-STD.jar:../lib/j2ee.jar:../lib/jnet.jar
SearchGoogle2 xxxxxxxxx- 我的 LicenseKey-xxxxxxxxx LinuxFab
查詢字符串 = LinuxFab
查找結(jié)果 :
======================
回應(yīng)數(shù)量∶ 1
第一筆結(jié)果∶
簡(jiǎn)介∶
URL ∶ http://bbs.ee.ntu.edu.tw/boards/Linux/21/
片段∶◆ 【 LinuxFab 早報(bào)】 . ... 5, ◇ 【 LinuxFab 本周專欄】 如何制作簡(jiǎn)易 Floppy Liunx, linuxfab. 07/13/01. ...
標(biāo)頭∶◆ 【 LinuxFab 早報(bào)】
主機(jī)∶
目錄∶
要注意的是,這只是 google beta2 版本的 WSDL ,未來(lái)接口一定會(huì)有所更動(dòng),而且遠(yuǎn)端主機(jī) (api.google.com) 仍然不太穩(wěn)定,有時(shí)候會(huì)連不過(guò)去,有時(shí)又會(huì)出現(xiàn) Internal Server Error 的錯(cuò)誤。不過(guò)以上的介紹應(yīng)該可以給大家一個(gè)簡(jiǎn)單的 WebServices 概念了吧?目前幾乎所有的程序語(yǔ)言都有 WebServices 的相關(guān)軟體包,不論您是 PHP 網(wǎng)頁(yè)制作者,或是 VB 窗口程序員,應(yīng)該都找到相關(guān)的軟體包,直接在您的網(wǎng)頁(yè) / 程序上面撰寫(xiě) WebServices 的 Client 以及 Server 。
截稿前消息∶全球最大的網(wǎng)絡(luò)書(shū)店 Amazon ,也開(kāi)始提供 WebServices 接口給代銷商( associates ,可以在個(gè)人網(wǎng)頁(yè)上放置連往 Amazon 的 icon 或連結(jié),藉此賺取部分成交金額)使用。代銷商現(xiàn)在可以利用 Amazon 提供的 WebServices 撰寫(xiě) Web/Desktop 應(yīng)用程序了!看來(lái)類似的 WebServices 將會(huì)逐漸在許多大站點(diǎn)中陸續(xù)被采用,或許 LinuxFab/SourceFab 可以考慮引進(jìn)此技術(shù),使本站成為華人 Open Source 界的網(wǎng)絡(luò)運(yùn)算中心。