利用C++Builder實現Google的Web服務 )

來源:互聯網
上載者:User
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檔案的過程,顯示過程會有一定的時間間隔,需要耐心等待。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.