2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

Google搜索之WebService篇

 Joshua 2006-02-20

前 言

    通過(guò)本文,你將能了解到如何配置服務(wù)以及Google WebService的語(yǔ)法結(jié)構(gòu);怎樣個(gè)性化你的搜索,例如:國(guó)家、語(yǔ)言;怎樣提煉搜索結(jié)果。
    Google目前已經(jīng)成了Web上最流行的搜索引擎,為了讓諸如new content watchdog、GUI搜索工具和模式分析之類(lèi)的應(yīng)用程序成為可能,現(xiàn)在它們?yōu)?0億個(gè)頁(yè)面建立了索引,開(kāi)發(fā)者們可以通過(guò)基于SOAP的API進(jìn)行調(diào)用。
   
WebService 簡(jiǎn)介

    Web應(yīng)用的巨大成功和不斷發(fā)展,使其滲透到商業(yè)領(lǐng)域和個(gè)人生活的各個(gè)方面。人們只要使用瀏覽器,就可以享受到各種各樣的Web服務(wù),例如網(wǎng)上購(gòu)物,網(wǎng)上交易,網(wǎng)絡(luò)游戲,預(yù)定車(chē)票,網(wǎng)上聊天和交友等等。與此同時(shí),由于Web技術(shù)所帶來(lái)的優(yōu)勢(shì)(統(tǒng)一的客戶端和較好的維護(hù)性),使一些傳統(tǒng)的應(yīng)用紛紛轉(zhuǎn)型到基于B/S架構(gòu)的瘦客戶端應(yīng)用程序,這是因?yàn)樗軌虮苊饣ㄔ谧烂鎽?yīng)用程序發(fā)布上的高成本,也能夠很好的解決客戶和服務(wù)器之間的通信問(wèn)題。在客戶端和服務(wù)器之間的通信,一個(gè)完美的解決方案是使用HTTP協(xié)議來(lái)通信。這是因?yàn)槿魏芜\(yùn)行Web瀏覽器的機(jī)器都使用HTTP協(xié)議,可以很好地透過(guò)防火墻進(jìn)行通信。許多商業(yè)程序還面臨另一個(gè)問(wèn)題,那就是與其他程序的互操作性。目前有很多商業(yè)數(shù)據(jù)仍然在大型主機(jī)上以非關(guān)系文件(VSAM)的形式存放,并由COBOL語(yǔ)言編寫(xiě)的大型機(jī)程序訪問(wèn)。而且,還有很多商業(yè)程序使用C++、JAVA、VB和其他各種各樣的語(yǔ)言編寫(xiě)?,F(xiàn)在初了最簡(jiǎn)單的程序之外,所有的程序都需要與運(yùn)行在其他異構(gòu)平臺(tái)上的應(yīng)用程序集成并進(jìn)行數(shù)據(jù)交換。在以前,沒(méi)有一個(gè)應(yīng)用程序通信標(biāo)準(zhǔn)是獨(dú)立于平臺(tái)、組建模型和編程語(yǔ)言的。只有通過(guò)Web Service、客戶端和服務(wù)器才能夠自由的用HTTP進(jìn)行通信,不論兩個(gè)程序的平臺(tái)和編程語(yǔ)言是什么。Web Service技術(shù)完全基于標(biāo)準(zhǔn)的技術(shù),只有基于標(biāo)準(zhǔn),所有的開(kāi)放廠商才能有相同的標(biāo)準(zhǔn),才能夠在各自的平臺(tái)上開(kāi)發(fā)出具有跨平臺(tái)互操作能力的軟件產(chǎn)品和解決方案。標(biāo)準(zhǔn)時(shí)達(dá)成跨平臺(tái)互操作能力的靈魂。

    Web是為了程序到用戶的交互,而Web Service是為程序到程序的交互做準(zhǔn)備。Web Service使公司可以降低進(jìn)行電子商務(wù)的成本、更快的部署解決方案以及開(kāi)拓新機(jī)遇。達(dá)到這個(gè)目標(biāo)的關(guān)鍵在于通用的程序到程序通信模型,該模型應(yīng)建立在現(xiàn)有的和新興的標(biāo)準(zhǔn)之上。其中包括:HTTP,SOAP, WSDL, UDDI
   
      SOAP:是“Simple Object Access Protocol”的縮寫(xiě),SOAP是消息傳遞的協(xié)議,它規(guī)定了Web Services之間是怎樣傳遞信息的。
