Unit googlewebapi; {$mode objfpc}{$H+} interface uses SysUtils, Classes, base_service_intf; Type TResultElement = class(TBaseComplexRemotable) private FcachedSize: string; FdirectoryTitle: string; FhostName: string; FrelatedInformationPresent: boolean; Fsnippet: string; Fsummary: string; Ftitle: string; FURL: string; Published property summary : string Read Fsummary Write Fsummary; property URL : string Read FURL Write FURL; property snippet: string Read Fsnippet Write Fsnippet; property title : string Read Ftitle Write Ftitle; property cachedSize : string Read FcachedSize Write FcachedSize; property relatedInformationPresent : boolean Read FrelatedInformationPresent Write FrelatedInformationPresent; property hostName : string Read FhostName Write FhostName; property directoryTitle : string Read FdirectoryTitle Write FdirectoryTitle; End; TResultElementArray = class(TBaseObjectArrayRemotable) private function GetItem(AIndex: Integer): TResultElement; Public class function GetItemClass():TBaseRemotableClass;override; property Item[AIndex:Integer] : TResultElement Read GetItem;Default; End; TDirectoryCategory = class(TBaseComplexRemotable) private FfullViewableName: string; FspecialEncoding: string; Published property fullViewableName : string Read FfullViewableName Write FfullViewableName; property specialEncoding : string Read FspecialEncoding Write FspecialEncoding; End; TDirectoryCategoryArray = class(TBaseObjectArrayRemotable) private function GetItem(AIndex: Integer): TDirectoryCategory; Public class function GetItemClass():TBaseRemotableClass;override; property Item[AIndex:Integer] : TDirectoryCategory Read GetItem;Default; End; TGoogleSearchResult = class(TBaseComplexRemotable) private FdirectoryCategories: TDirectoryCategoryArray; FdocumentFiltering: Boolean; FendIndex: Integer; FestimatedTotalResultsCount: Integer; FestimateIsExact: Boolean; FresultElements: TResultElementArray; FsearchComments: string; FsearchQuery: string; FsearchTime: Double; FsearchTips: string; FstartIndex: Integer; Public constructor Create();override; destructor Destroy();override; Published property documentFiltering : Boolean Read FdocumentFiltering Write FdocumentFiltering; property searchComments :string Read FsearchComments Write FsearchComments; property estimatedTotalResultsCount: Integer Read FestimatedTotalResultsCount Write FestimatedTotalResultsCount; property estimateIsExact : Boolean Read FestimateIsExact Write FestimateIsExact; property searchQuery : string Read FsearchQuery Write FsearchQuery; property startIndex : Integer Read FstartIndex Write FstartIndex; property endIndex : Integer Read FendIndex Write FendIndex; property searchTips :string Read FsearchTips Write FsearchTips; property searchTime : Double Read FsearchTime Write FsearchTime; property resultElements : TResultElementArray Read FresultElements Write FresultElements; property directoryCategories : TDirectoryCategoryArray Read FdirectoryCategories Write FdirectoryCategories; End; IGoogleSearch = Interface ['{17FCCC65-4A0B-4D19-93F6-F69EAA719CA3}'] function doSpellingSuggestion( const key:string; const phrase:string ):string; function doGoogleSearch( Const key : string; Const q : string; Const start : Integer; Const maxResults : Integer; Const filter : Boolean; Const restrict : string; Const safeSearch : Boolean; Const lr : string; Const ie : string; Const oe : string ) : TGoogleSearchResult ; End; Implementation uses base_soap_formatter; Const GOOGLE_NAMESPACE = 'urn:GoogleSearch'; { TResultElementArray } function TResultElementArray.GetItem(AIndex: Integer): TResultElement; begin Result := Inherited GetItem(AIndex) As TResultElement; end; class function TResultElementArray.GetItemClass(): TBaseRemotableClass; begin Result:= TResultElement; end; { TGoogleSearchResult } constructor TGoogleSearchResult.Create(); begin inherited Create(); FresultElements := TResultElementArray.Create(); FdirectoryCategories := TDirectoryCategoryArray.Create(); end; destructor TGoogleSearchResult.Destroy(); begin FdirectoryCategories.Free(); FresultElements.Free(); inherited Destroy(); end; { TDirectoryCategoryArray } function TDirectoryCategoryArray.GetItem(AIndex: Integer): TDirectoryCategory; begin Result := Inherited GetItem(AIndex) As TDirectoryCategory; end; class function TDirectoryCategoryArray.GetItemClass(): TBaseRemotableClass; begin Result:= TDirectoryCategory; end; Initialization GetTypeRegistry().Register(GOOGLE_NAMESPACE,TypeInfo(TDirectoryCategory),'DirectoryCategory'); GetTypeRegistry().Register(GOOGLE_NAMESPACE,TypeInfo(TDirectoryCategoryArray),'DirectoryCategoryArray'); GetTypeRegistry().Register(GOOGLE_NAMESPACE,TypeInfo(TResultElement),'ResultElement'); GetTypeRegistry().Register(GOOGLE_NAMESPACE,TypeInfo(TResultElementArray),'ResultElementArray'); GetTypeRegistry().Register(GOOGLE_NAMESPACE,TypeInfo(TGoogleSearchResult),'GoogleSearchResult'); End.