public string GetPoiDescription(GeoCache cache) { var result = string.Concat( "Доступность: ", cache.Difficulty, ", Местность: ", cache.Terrain, "<br>", ReplaceEntities(cache.Hints) ); return result; }
public GeoCache Load() { var cache = new GeoCache {Id = cacheId, Url = "http://pda.geocaching.su/cache.php?cid=" + cacheId}; cacheData = client.DownloadString(cache.Url); cache.Country = GetFieldValue("Страна", false); cache.State = GetFieldValue("Область", false); if (cache.State == " ") cache.State = null; cache.Difficulty = int.Parse(GetFieldValue("Доступность", true)); cache.Terrain = int.Parse(GetFieldValue("Местность", true)); var coordinates = GetFieldValue(@"Координаты \(WGS 84\)", true).Replace("<font class=coords>", "").Replace("</font>", ""); var coordRegex = new Regex(@"([NS]) (\d{1,2})° (\d{1,2}.\d{3})' ([EW]) (\d{1,3})° (\d{1,2}.\d{3})'"); var coordMathResult = coordRegex.Match(coordinates); if (!coordMathResult.Success) { throw new Exception("Ошибка парсинга координат для кэша " + cacheId); } cache.Latitude = int.Parse(coordMathResult.Groups[2].Value) + double.Parse(coordMathResult.Groups[3].Value, CultureInfo.InvariantCulture) / 60; if (coordMathResult.Groups[1].Value == "S") { cache.Latitude = -cache.Latitude; } cache.Longitude = int.Parse(coordMathResult.Groups[5].Value) + double.Parse(coordMathResult.Groups[6].Value, CultureInfo.InvariantCulture) / 60; if (coordMathResult.Groups[4].Value == "W") { cache.Longitude = -cache.Longitude; } cache.ShortDescription = GetBlockValue("Атрибуты", false); cache.LongDescription = GetBlockValue("Описание окружающей местности", true); cache.CacheContents = GetBlockValue("Содержимое тайника", false); cache.Hints = GetBlockValue("Описание тайника", false); var nameRegex = new Regex(@"<p><b>([^<]+)</b> от <b><a href=""profile.php\?uid=(\d+)"">'(.+?)'</a></b>(?:<br>|\s+)<i>\([^<]*? (\w{2})" + cacheId + @"\)</i>"); var nameMathResult = nameRegex.Match(cacheData); if (!nameMathResult.Success) { throw new Exception("Ошибка парсинга имени и автора для кэша " + cacheId); } cache.Name = nameMathResult.Groups[1].Value; cache.PlacedById = int.Parse(nameMathResult.Groups[2].Value); cache.PlacedBy = nameMathResult.Groups[3].Value; cache.TypeCode = nameMathResult.Groups[4].Value; var created = GetFieldValue("Создан", true); cache.PlacedDate = DateTime.ParseExact(created, "dd.MM.yyyy", CultureInfo.InvariantCulture); // Load log var logData = client.DownloadString("http://pda.geocaching.su/note.php?cid=" + cacheId); var logRegex = new Regex(@"<b><u>([^<]+)</u></b><i> от ([0-9\.]+)</i><br> ([\w\W]+?)<br>(<p>)?<hr>"); var logResult = logRegex.Matches(logData); var logsAdded = 0; foreach (Match logMatch in logResult) { if (logsAdded < Settings.Default.MaxLogEntriesToSave) { cache.Log.Add(new LogEntry { Finder = logMatch.Groups[1].ToString(), Text = logMatch.Groups[3].ToString(), Date = DateTime.ParseExact(logMatch.Groups[2].ToString(), "dd.MM.yyyy", CultureInfo.InvariantCulture) }); logsAdded++; } } // Load images cacheData = client.DownloadString("http://pda.geocaching.su/pict.php?cid=" + cacheId + "&mode=0"); var cacheImages = GetBlockImages("Фотография тайника", false); if (cacheImages.Count > 0) { cache.CacheImage = cacheImages[0]; } cache.TerritoryImages = GetBlockImages("Фотографии местности", false); return cache; }