http://blog.csdn.net/guanwen_zhang/archive/2007/11/04/1866346.aspx
Web服務是一個額外的介面,這個介面由某個網站提供,可以被其他的網站調用。
你可以把web服務想象成一個自我包含的組件,同時帶有一種或多種的調用方法。他
可以駐紮在Inetnet的任何地方。通過他所提供的調用方法而被世界任何一個地方的客戶
端所調用。Google提供了一個Web服務讓你可以使用他的資料庫去搜尋,方便的實現對網頁的搜尋。Google的Web服務主要提供三個方法: doGoogleSearch(), doGetCachedPage(), 和 doSpellingSuggestion().最常用的就是doGoogleSearch(),方法將返回和查詢字元相符合的結果。然後這個方法返回一個GoogleSearchResult類的執行個體,這個執行個體中包含了搜尋的結果。實現Google的Web服務需要獲得Google提供的許可證,現在這個許可證也不再發放,但可以在網上搜尋到。下面就詳細介紹利用C++Builder實現對Google服務的使用:首先建立一個工程,儲存為WebService.bpr,儲存Cpp檔案為MainUnit.cpp,再在File|New|Other...中選擇WebServces頁面,選擇WSDL Importer,點擊OK,出現WSDL Importer Wizard嚮導,在Location of WSDL File or URL中填入Google的Web服務介面的URL:http://api.google.com/GoogleSearch.wsdl,點擊Next,Finish完成配置過程,此時C++Builder會自動產生Google服務的WSDL的描述檔案,在視窗中添加一個Button、Label、Edit和CppWebBrowser,雙擊Button,在其中添加如下代碼: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();
}
還需要在標頭檔中添加#include "mshtml.h"檔案,編譯串連,產生可執行檔。在Edit中添加要搜尋的內容,點擊Button,即可執行,如果需要其他屬性,還可以在result->resultElements[i]選擇搜尋結果的其他屬性最後顯示出來。搜尋結果最後顯示在ppWebBrowser中,由於發送XML檔案、解析XML檔案的過程,顯示過程會有一定的時間間隔,需要耐心等待。