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); }
public RankingList(RankingContract contract) { ParamIs.NotNull(() => contract); CreateDate = DateTime.Now; Description = contract.Description; Name = contract.Name; NicoId = contract.NicoId; WVRId = contract.WVRId; }
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); } }); }
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); }