关于web service及Google API的问题(80分)

  • 主题发起人 主题发起人 jhliang
  • 开始时间 开始时间
J

jhliang

Unregistered / Unconfirmed
GUEST, unregistred user!
Google可以web service方式提供搜索服务,详见:
http://www.google.com/apis
其中有java及MS .net实现的例子。
我想在D6中实现它。但遇到一个问题。
总出现"Intenal server error(500)"错误。
请各位高手指教。
如需源码请 mailto:hrbljh@0451.com
 
怎么没有人回答。
不过,这个问题我已经解决了。
如对这方面感兴趣,请与我联系。

 
google好像已经不能访问了。
楼主的帖子所说是否因为编码问题?
 
google不能访问,我使用它的web service还是可以搜索,结果一样。
jhliang的问题原因何在?不会是不是问题的问题吧。公布一下?
 
jhliang:
你好,
我太喜欢Google了,可惜上不了。
可以把您的源码给我吗?
rie@21cn.com
 
  有调查显示,搜索引擎服务已成为我国网民使用最多的服务项目之一,而且据保守估计,其每年的市场价值已超过一亿元人民币,并仍旧在飞速发展中。但人们也不无忧虑地注意到,利用这个日益完善的网络工具,不仅能够方便地检索到自己需要的工作与生活资料,也能“方便”地查询到大量的色情、赌博以及其他不健康的站点。但最近以来,记者注意到
,不少网站应网民的要求,开始了自发的“大扫除”,为网民营造一个更加干净的网络空间。同时,有关部门也加强了对信息搜索业务的监管,据消息灵通人士透露,某些搜索引擎服务已被“无限期停止”。
  地毯式搜索变成“吸尘器”
  显然,那种不受控制的“地毯式搜索”,使得搜索引擎在很多时候变成了纯粹的“吸尘器”。国内的网站或者搜索引擎提供商由于能很方便地与我国网民乃至相关职能单位进行沟通,可以快速发现和避免引导用户登录那些不法网站或页面。但对那些服务器本身在国外、在我国又没有建立任何分支机构的搜索引擎提供商来说,无论“自律”还是“监督”都无从谈起。有业内人士对记者表示,由于那些国外搜索引擎提供商没有正式合法地在我国开展业务,其中文搜索服务被无限期封闭实属情理之中。
  互联网不应该毫无约束
  占中国80%市场的搜索引擎服务商百度公司有关高层人士昨天对记者表示,互联网不应该也不可能毫无规则约束。百度方面还向记者表示:“百度一直在努力成为更方便快捷与健康向上的搜索引擎,而且近来我们通过各种技术手段,加强了对那些不健康的信息的有效过滤。”
  雅虎中国昨天在接受记者采访时则表示,雅虎中国网站的搜索服务近期并没有受到影响,此外更强调说,他们近来加强了对雅虎中国自有搜索引擎的建设,请来大批专业人士共同强化本地数据库的建设,“目前绝大部分的信息在雅虎自己的搜索引擎范围内就可以完成了,不用利用雅虎合作伙伴的搜索引擎。”
 
能给我email一份源码么?
njwfd@otcaix.iscas.ac.cn
 
简介 Google 开放式 WebServices 查询接口

作者:smallufo [2002-04-29]

查找引擎之王 google 于 4/11 开放了它的查询接口,可以让全世界各地的 Java 以及 .NET 程序员,免费地以 WebServices 的方式,对 google 下查找指令,并且可以将结果使用于自己的程序或网页中,并且几乎目前所有的程序语言都有 WebServices 的相关软体包,本次介绍应该可以给大家一个简单的 WebServices 概念 ...
查找引擎之王 google 于 4/11 开放了它的查询接口,可以让全世界各地的 Java 以及 .NET 程序员,免费地以 WebServices 的方式,对 google 下查找指令,并且可以将结果使用于自己的程序或网页中。不过使用上也有限制,它一天只允许未付费的程序员查找 1000 次。要使用前,必须先向 google 注册帐号,取得一个 32 位长度的 license key ,每次呼叫查询时,必须带入这个 license key 即可使用。因为 WebServices 以 WSDL (Web Service Definition Language) 的方式描述所开放的接口,走的通讯协定是 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);
// 产生查找对象,设定输出编码 (big5)
GoogleSearch s = new GoogleSearch();
s.setKey(clientKey);
s.setOutputEncoding("big5");
try
{
s.setQueryString(qyeryString);
GoogleSearchResult r = s.doSearch();
System.out.println(" 查找结果 :");
System.out.println("======================");
System.out.println(r.toString());
}
catch (GoogleSearchFault e)
{
System.out.println(" 查找失败 ");
}
}
}

使用方法以及查询结果(执行环境∶ Linux + JDK 1.3.1_01 ,主机位于防火墙后端)∶