簡(jiǎn)單的說(shuō),SOAP規(guī)定了:
1. 傳遞信息的格式為XML。這就使Web Services能夠在任何平臺(tái)上,用任何語(yǔ)言進(jìn)行實(shí)現(xiàn)。
2. 遠(yuǎn)程對(duì)象方法調(diào)用的格式。規(guī)定了怎樣表示被調(diào)用對(duì)象以及調(diào)用的方法名稱和參數(shù)類(lèi)型等。
3. 參數(shù)類(lèi)型和XML格式之間的映射。這是因?yàn)?,被調(diào)用的方法有時(shí)候需要傳遞一個(gè)復(fù)雜的參數(shù),例如,一個(gè)Person對(duì)象。怎樣用XML來(lái)表示一個(gè)對(duì)象參數(shù),也是SOAP所定義的范圍。

    WSDL:是“Web Services Description Language”的縮寫(xiě)。WSDL是Web Services的定義語(yǔ)言。當(dāng)實(shí)現(xiàn)了某種服務(wù)的時(shí)候(如:股票查詢服務(wù)),為了讓別的程序調(diào)用,必須告訴大家服務(wù)接口。例如:服務(wù)名稱,服務(wù)所在的機(jī)器名稱,監(jiān)聽(tīng)端口號(hào),傳遞參數(shù)的類(lèi)型,個(gè)數(shù)和順序,返回結(jié)果的類(lèi)型等等。這樣別的應(yīng)用程序才能調(diào)用該服務(wù)。WSDL協(xié)議就是規(guī)定了有關(guān)Web Services描述的標(biāo)準(zhǔn)。

    UDDI:是“Universal Description, Discovery,and Integration”的縮寫(xiě)。簡(jiǎn)單說(shuō),UDDI用于集中存放和查找WSDL描述文件,起著目錄服務(wù)器的作用。


快速安裝

    本文的運(yùn)行環(huán)境是JDK1.3+Tomcat4.0+JSP。要使用Google的服務(wù),必須要有“license key”,可以在https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey中取得,輸入相應(yīng)的信息,然后到你的郵箱收取“license key”。接著還需要“Java API for XML Messaging”亦即“JAXM”。它是Java XML Pack的一部分,在http://java./xml/downloads/javaxmlpack.html提供。
    為了更簡(jiǎn)單的表達(dá),我直接用JSP模式,并使用手工編碼,沒(méi)有用IDE環(huán)境。
    解開(kāi)剛才下載的java_xml_pack-summer02_01.zip,找到j(luò)ava_xml_pack-summer-02_01\jaxp-1.2_01\xalan.jar文件,用WinRAR解開(kāi)把org文件夾拷貝到你的應(yīng)用程序的WEB-INF\classes下。找到j(luò)ava_xml_pack-summer-02_01\jaxm-1.1_01\lib\saaj-api.jar文件,解開(kāi)它并拷貝javax文件夾到同上的目錄。找到j(luò)ava_xml_pack-summer-02_01\jaxm-1.1_01\lib\jaxm-api.jar文件,解開(kāi)它并拷貝javax文件夾到相同目錄。找到j(luò)ava_xml_pack-summer-02_01\jaxp-1.2_01\jaxp-api.jar文件,解開(kāi)它并拷貝javax文件夾到相同目錄。找到j(luò)ava_xml_pack-summer-02_01\jaxm-1.1_01\jaxm\saaj-ri.jar文件,解開(kāi)并拷貝com文件夾到相同目錄。
    
   

程序源代碼

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="org.apache.xalan.processor.TransformerFactoryImpl"%>
<%@ page import="javax.xml.soap.SOAPConnectionFactory"%>
<%@ page import="javax.xml.soap.SOAPConnection"%>
<%@ page import="javax.xml.soap.MessageFactory"%>
<%@ page import="javax.xml.soap.SOAPMessage"%>
<%@ page import="javax.xml.soap.SOAPPart"%>
<%@ page import="javax.xml.soap.SOAPEnvelope"%>
<%@ page import="javax.xml.soap.SOAPBody"%>
<%@ page import="javax.xml.soap.SOAPElement"%>
<%@ page import="java.io.FileInputStream"%>
<%@ page import="javax.xml.transform.stream.StreamSource"%>
<%@ page import="javax.xml.messaging.URLEndpoint"%>
<%@ page import="javax.xml.transform.TransformerFactory"%>
<%@ page import="javax.xml.transform.Transformer"%>
<%@ page import="javax.xml.transform.Source"%>
<%@ page import="javax.xml.transform.stream.StreamResult"%>

<html>
<head>
<title>google WebService</title>
</head>
       
<%
try { 
       
    //
先建立一個(gè)連接
    SOAPConnectionFactory soapConnFactory =
                       SOAPConnectionFactory.newInstance();
    SOAPConnection connection =
                        soapConnFactory.createConnection();

    //著,創(chuàng)建消息
    MessageFactory messageFactory=MessageFactory.newInstance();
    SOAPMessage message=messageFactory.createMessage();
    
    //
消息部份創(chuàng)建SOAP對(duì)象         
    SOAPPart soapPart=message.getSOAPPart();
                        
    //
裝信息,根據(jù)C盤(pán)根目錄下search.msg文件進(jìn)行搜索
    StreamSource preppedMsgSrc=new StreamSource(new FileInputStream("/search.msg"));            
    soapPart.setContent(preppedMsgSrc);
    
    //
存消息
    message.saveChanges();
         
   
//發(fā)送到目標(biāo)地址
    URLEndpoint destination=
          new URLEndpoint("http://api.google.com/search/beta2");
    
   
//發(fā)送消息
    SOAPMessage reply=connection.call(message, destination);

    //保存輸出,建立傳出信息
   TransformerFactory transformerFactory =
                      TransformerFactory.newInstance();

   //根據(jù)樣式文件translate.xsl進(jìn)行解析
   Source styleSheet=new StreamSource("/translate.xsl");  
   Transformer transformer=
               transformerFactory.newTransformer(styleSheet);
         
  
//提取收到的內(nèi)容
   Source sourceContent=reply.getSOAPPart().getContent();
       
  
//建立輸出文件results.out
   StreamResult result=new StreamResult("/results.out"); 
   transformer.transform(sourceContent, result);
   out.println("文件已生成C:\results.out");
        
  
//關(guān)閉連接           
   connection.close();
}catch(Exception e){
    System.out.println(e.getMessage());
}
%>

