Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
        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();

            }
        }
Ejemplo n.º 3
0
        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();
        }