Come primo passo è necessario ottenere una google api key per poter utilizzare il WebService che Google ci mette a disposizione.
La si può ottenere qui http://google.com/apis/.
Una volta registrati si otterra' la key via email.
In delphi 7 e successivi c'e' un utile strumento, wsdl importer che importa i wsdl e ci crea un file di interfaccia verso gli oggetti messi a disposizione dal webservice.
Usarlo è piuttosto semplice:
Entriamo in delphi e dal menu
file->new->other
scegliamo
webservices->wsdl importer
Impostiamo l'url del wsdl in http://api.google.com/GoogleSearch.wsdl
Clicchiamo Next e poi Finish.
Nell'editor si aprira' automaticamente il file GoogleSearch.pas.
In questo file troveremo, tra le altre cose, la definizione della classe GoogleSearchPort
La definizione:
['{0B396A82-A4DD-69A7-A771-6D80F8831A71}']
function doGetCachedPage(const key: WideString; const url: WideString): TByteDynArray; stdcall;
function doSpellingSuggestion(const key: WideString; const phrase: WideString): WideString; stdcall;
function doGoogleSearch(const key: WideString; const q: WideString; const start: Integer; const maxResults: Integer; const filter: Boolean; const restrict: WideString; const safeSearch: Boolean; const lr: WideString; const ie: WideString; const oe: WideString
): GoogleSearchResult; stdcall;
end;
Notare i tre metodi che Google ci mette a disposizione:
- doGetCachedPage
- doSpellingSuggestion
- doGoogleSearch
Per testarli ho creato una form con un TEdit, un TMemo ed un TButton.
APIKEY rappresenta la key che ci ha fornito Google per poter utilizzare il WebService.
Proviamo i metodi uno ad uno.
doGetCachedPage
doGetCachedPage restituisce un TByteDynArray che troviamo nella unit types.
Quindi:
GoogleSearch
, Types;
Ciò che segue è come potrebbe essere una semplice funzione che usa il metodo doGetCachedPage:
googleResult : TByteDynArray;
google : GoogleSearchPort;
mPage : string;
i : integer;
begin
google := GetGoogleSearchPort();
googleResult := google.doGetCachedPage(APIKEY, edit1.Text);
mPage := '';
for i := 0 to length(googleResult) - 1 do
begin
mPage := mPage + char(googleResult[i]);
end;
Memo1.Lines.Text := mPage;
end;
doSpellingSuggestion
doSpellingSuggestion è il metodo più semplice dato che restituisce una semplice widestring.
google : GoogleSearchPort;
mWord : string;
begin
google := GetGoogleSearchPort();
mWord := google.doSpellingSuggestion(APIKEY, edit1.Text);
Memo1.Clear;
memo1.Lines.Add(mWord);
end;
doGoogleSearch
doGoogleSearch è il metodo che ci permette di effettuare ricerche.
Richiede questi parametri:
- key Google Api key
- q Il testo che stiamo cercando
- start Da quale risultato partiamo
- maxResults Quanti risultati volgiamo
- filter Filtrare i risultati simili
- restrict Restrizione di nazione o argomento
- safeSearch filtro pornografia
- lr restrizione di lingua
- ie input encoding
- oe output encoding
nessuno dei quali e' opzionale.
doGoogleSearch restituisce un oggetto di tipo GoogleSearchResult anch'esso definito nel wsdl e di conseguenza nel nostro GoogleSearch.pas generato automaticamente da wsdl importer.
Questa la dichiarazione:
...
published
property documentFiltering: Boolean;
property searchComments: WideString;
property estimatedTotalResultsCount: Integer;
property estimateIsExact: Boolean;
property resultElements: ResultElementArray;
property searchQuery: WideString;
property startIndex: Integer;
property endIndex: Integer;
property searchTips: WideString;
property directoryCategories: DirectoryCategoryArray;
property searchTime: Double;
end;
Un altro oggetto importante è ResultElement, ovvero ogni singolo risultato della ricerca. La dichiarazione:
...
published
property summary: WideString;
property URL: WideString;
property snippet: WideString;
property title: WideString;
property cachedSize: WideString;
property relatedInformationPresent: Boolean;
property hostName: WideString;
property directoryCategory: DirectoryCategory;
property directoryTitle: WideString;
end;
Vediamo un po' come possiamo implementare una semplice ricerca:
googleResult : GoogleSearchResult;
google : GoogleSearchPort;
i : integer;
begin
google := GetGoogleSearchPort();
googleResult := google.doGoogleSearch(
APIKEY, Edit1.Text, 0, 10, False, '', False, '', '', '');
Memo1.Clear;
Memo1.Lines.Add('Trovati ' + IntToStr(googleResult.estimatedTotalResultsCount) + ' risultati:';
Memo1.Lines.Add('');
for i := Low(googleResult.resultElements) to High(googleResult.resultElements) do
begin
Memo1.Lines.Add(IntToStr(i + 1));
Memo1.Lines.Add(googleResult.resultElements[i].title);
Memo1.Lines.Add(googleResult.resultElements[i].URL);
Memo1.Lines.Add('');
end;
end;
Allego un progettino di esempio dove ho cercato di utilizzare tutte le proprietà disponibili di GoogleSearchResult e di ResultElement:
TestGoogleSearch
Altri articoli di interesse:
- Come aggiungere google maps in una pagina web Questa cosa e' facile facile e di sicuro effetto. La...
- Inviare fax tramite Microsoft FaxServer con delphi uses ComObj; procedure TForm1.Button1Click(Sender: TObject); var mFax,mFaxDoc: Variant; begin...
- Attenti a Google map Credo conosciate già la vista stradale delle maps di google....
- Delphi per Vista e Delphi per PHP. Rumors. Dal blog di Marco Cantù apprendo che si sono avute...
- Delphi 2007 per Win32 e Delphi 2007 for PHP I rumors sulle nuove versioni di Delphi sono diventati ufficiali....







1 comment
Comments feed for this article
Trackback link: http://www.sinkro.net/2006/07/23/usare-google-da-delphi/trackback/