</body>
</html>

    源代碼部分完全按照Google的規(guī)定進(jìn)行編寫(xiě),程序注解部分也在其中,這里就不羅嗦了。


搜索格式

<?xml version=‘1.0‘ encoding=‘UTF-8‘?>
<SOAP-ENV:Envelope 
          xmlns:SOAP-ENV="http://schemas./soap/envelope/" 
          xmlns:xsi="http://www./1999/XMLSchema-instance"
          xmlns:xsd="http://www./1999/XMLSchema">
   <SOAP-ENV:Body>
    <ns1:doGoogleSearch  xmlns:ns1="urn:GoogleSearch"
         SOAP-ENV:encodingStyle="http://schemas./soap/encoding/">
        
      <key xsi:type="xsd:string">00000000000000000000000000000000</key> 
      <q xsi:type="xsd:string">CSDN論壇</q>
      <start xsi:type="xsd:int">0</start>
      <maxResults xsi:type="xsd:int">10</maxResults>
      <filter xsi:type="xsd:boolean">false</filter>
      <restrict xsi:type="xsd:string"></restrict>
      <safeSearch xsi:type="xsd:boolean">false</safeSearch>
      <lr xsi:type="xsd:string"></lr>
      <ie xsi:type="xsd:string">latin1</ie>
      <oe xsi:type="xsd:string">latin1</oe>
    </ns1:doGoogleSearch>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

    search.msg文件標(biāo)簽<<key></key>之前的為固定格式,無(wú)需費(fèi)心。標(biāo)簽<key>就是本文第一部分所提到的“license key”,直接復(fù)制過(guò)來(lái)。標(biāo)簽<q>是指具體要搜索的內(nèi)容。標(biāo)簽<start>是指從第幾個(gè)開(kāi)始搜索。標(biāo)簽<maxResults>是指每次返回搜索結(jié)果的最大值,Google WebService規(guī)定,最大值只能是“10”。標(biāo)簽<filter>是指過(guò)濾掉結(jié)果中相似和域名相同的結(jié)果。標(biāo)簽<restrict>是指國(guó)家和主題的約束,例如要限制只在國(guó)內(nèi)搜索,就需要輸入countryCN;要限制只在Linux主題內(nèi)搜索,就輸入linux。標(biāo)簽<safeSearch>過(guò)濾掉成人信息。標(biāo)簽<lr>搜索的語(yǔ)言,例如只搜索簡(jiǎn)體中文,就要輸入lang_zh-CN。標(biāo)簽<ie>和<oe>分別指輸入和輸出的編碼格式默認(rèn)為latin1(UTF-8)。


解析格式

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www./1999/XSL/Transform">       
  <xsl:output method="text"/>        
    <xsl:template match="/">
      <xsl:apply-templates select="http://item"/>
    </xsl:template>        
    <xsl:template match="item">
   
      <xsl:value-of select="title" disable-output-escaping="yes"/>
      <xsl:text>
      </xsl:text>
      <xsl:value-of select="URL"/>
      <xsl:text>      
    </xsl:text>   
    <xsl:value-of select="summary"/>
  </xsl:template>        
</xsl:stylesheet>

    translate.xsl文件。我們從<xsl:value-of select="title" disable-output-escaping="yes"/>這一句開(kāi)始,select="title"確定了返回結(jié)果的第一部分為標(biāo)題。接下來(lái),select="URL"解析出URL地址。<xsl:text></xsl:text>暫且理解為換行標(biāo)簽吧。select="summary"解析出摘要。還有一些標(biāo)簽,詳情請(qǐng)參考“Google Web APIs Reference”。


后 記

    程序運(yùn)行以后所產(chǎn)生的結(jié)果results.out請(qǐng)大家自己去查看,在這里就不一一列舉了。
    創(chuàng)作這篇文章的目的純屬個(gè)人愛(ài)好,完全是對(duì)Google引擎的一種喜愛(ài)。文章不是很有深度,希望能給各位起到拋磚引玉的作用我就滿足了,更加豐富的功能還有待我們?nèi)ヌ剿鳎?BR>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多