Пример #1
0
        T IREST <T> .GetDataAsync(T payload)
        {
            //must meet minimum parts of an rec
            if (
                !string.IsNullOrEmpty(payload.Address) &&
                !string.IsNullOrEmpty(payload.City) &&
                !string.IsNullOrEmpty(payload.Region)
                )
            {
                string _strAddress = StringifyPayload(payload);

                var _requestUri = new UriBuilder();
                _requestUri.Scheme = restProtocol;
                _requestUri.Host   = restLink;
                _requestUri.Path   = _strAddress.Replace(" ", "+");
                var query = !string.IsNullOrEmpty(_strAddress) ? string.Concat("o=", responseFormat) : "";
                query             = !string.IsNullOrEmpty(restKey) ? query + string.Concat("&key=", restKey) : "";
                _requestUri.Query = query;

                var _jsonText = CallProvider(_requestUri.ToString());

                var json = new JSONProcessor();
                json.PrepJSONSafely(_jsonText);

                if (json.IsJSONValid)
                {
                    dynamic obj = json.ConvertJsonToType <dynamic>(_jsonText);

                    if (obj.status == "OK")
                    {
                        if (obj["resourceSets"][0]["resources"][0]["entityType"].ToString() == "Address" ||
                            obj["resourceSets"][0]["resources"][0]["confidence"].ToString() == "High" ||
                            obj["resourceSets"][0]["resources"][0]["confidence"].ToString() == "Medium"
                            )
                        {
                            //update model
                            payload.Latitude              = Single.Parse(obj["resourceSets"][0]["resources"][0]["geocodePoints"][0]["coordinates"][0].ToString());
                            payload.Longitude             = Single.Parse(obj["resourceSets"][0]["resources"][0]["geocodePoints"][0]["coordinates"][1].ToString());
                            payload.LocationType          = obj["resourceSets"][0]["resources"][0]["entityType"].ToString();
                            payload.ServiceAPIEndPointUID = restUID;
                        }
                        else
                        {
                            //TODO: add bad match code
                            // payload.LocationType = "no_good_match";  //TODO: a retry operation should be added (but lower priority than changed RecordSet)
                        }
                        //}
                        //else //if not OK
                        //{
                        //    //payload.LocationType = obj.status;
                        //}
                        //else if (obj.status == "ZERO_RESULTS")
                        //{ //non-existant rec
                        //}
                        //else if (obj.status == "OVER_QUERY_LIMIT")
                        //{ //
                        //}
                        //else if (obj.status == "REQUEST_DENIED")
                        //{ //
                        //}
                        //else if (obj.status == "INVALID_REQUEST")
                        //{ //
                        //}
                        //else if (obj.status == "UNKNOWN_ERROR")
                        //{ //
                    }
                }
            }

            return(payload);
        }
Пример #2
0
        T IREST <T> .GetDataAsync(T payload)
        {
            //must meet minimum parts of an rec
            if (
                !string.IsNullOrEmpty(payload.Address) &&
                !string.IsNullOrEmpty(payload.City) &&
                !string.IsNullOrEmpty(payload.Region)
                )
            {
                string _strAddress = StringifyPayload(payload);

                var _requestUri = new UriBuilder();
                _requestUri.Scheme = restProtocol;
                _requestUri.Host   = restLink;
                _requestUri.Path   = responseFormat;
                var query = !string.IsNullOrEmpty(_strAddress) ? string.Concat("address=", _strAddress) : "";
                query             = !string.IsNullOrEmpty(restKey) ? query + string.Concat("&key=", restKey) : "";
                _requestUri.Query = query;

                var _jsonText = CallProvider(_requestUri.ToString());

                var json = new JSONProcessor();
                json.PrepJSONSafely(_jsonText);

                if (json.IsJSONValid)
                {
                    dynamic obj = json.ConvertJsonToType <dynamic>(_jsonText);

                    if (obj.status == "OK")
                    {
                        if (!json.IsPropertyInJSON(_jsonText, "PropertyName", "partial_match") ||
                            obj.results[0].geometry.location_type == "ROOFTOP" ||
                            obj.results[0].geometry.location_type == "RANGE_INTERPOLATED"    //center of street block
                            )
                        {
                            //update model
                            payload.Latitude              = obj.results[0].geometry.location.lat;
                            payload.Longitude             = obj.results[0].geometry.location.lng;
                            payload.LocationType          = obj.results[0].geometry.location_type;
                            payload.ServiceAPIEndPointUID = restUID;
                        }
                        else
                        {
                            //TODO: add bad match code
                            payload.LocationType = "no_good_match";  //TODO: a retry operation should be added (but lower priority than changed RecordSet)
                        }
                    }
                    else //if not OK
                    {
                        //payload.LocationType = obj.status;
                    }
                    //else if (obj.status == "ZERO_RESULTS")
                    //{ //non-existant rec
                    //}
                    //else if (obj.status == "OVER_QUERY_LIMIT")
                    //{ //
                    //}
                    //else if (obj.status == "REQUEST_DENIED")
                    //{ //
                    //}
                    //else if (obj.status == "INVALID_REQUEST")
                    //{ //
                    //}
                    //else if (obj.status == "UNKNOWN_ERROR")
                    //{ //
                    //}
                }
            }



            return(payload);
        }