/// <summary> /// Return the list of states in the gift card program. /// </summary> /// <returns>List of states</returns> public async Task<List<StateInfo>> GetStates() { var command = new LECommand("GetAllMajorUSCites"); //skip=0&top=500&format=json command.AddParam("format", "json"); command.AddParam("top", "100"); command.AddParam("skip", "0"); var json = await this.DoGet(command); var cnt = (int)json["Count"]; if (cnt > 0) { var majorCityArray = json["Cities"]; return majorCityArray.Select<JToken, StateInfo>(jt => { var stateinfo = new StateInfo(); stateinfo.Id = (string)jt["State_ID"]; if (STATE_LONG_NAMES.ContainsKey((string)jt["StateShort"]) == false) throw new DataException(String.Format("Unknown state short name. {0}", (string)jt["StateShort"])); stateinfo.Name = STATE_LONG_NAMES[(string)jt["StateShort"]]; return stateinfo; }) .OrderBy<StateInfo,string>(r => r.Name) .ToList<StateInfo>(); } else { throw new DataException("No state information available."); } }
private async Task<JObject> DoGet(LECommand command) { try { System.Diagnostics.Debug.WriteLine("Executing GET: "+command.ToUri()); HttpWebRequest request = WebRequest.Create(command.ToUri()) as HttpWebRequest; using (HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse) { if (response.StatusCode != HttpStatusCode.OK) { throw new DataException(String.Format("Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription)); } if (response.ContentLength == 0) { return null; } var reader = new StreamReader(response.GetResponseStream()); return JObject.Parse(await reader.ReadToEndAsync()); } } catch (DataException dex) { throw dex; } catch (Exception e) { throw new DataException(e); } }
public async Task<IEnumerable<RestaurantAmenityInfo>> GetAmenityInfoListFor(CityInfo city, FilterOptions filterOptions) { var command = new LECommand("GetAmmendityListCount"); command.AddParam("format", "json"); command.AddParam("cityid", city.Id); if (filterOptions != null) { foreach (var filterOption in filterOptions.AllOptions) { command.AddParam(filterOption.Name, filterOption.Value); } } JObject json = await this.DoGet(command); JArray amenityInfos = (JArray)json["AmendityFilterCount"]; return amenityInfos.Select<JToken, RestaurantAmenityInfo>(jsonToken => { return new RestaurantAmenityInfo() { Id = (string)jsonToken["AmendityID"], Name = (string)jsonToken["AmendityName"], RestaurantCount = (int)jsonToken["AmendityCount"] }; }); }
/// <summary> /// Given the restaurant info get the description for the restaurant and return the same RestaurantInfo /// object updated with the description. /// </summary> /// <param name="restaurantInfo">The restaurant to get description for</param> /// <returns>The updated restaurant info</returns> public async Task<RestaurantInfo> GetRestaurantDescription(RestaurantInfo restaurantInfo) { var command = new LECommand("GetRestauranDescByAddyID"); command.AddParam("format", "json"); command.AddParam("addyid", restaurantInfo.LocId); JObject json = await this.DoGet(command); JObject restaurantObj = (JObject)json["Restaurant"]; restaurantInfo.Description = String.Format("{0} {1}", (string)restaurantObj["RestDesc"], (string)restaurantObj["RestCite"]); restaurantInfo.Serves = (string)restaurantObj["RestAddInfo"]; restaurantInfo.IsFullyLoaded = true; return restaurantInfo; }
/// <summary> /// Return a list of restaurants "near by" in a city or geo location with the given /// size and skipping the given number of restaurants before returning any restaurants. /// Note: If lat/lon is given then city is ignored and vice versa. /// </summary> /// <param name="givenSize">The size of the restaurant list expected</param> /// <param name="skipping">The restaurants to skip before adding restaurant to list</param> /// <param name="lat">Near by latitude</param> /// <param name="lon">Near by longitude</param> /// <param name="orCity">Near by city</param> /// <returns>Restaurant list</returns> public async Task<List<RestaurantInfo>> GetRestaurantListNearBy( FilterOptions filterOptions, double? lat = null, double? lon = null, string orCityId = null, int givenSize = 25, int skipping = 0) { System.Diagnostics.Debug.Assert((lat.HasValue && lon.HasValue) || !String.IsNullOrEmpty(orCityId)); var command = new LECommand("GetRestaurantListNearBy"); command.AddParam("format", "json"); if(String.IsNullOrEmpty(orCityId) == false) command.AddParam("cityid", orCityId); // this returns the command.AddParam("ginfo", "acdhprstm"); if (lat.HasValue) command.AddParam("lat", Convert.ToString(lat.Value)); if (lon.HasValue) command.AddParam("lon", Convert.ToString(lon.Value)); command.AddParam("top",Convert.ToString(givenSize)); command.AddParam("skip",Convert.ToString(skipping)); if (filterOptions != null) { foreach (var filterOption in filterOptions.AllOptions) { command.AddParam(filterOption.Name, filterOption.Value); } } JObject json = await this.DoGet(command); if(json == null) return new List<RestaurantInfo>(); var cnt = (int)json["Count"]; if (cnt > 0) { JArray restaurantArray = (JArray)json["Restaurants"]; return restaurantArray.Select<JToken, RestaurantInfo>(jObj => { RestaurantInfo restaurant = new RestaurantInfo(); restaurant.LocId = Convert.ToString((int)jObj["AddyID"]); restaurant.Id = Convert.ToString((int)jObj["RestID"]); restaurant.Name = (string)jObj["RestName"]; restaurant.StreetAddress = (string)jObj["Address1"]; if ((string)jObj["Address2"] != null) { restaurant.StreetAddress += (Environment.NewLine + (string)jObj["Address2"]); } restaurant.CityStateZip = String.Format("{0}, {1} {2}", (string)jObj["City"], (string)jObj["State"], (string)jObj["Zip"] ); restaurant.PhoneNumber = (string)jObj["Phone"]; restaurant.PriceRange = string.Empty; int avgCost = (int)jObj["AvgCost"]; for (int i = 0; i <= avgCost; i++) { restaurant.PriceRange += '$';//star - '\u2605'; } //CatInfoList var catList = (JArray)jObj["CatInfoList"]; restaurant.CategoryList = catList.Select<JToken, RestaurantInfo.CategoryInfo>(jCat => { return new RestaurantInfo.CategoryInfo() { Id = (string)jCat["CatID"], Name = (string)jCat["CatName"], IsBestOf = jCat["IsBestOf"] == null ? false : ((bool)jCat["IsBestOf"]) }; }); // Features/Amenities var featuresList = (JArray)jObj["AmendInfoList"]; restaurant.AmenityList = featuresList.Select<JToken, RestaurantInfo.AmenityInfo>(jAmen => { return new RestaurantInfo.AmenityInfo() { Id = (string)jAmen["AmendityID"], Name = (string)jAmen["AmendityName"], LocId = (string)jAmen["AddyID"] }; }); //MediaInfoList var mediaInfoList = (JArray)jObj["MediaInfoList"]; var mediaInfo = mediaInfoList.FirstOrDefault<JToken>(); if (mediaInfo != null) { //http://cdn.localeats.com/media/images/23132-1.jpg?dummy=dummy40 restaurant.ImageUri = String.Format(@"http://cdn.localeats.com/media/images/{0}?dummy=dummy40", (string)mediaInfo["MediaFileName"]); } if (jObj["DistanceAway"] != null) restaurant.SpatialOffset = (decimal)jObj["DistanceAway"]; // Awards if (jObj["AwardInfoList"] != null) { var jAwardList = (JArray)jObj["AwardInfoList"]; var awardList = new List<RestaurantInfo.AwardInfo>(); foreach (var awardObj in jAwardList) { var awardName = (string)awardObj["AwardName"]; // as switch later .. maybe if (((int)awardObj["AwardID"]) == ((int)Award.EditorsPick)) { restaurant.IsEditorsPick = true; // LE now refers to Top 100 as editors pick awardName = "Editors Pick"; } awardList.Add(new RestaurantInfo.AwardInfo() { Id = (string)awardObj["AwardID"], Name = awardName }); } restaurant.AwardList = awardList; } // Neighborhoods if (jObj["HoodInfoList"] != null) { var jHoodList = (JArray)jObj["HoodInfoList"]; restaurant.NeighborhoodList = jHoodList.Select<JToken, RestaurantInfo.NeighborhoodInfo>(jHood => { return new RestaurantInfo.NeighborhoodInfo() { Id = (string)jHood["HoodID"], Name = (string)jHood["HoodName"] }; }); } // Deals if (jObj["DealInfoList"] != null) { var jDealList = (JArray)jObj["DealInfoList"]; restaurant.DealList = jDealList.Select<JToken, RestaurantInfo.DealInfo>(jDeal => { return new RestaurantInfo.DealInfo() { Id = (string)jDeal["Id"], Description = (string)jDeal["Description"], StartDate = (DateTime)jDeal["StartDate"], Title = (string)jDeal["Title"] }; }); } return restaurant; }).ToList<RestaurantInfo>(); } else { return new List<RestaurantInfo>(); } }
/// <summary> /// Given the state info get the cities of that state and return /// the state populated with the cities on the gift card program. /// </summary> /// <param name="stateInfo">The state to get cities for</param> /// <returns>The given state with its cities loaded</returns> public async Task<StateInfo> GetCities(StateInfo stateInfo) { // GetCityListByStateID var command = new LECommand("GetCityListByStateID"); //&top = -Indicates how many cities you want to pull back //-&format = -Tell it which format you would like the results in. Options are //xml and json //- &stateId = -Tell it which state to retrieve cities in by ID. command.AddParam("top","500"); command.AddParam("format", "json"); command.AddParam("stateId", Convert.ToString(stateInfo.Id)); var json = await this.DoGet(command); var cnt = (int)json["Count"]; if (cnt > 0) { var citiesArray = (JArray)json["Cities"]; var cities = citiesArray.Select<JToken, CityInfo>(jt =>{ var city = new CityInfo(); city.Id = Convert.ToString((int)jt["D_City_ID"]); city.Name = (string)jt["City_Name"]; return city; }).ToList<CityInfo>(); stateInfo.Cities = cities; return stateInfo; } else { stateInfo.Cities = new List<CityInfo>(); return stateInfo; } }