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:
[delphi]
GoogleSearchPort = interface(IInvokable)
[‘{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;
[/delphi]
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:
[delphi]
uses
GoogleSearch
, Types;
[/delphi]
Ciò che segue è come potrebbe essere una semplice funzione che usa il metodo doGetCachedPage:
[delphi]
var
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;
[/delphi]
doSpellingSuggestion
doSpellingSuggestion è il metodo più semplice dato che restituisce una semplice widestring.
[delphi]
var
google : GoogleSearchPort;
mWord : string;
begin
google := GetGoogleSearchPort();
mWord := google.doSpellingSuggestion(APIKEY, edit1.Text);
Memo1.Clear;
memo1.Lines.Add(mWord);
end;
[/delphi]
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:
[delphi]
GoogleSearchResult = class(TRemotable)
…
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;
[/delphi]
Un altro oggetto importante è ResultElement, ovvero ogni singolo risultato della ricerca. La dichiarazione:
[delphi]
ResultElement = class(TRemotable)
…
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;
[/delphi]
Vediamo un po’ come possiamo implementare una semplice ricerca:
[delphi]
var
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;
[/delphi]
Allego un progettino di esempio dove ho cercato di utilizzare tutte le proprietà disponibili di GoogleSearchResult e di ResultElement:
TestGoogleSearch
Comments are now closed.
1 comment