public List <ZillowPropertySearchDTO.searchresults> GetZillowPropertyBasicInfo(List <String> streetAddresses)
        {
            List <ZillowPropertySearchDTO.searchresults> zillowProperties = new List <ZillowPropertySearchDTO.searchresults>();

            foreach (String streetAddress in streetAddresses)
            {
                String        urlParms            = CreateURLParmsFromStreetAddress(streetAddress);
                String        propertiesDetailXML = WebserviceHelper.CallWS(wsConfig.ZillowSearchByStreetEndpoint, urlParms);
                XmlSerializer xmlSerializer       = new XmlSerializer(typeof(ZillowPropertySearchDTO.searchresults));
                ZillowPropertySearchDTO.searchresults zillowProperty = null;
                if (propertiesDetailXML.Contains("Error"))
                {
                    zillowProperty = new ZillowPropertySearchDTO.searchresults();
                    zillowProperty.message.text = "Error";
                    zillowProperty.message.code = 99;
                    zillowProperty.response.results.result.address.street = streetAddress;
                }
                else
                {
                    using (var reader = new StringReader(propertiesDetailXML))
                    {
                        XmlReader xmlReader = XmlReader.Create(reader);
                        zillowProperty = (ZillowPropertySearchDTO.searchresults)xmlSerializer.Deserialize(xmlReader);
                    }
                }

                if (zillowProperty.message.code == 0 || zillowProperty.message.code == 99)
                {
                    zillowProperties.Add(zillowProperty);
                }
            }

            return(zillowProperties);
        }
        public List <ZillowPropertyDetailsDTO.updatedPropertyDetails> GetZillowPropertyDetailInfo(Dictionary <int, PropertyInfo> properties)
        {
            List <ZillowPropertyDetailsDTO.updatedPropertyDetails> detailedProperty = new List <ZillowPropertyDetailsDTO.updatedPropertyDetails>();

            //501 code in the message means it's not available
            foreach (PropertyInfo property in properties.Values)
            {
                try
                {
                    String        urlParms            = CreateURLParmsFromProperty(property);
                    String        propertiesDetailXML = WebserviceHelper.CallWS(wsConfig.ZillowGetDetailPropertyEndpoint, urlParms);
                    XmlSerializer xmlSerializer       = new XmlSerializer(typeof(ZillowPropertyDetailsDTO.updatedPropertyDetails));
                    ZillowPropertyDetailsDTO.updatedPropertyDetails zillowProperty = null;
                    using (var reader = new StringReader(propertiesDetailXML))
                    {
                        XmlReader xmlReader = XmlReader.Create(reader);
                        zillowProperty = (ZillowPropertyDetailsDTO.updatedPropertyDetails)xmlSerializer.Deserialize(xmlReader);
                    }

                    if (zillowProperty.message.code == 0)
                    {
                        detailedProperty.Add(zillowProperty);
                    }
                }

                catch (Exception e)
                {
                    //eat the exception. All that will happen is the data won't get populated
                    Console.WriteLine(e.ToString());
                }
            }

            return(detailedProperty);
        }
        //gets the list of initial properties to evaluate. Getting just a list of addresses
        public List <String> GetListOfProperties()
        {
            String propertiesJSON = WebserviceHelper.CallWS(wsConfig.ImportIOEndpoint, "");
            ImportIOPropertyInfo iioPropertyInfo = JsonConvert.DeserializeObject <ImportIOPropertyInfo>(propertiesJSON);

            List <String> addresses = new List <String>();

            if (iioPropertyInfo.pageData.statusCode == 200 && iioPropertyInfo.extractorData.data.Length > 0)
            {
                foreach (ImportIOPropertyInfo.Group group in iioPropertyInfo.extractorData.data[0].group)
                {
                    addresses.Add(group.Address[0].text);
                }
            }

            return(addresses);
        }