我曾經(jīng)介紹過“使用Axis開發(fā)Web Service程序”的一些步驟,做為一個更有特色的應用范例,本次我將介紹使用Axis通過Web Service調(diào)用Google SOAP Search API,實現(xiàn)Google搜索、Google快照、Google拼寫這三項功能,包括示例源代碼。
一、環(huán)境配置
首先,沒有Java開發(fā)環(huán)境的,需要安裝一下環(huán)境,點這里查看《Java開發(fā)環(huán)境的詳細配置方法》,其實,本示例安裝JDK 1.42以及Eclipse 3.2就可以了。
二、將Apache Axis相關(guān)包文件放在WEB-INF\lib目錄下
從Apache的主頁上下載Axis包文件,復制到lib目錄下。
三、申請Google SOAP Search API license key
要使用Google的服務,必須要有“license key”,如果你有Gmail賬號,點這里就可以申請license key,這個license key是一段很長的字符串,每個key可以支持每天1000次的Google搜索。
四、下載WSDL文件,生成客戶端Java代碼
WSDL文件的下載地址參見:http://api.google.com/GoogleSearch.wsdl
生成客戶端代碼的批處理文件如下:
set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\workspace\test\src
set Package=com.google.api
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% GoogleSearch.wsdl
最后會生成下列代碼文件:
DirectoryCategory.java
GoogleSearchBindingStub.java
GoogleSearchPort_PortType.java
GoogleSearchResult.java
GoogleSearchService.java
GoogleSearchServiceLocator.java
ResultElement.java
五、編寫程序,調(diào)用Google SOAP Search API
在上面那個包下,編寫你自己的Java程序,就可以調(diào)用Google SOAP Search API.目前可以使用的Google服務有:網(wǎng)頁搜索,網(wǎng)頁快照,拼寫檢查這三個。
Java示例代碼如下,請使用前將clientKey替換為你自己的。替換后直接運行即可得出結(jié)果。
package com.google.api;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
public class ClientGoogle {
public static void main(String[] args) throws ServiceException,
RemoteException {
String clientKey = "kkkkkkkkkkkkkkkkkkkkkkkkkkey";
GoogleSearchServiceLocator service = new GoogleSearchServiceLocator();
GoogleSearchPort_PortType gsp = service.getGoogleSearchPort();
//Google Search API
GoogleSearchResult searchResult = gsp.doGoogleSearch(clientKey,
"www.williamlong.info", 0, 10, false, "", false, "", "latin1",
"latin1");
System.out.println("Google Search Results:");
System.out.println("======================");
ResultElement results[] = searchResult.getResultElements();
for (int counter = 0; counter < results.length; ++counter) {
ResultElement result = results[counter];
String returnResult = "('" + result.getTitle() + "','"
+ result.getURL() + "','" + result.getSnippet() + "')";
System.out.println("Return Result");
System.out.println(returnResult);
}
//Google CachedPage
byte[] cachedBytes = gsp.doGetCachedPage(clientKey,
"http://www.williamlong.info/");
System.out.println("Cached page:");
System.out.println("============");
String cachedString = new String(cachedBytes);
System.out.println(cachedString);
//Google SpellingSuggestion
String suggestion = (String) gsp.doSpellingSuggestion(clientKey,
"williamlong");
System.out.println(suggestion);
}
}
當然,你也可以不使用Apache Axis,Google自己也提供了一個API包可以做為客戶端調(diào)用,下載地址參見這里。
最后聲明一下,Google SOAP Search API是屬于實驗產(chǎn)品,每個license每天最多只允許搜索一千次,其許可協(xié)議注明不能使用于商業(yè)模式的網(wǎng)站,而對于個人研究來說,每天一千次的搜索也就足夠了。
相關(guān)專業(yè)名詞解釋:
Web Service:是一種革命性的分布是計算技術(shù)。它使用基于XML的消息處理作為基本的數(shù)據(jù)通訊方式,消除使用不同組件模型、操作系統(tǒng)和編程語言的系統(tǒng)之間存在的差異,使異類系統(tǒng)能夠作為計算網(wǎng)絡的一部分協(xié)同運行。開發(fā)人員可以使用像過去創(chuàng)建分布式應用程序時使用組件的方式,創(chuàng)建由各種來源的Web服務組合在一起的應用程序。由于Web服務是建立在一些通用協(xié)議的基礎上,如HTTP(Hypertext Transfer Protocol, WWW服務程序所用的協(xié)議),SOAP(Simple Object Access Protocol,簡單對象訪問協(xié)議),XML,WSDL(Web Services Description Language,Web服務描述語言),UDDI(Universal Description,Discovery,and Integration,通用描述發(fā)現(xiàn)和集成協(xié)議)等,這些協(xié)議在涉及到操作系統(tǒng)、對象模型和編程語言的選擇時,沒有任何傾向,因此Web服務將會有很強的生命力。
SOAP:是“Simple Object Access Protocol”的縮寫,SOAP是消息傳遞的協(xié)議,它規(guī)定了Web Services之間是怎樣傳遞信息的。簡單的說,SOAP規(guī)定了:
1. 傳遞信息的格式為XML.這就使Web Services能夠在任何平臺上,用任何語言進行實現(xiàn)。
2. 遠程對象方法調(diào)用的格式。規(guī)定了怎樣表示被調(diào)用對象以及調(diào)用的方法名稱和參數(shù)類型等。
3. 參數(shù)類型和XML格式之間的映射。這是因為,被調(diào)用的方法有時候需要傳遞一個復雜的參數(shù),例如,一個Person對象。怎樣用XML來表示一個對象參數(shù),也是SOAP所定義的范圍。
WSDL:是“Web Services Description Language”的縮寫。WSDL是Web Services的定義語言。當實現(xiàn)了某種服務的時候(如:股票查詢服務),為了讓別的程序調(diào)用,必須告訴大家服務接口。例如:服務名稱,服務所在的機器名稱,監(jiān)聽端口號,傳遞參數(shù)的類型,個數(shù)和順序,返回結(jié)果的類型等等。這樣別的應用程序才能調(diào)用該服務。WSDL協(xié)議就是規(guī)定了有關(guān)Web Services描述的標準。
UDDI:是“Universal Description, Discovery,and Integration”的縮寫。簡單說,UDDI用于集中存放和查找WSDL描述文件,起著目錄服務器的作用。
XML:(eXtensible Markup Language,可擴展標記語言)是Internet上數(shù)據(jù)表示和數(shù)據(jù)交換的新標準。它是ISO(International Organization for Standardization,國際標準化組織)的SGML(Standard for General Markup Language,通用標記語言標準)的一個簡化子集。XML關(guān)注信息本身,是Web上表示結(jié)構(gòu)化信息的一種標準文本格式。與傳統(tǒng)的注重頁面信息顯示的HTML(Hypertext Markup Language, 超文本鏈接標示語言)相比,關(guān)注于內(nèi)容的XML具有以下諸多優(yōu)點:良好的可擴展性,語言簡單有效,可自行定義標記;內(nèi)容與形式的分離,主要刻畫數(shù)據(jù)內(nèi)容,不考慮顯示效果;有嚴格的語法要求,便于分析統(tǒng)一和與數(shù)據(jù)庫信息轉(zhuǎn)換;便于傳輸,為純文本形式,可通過Http協(xié)議直接傳輸,可跨越防火墻;等等。XML的出現(xiàn)和發(fā)展對于Internet和Intranet產(chǎn)生了巨大的影響。