您的位置:首页 > 编程语言 > C语言/C++

利用C++Builder实现Google的Web服务 (转)

2007-11-15 14:56 435 查看
http://blog.csdn.net/guanwen_zhang/archive/2007/11/04/1866346.aspx

Web服务是一个额外的接口,这个接口由某个网站提供,可以被其他的网站调用。

你可以把web服务想象成一个自我包含的组件,同时带有一种或多种的调用方法。他

可以驻扎在Inetnet的任何地方。通过他所提供的调用方法而被世界任何一个地方的客户

端所调用。
[align=left][/align]
[align=left]Google提供了一个Web服务让你可以使用他的数据库去搜索,方便的实现对网页的搜索。[/align]
[align=left]Google的Web服务主要提供三个方法:[/align]
[align=left] [/align]
[align=left]doGoogleSearch(), doGetCachedPage(), 和 doSpellingSuggestion().[/align]
[align=left]最常用的就是doGoogleSearch(),方法将返回和查询字符相符合的结果。[/align]
[align=left]然后这个方法返回一个GoogleSearchResult类的实例,这个实例中包含了搜索的结果。[/align]
[align=left][/align]
[align=left]实现Google的Web服务需要获得Google提供的许可证,现在这个许可证也不再发放,但可以在网上搜索到。[/align]
[align=left][/align]
[align=left]下面就详细介绍利用C++Builder实现对Google服务的使用:[/align]
[align=left]首先新建一个工程,保存为WebService.bpr,保存Cpp文件为MainUnit.cpp,[/align]
[align=left]再在File|New|Other...中选择WebServces页面,选择WSDL Importer,点击OK,[/align]
[align=left]出现WSDL Importer Wizard向导,在Location of WSDL File or URL中填入Google的Web服务[/align]
[align=left]接口的URL:http://api.google.com/GoogleSearch.wsdl,点击Next,Finish完成配置过程,此时[/align]
[align=left]C++Builder会自动生成Google服务的WSDL的描述文件,[/align]
[align=left]在窗口中添加一个Button、Label、Edit和CppWebBrowser,[/align]
[align=left]双击Button,在其中添加如下代码:[/align]
[align=left][/align]
void __fastcall TForm1::Button1Click(TObject *Sender)

{

AnsiString content;

IHTMLElement *body;

IHTMLDocument *document;

GoogleSearchResult *result;

_di_GoogleSearchPort search;

AnsiString quer = Edit1->Text;
if (quer == "")

{

ShowMessage("查询内容为空!");

return ;

}

search = GetGoogleSearchPort(true, "http://api.google.com/GoogleSearch.wsdl");

try

{

result = search->doGoogleSearch("tGCTJkYos3YItLYzI9Hg5quBRY8bGqiM", quer, 0, 10, false, "", false, "", "", "");

}

catch(Exception &exception)

{

ShowMessage("网络有故障!");

}
for (int i=0; i<10; i++)

{

AnsiString title = result->resultElements[i]->title;

AnsiString URL = result->resultElements[i]->URL;

AnsiString text = result->resultElements[i]->snippet;

content += "<a href=" + URL + " target=_blank>" + title + "</a><br>" + text + "<br><br>";

}
CppWebBrowser1->Navigate(L"about:blank");

AnsiString str = "<html>" + content +" </html>";

SetHtml(CppWebBrowser1, str);

}

//---------------------------------------------------------------------------

SetHtml的实现函数如下:

void __fastcall TForm1::SetHtml( TCppWebBrowser *WebBrowser,AnsiString Html )

{

IStream *Stream;

HGLOBAL hHTMLText;

IPersistStreamInit *psi;

if( WebBrowser->Document == NULL )

return;

hHTMLText = GlobalAlloc(GPTR, Html.Length() + 1 );

if(0== hHTMLText ) {

ShowMessage( "GlobalAlloc Error" );

return;

}

CopyMemory( hHTMLText, Html.c_str(), Html.Length() );

OleCheck( CreateStreamOnHGlobal( hHTMLText, true, &Stream ) );

try {

OleCheck( WebBrowser->Document->QueryInterface( __uuidof(IPersistStreamInit), (void **)&psi ) );

try {

OleCheck( psi->InitNew() );

OleCheck( psi->Load(Stream) );

} catch( ... ) {

psi->Release();

}

} catch( ... ) {

Stream->Release();

}

//delete psi;

psi->Release();

// delete Stream;

Stream->Release();

}

[align=left]还需要在头文件中添加#include "mshtml.h"文件,[/align]
[align=left]编译连接,生成可执行文件。[/align]
[align=left]在Edit中添加要搜索的内容,点击Button,即可执行,[/align]
[align=left]如果需要其他属性,还可以在result->resultElements[i]选择搜索结果的其他属性最后显示出来。[/align]
[align=left]搜索结果最后显示在ppWebBrowser中,由于发送XML文件、解析XML文件的过程,显示过程会有一定的时间间隔,需要耐心等待。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: