Google搜索之WebService篇(二)

类别:Java 点击:0 评论:0 推荐:

程序源代码

<%@ 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 { 
       
    //首先建立一个连接
    SOAPConnectionFactory soapConnFactory =
                       SOAPConnectionFactory.newInstance();
    SOAPConnection connection =
                        soapConnFactory.createConnection();

    //接着,创建消息
    MessageFactory messageFactory=MessageFactory.newInstance();
    SOAPMessage message=messageFactory.createMessage();
    
    //为消息部份创建SOAP对象         
    SOAPPart soapPart=message.getSOAPPart();
                        
    //组装信息,根据C盘根目录下search.msg文件进行搜索
    StreamSource preppedMsgSrc=new StreamSource(new FileInputStream("/search.msg"));            
    soapPart.setContent(preppedMsgSrc);
    
    //保存消息
    message.saveChanges();
         
    //发送到目标地址
    URLEndpoint destination=
          new URLEndpoint("http://api.google.com/search/beta2");
    
    //发送消息
    SOAPMessage reply=connection.call(message, destination);

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

   //根据样式文件translate.xsl进行解析
   Source styleSheet=new StreamSource("/translate.xsl");  
   Transformer transformer=
               transformerFactory.newTransformer(styleSheet);
         
   //提取收到的内容
   Source sourceContent=reply.getSOAPPart().getContent();
       
   //建立输出文件results.out
   StreamResult result=new StreamResult("/results.out"); 
   transformer.transform(sourceContent, result);
   out.println("文件已生成C:\results.out");
        
   //关闭连接           
   connection.close();
}catch(Exception e){
    System.out.println(e.getMessage());
}
%>

</body>
</html>

    源代码部分完全按照Google的规定进行编写,程序注解部分也在其中,这里就不罗嗦了。

搜索格式

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope 
          xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
          xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/1999/XMLSchema">
   <SOAP-ENV:Body>
    <ns1:doGoogleSearch  xmlns:ns1="urn:GoogleSearch"
         SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/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文件标签<<key></key>之前的为固定格式,无需费心。标签<key>就是本文第一部分所提到的“license key”,直接复制过来。标签<q>是指具体要搜索的内容。标签<start>是指从第几个开始搜索。标签<maxResults>是指每次返回搜索结果的最大值,Google WebService规定,最大值只能是“10”。标签<filter>是指过滤掉结果中相似和域名相同的结果。标签<restrict>是指国家和主题的约束,例如要限制只在国内搜索,就需要输入countryCN;要限制只在Linux主题内搜索,就输入linux。标签<safeSearch>过滤掉成人信息。标签<lr>搜索的语言,例如只搜索简体中文,就要输入lang_zh-CN。标签<ie>和<oe>分别指输入和输出的编码格式默认为latin1(UTF-8)。

解析格式

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">       
  <xsl:output method="text"/>        
    <xsl:template match="/">
      <xsl:apply-templates select="//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"/>这一句开始,select="title"确定了返回结果的第一部分为标题。接下来,select="URL"解析出URL地址。<xsl:text></xsl:text>暂且理解为换行标签吧。select="summary"解析出摘要。还有一些标签,详情请参考“Google Web APIs Reference”。

后 记

    程序运行以后所产生的结果results.out请大家自己去查看,在这里就不一一列举了。
    创作这篇文章的目的纯属个人爱好,完全是对Google引擎的一种喜爱。文章不是很有深度,希望能给各位起到抛砖引玉的作用我就满足了,更加丰富的功能还有待我们去探索!

本文地址:http://com.8s8s.com/it/it16568.htm