Пример #1
0
        public RankingContract GetSongs(string url, bool parseAll)
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new InvalidFeedException("Feed URL cannot be empty");
            }

            if (!url.Contains("rss="))
            {
                url += "?rss=2.0";
            }

            RssFeed feed;

            try {
                feed = RssFeed.Read(url);
            } catch (UriFormatException x) {
                throw new InvalidFeedException("Unable to parse URL", x);
            } catch (WebException x) {
                throw new InvalidFeedException("Unable to parse feed", x);
            }

            if (feed.Exceptions.LastException != null)
            {
                throw new InvalidFeedException("Unable to parse feed", feed.Exceptions.LastException);
            }

            var result  = new RankingContract();
            var channel = feed.Channels[0];

            result.Name = channel.Title;
            var wvrIdMatch = wvrIdRegex.Match(result.Name);

            if (wvrIdMatch.Success)
            {
                result.WVRId = int.Parse(wvrIdMatch.Groups[1].Value);
            }

            var songs = new List <SongInRankingContract>();
            var order = 1;

            foreach (var item in channel.Items.Cast <RssItem>())
            {
                var node = HtmlNode.CreateNode(item.Description);

                if (parseAll || (node.InnerText.Any() && char.IsDigit(node.InnerText, 0)))
                {
                    var nicoId = VideoService.NicoNicoDouga.GetIdByUrl(item.Link.ToString());
                    songs.Add(new SongInRankingContract {
                        NicoId = nicoId, SortIndex = order, Name = item.Title, Url = item.Link.ToString()
                    });
                    ++order;
                }
            }

            result.Songs = songs.ToArray();
            return(result);
        }
Пример #2
0
        public RankingList(RankingContract contract)
        {
            ParamIs.NotNull(() => contract);

            CreateDate  = DateTime.Now;
            Description = contract.Description;
            Name        = contract.Name;
            NicoId      = contract.NicoId;
            WVRId       = contract.WVRId;
        }
Пример #3
0
        public void CreateWVRPoll(RankingContract contract)
        {
            HandleTransaction(session => {
                var poll = new RankingList(contract);

                foreach (var songContract in contract.Songs)
                {
                    var c    = songContract;
                    var song = session.Query <Song>().FirstOrDefault(s => s.NicoId == c.NicoId);

                    if (song == null)
                    {
                        song = new Song(songContract);
                        session.Save(song);
                    }

                    poll.AddSong(song, songContract.SortIndex);
                    session.Save(poll);
                }
            });
        }
Пример #4
0
        public RankingContract GetSongs(string url)
        {
            var feed = RssFeed.Read(url);

            if (feed.Exceptions.LastException != null)
            {
                throw new InvalidFeedException("Unable to parse feed", feed.Exceptions.LastException);
            }

            var result  = new RankingContract();
            var channel = feed.Channels[0];

            result.Name = channel.Title;
            var wvrIdMatch = wvrIdRegex.Match(result.Name);

            if (wvrIdMatch.Success)
            {
                result.WVRId = int.Parse(wvrIdMatch.Groups[1].Value);
            }

            var songs = new List <SongInRankingContract>();
            var order = 1;

            foreach (var item in channel.Items.Cast <RssItem>())
            {
                var node = HtmlNode.CreateNode(item.Description);

                if (char.IsDigit(node.InnerText, 0))
                {
                    var nicoId = VideoService.NicoNicoDouga.GetIdByUrl(item.Link.ToString());
                    songs.Add(new SongInRankingContract {
                        NicoId = nicoId, SortIndex = order, Name = item.Title, Url = item.Link.ToString()
                    });
                    ++order;
                }
            }

            result.Songs = songs.ToArray();
            return(result);
        }