diff options
author | steve <steve@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2016-05-30 16:57:13 +0000 |
---|---|---|
committer | steve <steve@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2016-05-30 16:57:13 +0000 |
commit | 6b082ee8b43e52fe18c5799f8f4c82a8c7519f5b (patch) | |
tree | f906b179f5b20f4be91a286f8f5a01fc4fac51e2 /packages/googleapi/src/googlekgsearch.pp | |
parent | 554d71b9e544a9776797dcca9983060fd998fd0b (diff) | |
parent | ba5f910eaac131cb7d3553c9bef173a81c422a1c (diff) | |
download | fpc-6b082ee8b43e52fe18c5799f8f4c82a8c7519f5b.tar.gz |
auto-merge: trunk -> InterfaceRTTIinterfacertti
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/interfacertti@33858 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/googleapi/src/googlekgsearch.pp')
-rw-r--r-- | packages/googleapi/src/googlekgsearch.pp | 370 |
1 files changed, 370 insertions, 0 deletions
diff --git a/packages/googleapi/src/googlekgsearch.pp b/packages/googleapi/src/googlekgsearch.pp new file mode 100644 index 0000000000..0ee39b5a65 --- /dev/null +++ b/packages/googleapi/src/googlekgsearch.pp @@ -0,0 +1,370 @@ +unit googlekgsearch; +{$MODE objfpc} +{$H+} + +interface + +uses sysutils, classes, googleservice, restbase, googlebase; + +type + + //Top-level schema types + TSearchResponse = Class; + TSearchResponseArray = Array of TSearchResponse; + //Anonymous types, using auto-generated names + + { -------------------------------------------------------------------- + TSearchResponse + --------------------------------------------------------------------} + + TSearchResponse = Class(TGoogleBaseObject) + Private + Fcontext : TJSONSchema; + F_type : TJSONSchema; + FitemListElement : TTJSONSchemaArray; + Protected + Class Function ExportPropertyName(Const AName : String) : string; override; + //Property setters + Procedure Setcontext(AIndex : Integer; const AValue : TJSONSchema); virtual; + Procedure Set_type(AIndex : Integer; const AValue : TJSONSchema); virtual; + Procedure SetitemListElement(AIndex : Integer; const AValue : TTJSONSchemaArray); virtual; + //2.6.4. bug workaround + {$IFDEF VER2_6} + Procedure SetArrayLength(Const AName : String; ALength : Longint); override; + {$ENDIF VER2_6} + Public + Published + Property context : TJSONSchema Index 0 Read Fcontext Write Setcontext; + Property _type : TJSONSchema Index 8 Read F_type Write Set_type; + Property itemListElement : TTJSONSchemaArray Index 16 Read FitemListElement Write SetitemListElement; + end; + TSearchResponseClass = Class of TSearchResponse; + + { -------------------------------------------------------------------- + TEntitiesResource + --------------------------------------------------------------------} + + + //Optional query Options for TEntitiesResource, method Search + + TEntitiesSearchOptions = Record + query : String; + ids : String; + languages : String; + types : String; + indent : boolean; + prefix : boolean; + limit : integer; + end; + + TEntitiesResource = Class(TGoogleResource) + Public + Class Function ResourceName : String; override; + Class Function DefaultAPI : TGoogleAPIClass; override; + Function Search(AQuery : string = '') : TSearchResponse; + Function Search(AQuery : TEntitiessearchOptions) : TSearchResponse; + end; + + + { -------------------------------------------------------------------- + TKgsearchAPI + --------------------------------------------------------------------} + + TKgsearchAPI = Class(TGoogleAPI) + Private + FEntitiesInstance : TEntitiesResource; + Function GetEntitiesInstance : TEntitiesResource;virtual; + Public + //Override class functions with API info + Class Function APIName : String; override; + Class Function APIVersion : String; override; + Class Function APIRevision : String; override; + Class Function APIID : String; override; + Class Function APITitle : String; override; + Class Function APIDescription : String; override; + Class Function APIOwnerDomain : String; override; + Class Function APIOwnerName : String; override; + Class Function APIIcon16 : String; override; + Class Function APIIcon32 : String; override; + Class Function APIdocumentationLink : String; override; + Class Function APIrootUrl : string; override; + Class Function APIbasePath : string;override; + Class Function APIbaseURL : String;override; + Class Function APIProtocol : string;override; + Class Function APIservicePath : string;override; + Class Function APIbatchPath : String;override; + Class Function APIAuthScopes : TScopeInfoArray;override; + Class Function APINeedsAuth : Boolean;override; + Class Procedure RegisterAPIResources; override; + //Add create function for resources + Function CreateEntitiesResource(AOwner : TComponent) : TEntitiesResource;virtual;overload; + Function CreateEntitiesResource : TEntitiesResource;virtual;overload; + //Add default on-demand instances for resources + Property EntitiesResource : TEntitiesResource Read GetEntitiesInstance; + end; + +implementation + + +{ -------------------------------------------------------------------- + TSearchResponse + --------------------------------------------------------------------} + + +Procedure TSearchResponse.Setcontext(AIndex : Integer; const AValue : TJSONSchema); + +begin + If (Fcontext=AValue) then exit; + Fcontext:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TSearchResponse.Set_type(AIndex : Integer; const AValue : TJSONSchema); + +begin + If (F_type=AValue) then exit; + F_type:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TSearchResponse.SetitemListElement(AIndex : Integer; const AValue : TTJSONSchemaArray); + +begin + If (FitemListElement=AValue) then exit; + FitemListElement:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Class Function TSearchResponse.ExportPropertyName(Const AName : String) :String; + +begin + Case AName of + '_type' : Result:='type'; + else + Result:=Inherited ExportPropertyName(AName); + end; +end; + +//2.6.4. bug workaround +{$IFDEF VER2_6} +Procedure TSearchResponse.SetArrayLength(Const AName : String; ALength : Longint); + +begin + Case AName of + 'itemlistelement' : SetLength(FitemListElement,ALength); + else + Inherited SetArrayLength(AName,ALength); + end; +end; +{$ENDIF VER2_6} + + + + +{ -------------------------------------------------------------------- + TEntitiesResource + --------------------------------------------------------------------} + + +Class Function TEntitiesResource.ResourceName : String; + +begin + Result:='entities'; +end; + +Class Function TEntitiesResource.DefaultAPI : TGoogleAPIClass; + +begin + Result:=TkgsearchAPI; +end; + +Function TEntitiesResource.Search(AQuery : string = '') : TSearchResponse; + +Const + _HTTPMethod = 'GET'; + _Path = 'v1/entities:search'; + _Methodid = 'kgsearch.entities.search'; + +begin + Result:=ServiceCall(_HTTPMethod,_Path,AQuery,Nil,TSearchResponse) as TSearchResponse; +end; + + +Function TEntitiesResource.Search(AQuery : TEntitiessearchOptions) : TSearchResponse; + +Var + _Q : String; + +begin + _Q:=''; + AddToQuery(_Q,'query',AQuery.query); + AddToQuery(_Q,'ids',AQuery.ids); + AddToQuery(_Q,'languages',AQuery.languages); + AddToQuery(_Q,'types',AQuery.types); + AddToQuery(_Q,'indent',AQuery.indent); + AddToQuery(_Q,'prefix',AQuery.prefix); + AddToQuery(_Q,'limit',AQuery.limit); + Result:=Search(_Q); +end; + + + +{ -------------------------------------------------------------------- + TKgsearchAPI + --------------------------------------------------------------------} + +Class Function TKgsearchAPI.APIName : String; + +begin + Result:='kgsearch'; +end; + +Class Function TKgsearchAPI.APIVersion : String; + +begin + Result:='v1'; +end; + +Class Function TKgsearchAPI.APIRevision : String; + +begin + Result:='20151215'; +end; + +Class Function TKgsearchAPI.APIID : String; + +begin + Result:='kgsearch:v1'; +end; + +Class Function TKgsearchAPI.APITitle : String; + +begin + Result:='Knowledge Graph Search API'; +end; + +Class Function TKgsearchAPI.APIDescription : String; + +begin + Result:='Knowledge Graph Search API allows developers to search the Google Knowledge Graph for entities.'; +end; + +Class Function TKgsearchAPI.APIOwnerDomain : String; + +begin + Result:='google.com'; +end; + +Class Function TKgsearchAPI.APIOwnerName : String; + +begin + Result:='Google'; +end; + +Class Function TKgsearchAPI.APIIcon16 : String; + +begin + Result:='http://www.google.com/images/icons/product/search-16.gif'; +end; + +Class Function TKgsearchAPI.APIIcon32 : String; + +begin + Result:='http://www.google.com/images/icons/product/search-32.gif'; +end; + +Class Function TKgsearchAPI.APIdocumentationLink : String; + +begin + Result:='https://developers.google.com/knowledge-graph/'; +end; + +Class Function TKgsearchAPI.APIrootUrl : string; + +begin + Result:='https://kgsearch.googleapis.com/'; +end; + +Class Function TKgsearchAPI.APIbasePath : string; + +begin + Result:=''; +end; + +Class Function TKgsearchAPI.APIbaseURL : String; + +begin + Result:='https://kgsearch.googleapis.com/'; +end; + +Class Function TKgsearchAPI.APIProtocol : string; + +begin + Result:='rest'; +end; + +Class Function TKgsearchAPI.APIservicePath : string; + +begin + Result:=''; +end; + +Class Function TKgsearchAPI.APIbatchPath : String; + +begin + Result:='batch'; +end; + +Class Function TKgsearchAPI.APIAuthScopes : TScopeInfoArray; + +begin + SetLength(Result,0); + +end; + +Class Function TKgsearchAPI.APINeedsAuth : Boolean; + +begin + Result:=False; +end; + +Class Procedure TKgsearchAPI.RegisterAPIResources; + +begin + TSearchResponse.RegisterObject; +end; + + +Function TKgsearchAPI.GetEntitiesInstance : TEntitiesResource; + +begin + if (FEntitiesInstance=Nil) then + FEntitiesInstance:=CreateEntitiesResource; + Result:=FEntitiesInstance; +end; + +Function TKgsearchAPI.CreateEntitiesResource : TEntitiesResource; + +begin + Result:=CreateEntitiesResource(Self); +end; + + +Function TKgsearchAPI.CreateEntitiesResource(AOwner : TComponent) : TEntitiesResource; + +begin + Result:=TEntitiesResource.Create(AOwner); + Result.API:=Self.API; +end; + + + +initialization + TKgsearchAPI.RegisterAPI; +end. |