예제 #1
0
 public string GetPoiDescription(GeoCache cache)
 {
     var result = string.Concat(
         "Доступность: ", cache.Difficulty, ", Местность: ", cache.Terrain, "<br>", ReplaceEntities(cache.Hints)
     );
     return result;
 }
예제 #2
0
        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})&#176; (\d{1,2}.\d{3})' &nbsp;&nbsp;&nbsp;([EW]) (\d{1,3})&#176; (\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;
        }