程序源代码
<%@ 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引擎的一种喜爱。文章不是很有深度,希望能给各位起到抛砖引玉的作用我就满足了,更加丰富的功能还有待我们去探索!