/// <summary> /// Get traffic status for region by <paramref name="regionCode"/>. /// </summary> /// <param name="regionCode"></param> /// <returns></returns> public Task <RegionTrafficStatus> GetRegionTrafficStatusAsync(string regionCode, DateTimeOffset dateTimeNow) { if (string.IsNullOrWhiteSpace(regionCode)) { throw new ArgumentException("Argument is not valid!", nameof(regionCode)); } return(Task.Run(() => { var random = new Random(); string title = "SomeTitle_" + regionCode; var randomLevel = random.Next(1, 5).ToString(); var randomIconId = random.Next(1, 3); var randomMessageId = random.Next(1, 3); var iconText = Icons.Where(icon => icon.Key == randomIconId).Single().Value; var messageText = Messages.Where(icon => icon.Key == randomMessageId).Single().Value; var regionTrafficStatus = new RegionTrafficStatus( regionCode, title, dateTimeNow, randomLevel, iconText, messageText); return regionTrafficStatus; })); }
/// <summary> /// Get traffic status for region by regionCode. /// </summary> /// <param name="regionCode"></param> /// <param name="dateTimeNow"></param> /// <returns></returns> public async Task <RegionTrafficStatus> GetRegionTrafficStatusAsync(string regionCode, DateTimeOffset dateTimeNow) { if (string.IsNullOrWhiteSpace(regionCode)) { throw new ArgumentException("Argument is not valid!", nameof(regionCode)); } string url = $@"https://export.yandex.com/bar/reginfo.xml?region={regionCode}&bustCache={dateTimeNow}"; var xmlDoc = new XmlDocument(); try { var response = await Client.GetAsync(url); response.EnsureSuccessStatusCode(); var stream = await response.Content.ReadAsStreamAsync(); xmlDoc.Load(stream); var title = xmlDoc.SelectSingleNode("//title")?.InnerText ?? "There is no available information!"; var level = xmlDoc.SelectSingleNode("//level")?.InnerText ?? "There is no available information!"; var icon = xmlDoc.SelectSingleNode("//icon")?.InnerText ?? "There is no available information!"; var text = xmlDoc.SelectSingleNode("//hint[@lang='en']")?.InnerText ?? "There is no available information!"; var regionTrafficStatus = new RegionTrafficStatus( regionCode, title, dateTimeNow, level, icon, text); return(regionTrafficStatus); } catch (Exception exception) when(exception.Message == "Root element is missing.") { return(null); } catch (Exception exception) { throw new TrafficServiceException("Could not read results of request to yandex", exception); } }
public async Task <RegionTrafficStatusModel> AddRegionTrafficStatusAsync(RegionTrafficStatus result) { if (result == null) { throw new ArgumentNullException(nameof(result)); } using (var context = this.TrafficDataServiceProvider.GetDataService()) { var regionToUpdate = context.Regions.FirstOrDefault(region => region.RegionCode == result.RegionCode); var regionTrafficStatusModel = new RegionTrafficStatusModel(); if (regionToUpdate == null) { regionToUpdate = new RegionModel(); regionToUpdate.Id = Guid.NewGuid(); regionToUpdate.RegionCode = result.RegionCode; regionToUpdate.RegionName = result.Title; regionToUpdate.RegionTrafficStatuses = new List <RegionTrafficStatusModel> { regionTrafficStatusModel }; } regionTrafficStatusModel.Id = Guid.NewGuid(); regionTrafficStatusModel.DateTimeNow = result.Time; regionTrafficStatusModel.Region = regionToUpdate; regionTrafficStatusModel.RegionId = regionToUpdate.Id; regionTrafficStatusModel.TrafficIcon = result.Icon; regionTrafficStatusModel.TrafficLevel = result.Level; regionTrafficStatusModel.TrafficMessage = result.Text; context.Add(regionTrafficStatusModel); await context.SaveChangesAsync(); return(regionTrafficStatusModel); } }