private async Task <IActionResult> search(string address, string city, string state, string zipcode)
        {
            address = WebUtility.UrlDecode(address);
            RealEstateSearchResults result = await m_service.Search(address, city, state, zipcode);

            return(Ok(result));
        }
Beispiel #2
0
        private async Task <RealEstateSearchResults> searchRestate(string address, string city, string state, string zipcode)
        {
            using (HttpClient client = new HttpClient())
            {
                string citystatezip = string.Empty;
                if (!string.IsNullOrEmpty(city) && !string.IsNullOrEmpty(state))
                {
                    citystatezip = string.Format("{0} {1}", city, state);
                }
                else if (!string.IsNullOrEmpty(zipcode))
                {
                    citystatezip = zipcode;
                }

                try
                {
                    client.BaseAddress = new Uri(WEB_SERVICE_URL);
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
                    //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml"));
                    //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
                    //client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-US"));
                    //client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en", 0.8));

                    var response = await client.GetAsync(String.Format("/webservice/GetSearchResults.htm?zws-id={0}&address={1}&citystatezip={2}",
                                                                       API_KEY, address, citystatezip));

                    response.EnsureSuccessStatusCode();
                    string streamResult = await response.Content.ReadAsStringAsync();

                    streamResult = "<searchresults>" + streamResult.Substring(38 + 302);
                    streamResult = streamResult.Replace("</SearchResults:searchresults>", "</searchresults>");
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(streamResult);
                    string         json      = JsonConvert.SerializeXmlNode(doc);
                    ZillowResponse zResponse = JsonConvert.DeserializeObject <ZillowResponse>(json);
                    Console.Out.WriteLine(json);
                    searchresults oresult = zResponse.searchresults;
                    if (oresult != null && oresult is searchresults)
                    {
                        searchresults           searchResult         = oresult as searchresults;
                        Message                 msg                  = searchResult.message;
                        RealEstateSearchResults restateSearchResults = new RealEstateSearchResults();
                        if (msg != null && msg.code != null)
                        {
                            errorMap.TryGetValue(msg.code, out restateSearchResults.Error);
                        }

                        if (msg.limitwarning && "0".CompareTo(msg.code) == 0)
                        {
                            if (searchResult.response.results.result != null)
                            {
                                restateSearchResults.Results = new List <RealEstateSearchResult>();
                                foreach (SimpleProperty result in searchResult.response.results.result)
                                {
                                    RealEstateSearchResult sResult = new RealEstateSearchResult
                                    {
                                        Address        = createAddress(result.address),
                                        Links          = createLinks(result.links),
                                        Estimate       = createEstimate(result.zestimate),
                                        RentalEstimate = createEstimate(result.rentzestimate),
                                        NeighborHoods  = createNeighborHoods(result.localRealEstate)
                                    };
                                    restateSearchResults.Results.Add(sResult);
                                }
                            }
                            else
                            {
                                restateSearchResults.Error = ErrorCodes.LIMIT_REACHED;
                            }
                        }
                        else
                        {
                            if (!msg.limitwarning)
                            {
                                restateSearchResults.Error = ErrorCodes.LIMIT_REACHED;
                            }
                        }
                        return(restateSearchResults);
                    }
                }
                catch (HttpRequestException httpRequestException)
                {
                    Console.Out.WriteLine(httpRequestException);
                    return(new RealEstateSearchResults {
                        Error = ErrorCodes.SERVER_ERROR
                    });
                }
                catch (Exception ex)
                {
                    Console.Out.WriteLine(ex);
                    return(new RealEstateSearchResults {
                        Error = ErrorCodes.SERVER_ERROR
                    });
                }
            }

            return(new RealEstateSearchResults {
                Error = ErrorCodes.SERVER_ERROR
            });
        }