/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="token"></param> /// <returns></returns> public OperationResult<OperationResults, ImageSearchResult> Search(ImageSearchContext context, Guid token, CultureInfo culture = null) { if (culture == null) culture = CultureInfo.InvariantCulture; string url = this.BuildSearchUrl(context, token, culture); var rslt = CorbisWebApiHelper.ExecHttpRequest<ImageSearchResult>(url, HttpVerbs.Get, x => this.ParseResults(x, culture)); switch(rslt.StatusCode) { case HttpStatusCode.OK: return new OperationResult<OperationResults, ImageSearchResult>() { Result = OperationResults.Success, Output = rslt.Content }; case HttpStatusCode.Unauthorized: case HttpStatusCode.Forbidden: return new OperationResult<OperationResults, ImageSearchResult>() { Result = OperationResults.Unathorized }; case HttpStatusCode.InternalServerError: return new OperationResult<OperationResults, ImageSearchResult>() { Result = OperationResults.Failure }; default: throw new NotImplementedException(); } throw new NotImplementedException(); }
public HttpResponseMessage Search([FromBody]ImageSearchModel model) { var context = new ImageSearchContext(); context.SearchMode = model.SearchMode; context.SearchText = model.SearchText; OperationResult<OperationResults, ImageSearchResult> rslt = null; try { rslt = this.SearchRepository.Search(context, this.AccessToken.Value); } catch(Exception ex) { this.Logger.WriteError(ex); #if DEBUG throw; #else return this.Request.CreateResponse(HttpStatusCode.InternalServerError); #endif } switch(rslt.Result) { case OperationResults.Success: return this.Request.CreateResponse<ApiResponse<ImageSearchResult>>(HttpStatusCode.OK, new ApiResponse<ImageSearchResult>() { Result = SearchApiActionCodes.Success, Output = rslt.Output }); case OperationResults.Failure: return this.Request.CreateResponse(HttpStatusCode.InternalServerError, rslt); case OperationResults.Unathorized: return this.Request.CreateResponse(HttpStatusCode.Unauthorized); default: throw new NotImplementedException(); } }
protected string BuildSearchUrl(ImageSearchContext context, Guid token, CultureInfo culture) { StringBuilder urlBuilder = new StringBuilder(); urlBuilder.AppendFormat("{0}/search/?access_token={1}", WebApiClient.Instance.ApiUrl.TrimEnd(Path.AltDirectorySeparatorChar), token); var mode = context.SearchMode.HasValue ? context.SearchMode.Value : SearchModes.Regular; switch (mode) { case SearchModes.Identifier: { urlBuilder.AppendFormat("&in={0}", context.SearchText.GetUrlEncoded()); //other parameters are ignored return urlBuilder.ToString(); } case SearchModes.MoreOrLikeThis: { urlBuilder.AppendFormat("&mlt={0}", context.SearchText.GetUrlEncoded()); //other parameters are ignored return urlBuilder.ToString(); } case SearchModes.Regular: break; default: throw new NotImplementedException(); } if (!string.IsNullOrEmpty(context.SearchText)) urlBuilder.AppendFormat("&q={0}", context.SearchText.GetUrlEncoded()); #region Image Attributes if (context.Categories != null && context.Categories.Count != 0) urlBuilder.AppendFormat("&cat={0}", context.Categories.ToString(this.PmtrValueSeparator).GetUrlEncoded()); if (context.Type.HasValue && context.Type != ImageTypes.All) { string pmtrValue = context.Type.Value.ToString(this.PmtrValueSeparator, delegate(Enum eitem) { return this.Convert((ImageTypes)eitem).ToString(); }); urlBuilder.AppendFormat("&mt={0}", pmtrValue.GetUrlEncoded()); } if (context.ColorFormat.HasValue && context.ColorFormat.Value != ColorFormats.All) { string pmtrValue = context.ColorFormat.Value.ToString(this.PmtrValueSeparator, delegate(Enum eitem) { return this.Convert((ColorFormats)eitem).ToString(); }); urlBuilder.AppendFormat("&cf={0}", pmtrValue.GetUrlEncoded()); } if (context.Size.HasValue && context.Size.Value != ImageSizes.All) { string pmtrValue = context.Size.Value.ToString(this.PmtrValueSeparator, delegate(Enum eitem) { return this.Convert((ImageSizes)eitem).ToString(); }); urlBuilder.AppendFormat("&ia={0}", pmtrValue.GetUrlEncoded()); } if (context.Orientation.HasValue && context.Orientation.Value != ImageOrientations.All) { string pmtrValue = context.Orientation.Value.ToString(this.PmtrValueSeparator, delegate(Enum eitem) { return this.Convert((ImageOrientations)eitem).ToString(); }); urlBuilder.AppendFormat("&or={0}", pmtrValue.GetUrlEncoded()); } if (context.IsModelReleased.HasValue) urlBuilder.AppendFormat("&mr={0}", context.IsModelReleased.Value.ToString().ToLower()); if(context.MarketingCollections != null && context.MarketingCollections.Count != 0) urlBuilder.AppendFormat("&mrc={0}", context.MarketingCollections.ToString(this.PmtrValueSeparator)); #endregion Image Attributes #region Composition Attributes if (context.Viewpoint.HasValue && context.Viewpoint.Value != CompositionViewpoint.All) { string pmtrValue = context.Viewpoint.Value.ToString(this.PmtrValueSeparator, delegate(Enum eitem) { return this.Convert((CompositionViewpoint)eitem).ToString(); }); urlBuilder.AppendFormat("&pv={0}", pmtrValue.GetUrlEncoded()); } #endregion Composition Attributes #region People if(context.NumberOfPeople.HasValue && context.NumberOfPeople.Value != NumbersOfPeople.All) { string pmtrValue = context.NumberOfPeople.Value.ToString(this.PmtrValueSeparator, delegate(Enum eitem) { return this.Convert((NumbersOfPeople)eitem).ToString(); }); urlBuilder.AppendFormat("&np={0}", pmtrValue.GetUrlEncoded()); } #endregion People #region Misc if (!string.IsNullOrEmpty(context.DatePhotographed)) urlBuilder.AppendFormat("&dr={0}", context.DatePhotographed.GetUrlEncoded()); if (context.LastDaysAdded.HasValue) urlBuilder.AppendFormat("&ma={0}", context.LastDaysAdded.Value); if (context.DateAdded != null) { urlBuilder.AppendFormat("&bd={0}", context.LastDaysAdded.Value); } if (context.DateCreated != null) { //urlBuilder.AppendFormat("&bd={0}", context.LastDaysAdded.Value); } if (!string.IsNullOrEmpty(context.Location)) urlBuilder.AppendFormat("&lc={0}", context.Location.GetUrlEncoded()); if (!string.IsNullOrEmpty(context.Photographer)) urlBuilder.AppendFormat("&pg={0}", context.Photographer.GetUrlEncoded()); #endregion Misc #region Paging if(context.PageNumber.HasValue) urlBuilder.AppendFormat("&p={0}", context.PageNumber.Value); if (context.PageLength.HasValue) urlBuilder.AppendFormat("&s={0}", context.PageLength.Value); #endregion Paging return urlBuilder.ToString(); }