java -classpath .:../lib/googleapi.jar
SearchGoogle xxxxxxxxx- 我的 LicenseKey-xxxxxxxxx LinuxFab
查询字符串 = LinuxFab
查找结果 :
======================
{
TM = 0.048257
Q = "LinuxFab"
CT = ""
TT = ""
CATs =
{
{SE="Big5", FVN="Top/World/Chinese_Traditional/ 计算机 /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 早报】 "
Snippet = " ◆ 【 LinuxFab 早报】 . ... 5, ◇ 【 LinuxFab 本周专栏】 如何制作简易 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 早报】 - Linux 2.4.10 内核中剽窃了 ┅ "
Snippet = " ◇ 【 LinuxFab 早报】 - Linux 2.4.10 内核中 剽窃了 ┅ . 发信人 : 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 = ""
],
下略

当然,输出结果不是这么杂乱, google 所提供的 api 有各种查找设定方法,例如从第几笔开始查找、设定传回笔数、偏好查找(避免查找 java 时传回 咖啡 的结果) ... 等等,各位可以好好玩一玩。
如果您不想使用 google 的 library ,您也可以利用手边的 WebServices 工具程序,自动抓取 google 所提供的 WSDL 文档(位于∶ http://api.google.com/GoogleSearch.wsdl ),并且产生相关的 java 对象。以下以 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 的强处在于它自动为您处理所有 XML <-> Java Object Mapping 以及 SOAP 传输的问题,您甚至不需要看懂 WSDL 便可直接使用 WebServices !我们现在已经将 WSDL 转换成 Java 对象, package 名为 example ,接下来便是撰写 Client 去连接 google ∶
import java.io.*;
import electric.registry.Registry;
// 包含于 GLUE-STD.jar ,为 GLUE 标准版的 library
import example.*;
//GLUE 自动为您由 WSDL 产生出来的 Java 对象
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 产生的接口,去 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(" 查找结果 :");
System.out.println("======================");
System.out.println(" 回应数量∶ " + result.resultElements.length );
System.out.println(" 第一笔结果∶ ");
System.out.println(" 简介∶ " + result.resultElements[0].summary );
System.out.println("URL ∶ " + result.resultElements[0].URL );
System.out.println(" 片段∶ " + result.resultElements[0].snippet );
System.out.println(" 标头∶ " + result.resultElements[0].title );
System.out.println(" 主机∶ " + result.resultElements[0].hostName );
System.out.println(" 目录∶ " + result.resultElements[0].directoryTitle );
}
catch (electric.registry.RegistryException e)
{
System.out.println(" 错误∶ " + e.getMessage());
}
}
}


执行结果指令如下∶
$ java -classpath .:../lib/GLUE-STD.jar:../lib/j2ee.jar:../lib/jnet.jar
SearchGoogle2 xxxxxxxxx- 我的 LicenseKey-xxxxxxxxx LinuxFab
查询字符串 = LinuxFab
查找结果 :
======================
回应数量∶ 1
第一笔结果∶
简介∶
URL ∶ http://bbs.ee.ntu.edu.tw/boards/Linux/21/
片段∶◆ 【 LinuxFab 早报】 . ... 5, ◇ 【 LinuxFab 本周专栏】 如何制作简易 Floppy Liunx, linuxfab. 07/13/01. ...
标头∶◆ 【 LinuxFab 早报】
主机∶
目录∶

要注意的是,这只是 google beta2 版本的 WSDL ,未来接口一定会有所更动,而且远端主机 (api.google.com) 仍然不太稳定,有时候会连不过去,有时又会出现 Internal Server Error 的错误。不过以上的介绍应该可以给大家一个简单的 WebServices 概念了吧?目前几乎所有的程序语言都有 WebServices 的相关软体包,不论您是 PHP 网页制作者,或是 VB 窗口程序员,应该都找到相关的软体包,直接在您的网页 / 程序上面撰写 WebServices 的 Client 以及 Server 。
截稿前消息∶全球最大的网络书店 Amazon ,也开始提供 WebServices 接口给代销商( associates ,可以在个人网页上放置连往 Amazon 的 icon 或连结,藉此赚取部分成交金额)使用。代销商现在可以利用 Amazon 提供的 WebServices 撰写 Web/Desktop 应用程序了!看来类似的 WebServices 将会逐渐在许多大站点中陆续被采用,或许 LinuxFab/SourceFab 可以考虑引进此技术,使本站成为华人 Open Source 界的网络运算中心。
 
请问,用google api, 中文的检索怎么写?
我做了一个, D7下 用如下语句
Results := GetGoogleSearchPort.doGoogleSearch('xxxxxxxxxxxxxxxxxxxxxx',
edit.text, 0, 10, True, '', True, '', '', '');
可用 '中国' 查出来的结果总是和 www.google.com 查出来的不一致.


恳请各位大侠帮忙, 不胜感谢!
 
多人接受答案了。
 
后退
顶部