예제 #1
0
        public async Task RankingHotTopicGettingTestAsync(RankingTerm term, int page)
        {
            var data = await NiconicoRanking.GetRankingRssAsync(RankingGenre.HotTopic, term : term, page : page);

            Assert.IsTrue(data.IsOK);

            Assert.IsTrue(data.Items.Any());
            var sampleItems = data.Items.Take(1).ToArray();

            foreach (var sampleItem in sampleItems)
            {
                var videoid = sampleItem.GetVideoId();
                Assert.IsTrue(videoid.StartsWith("sm") || videoid.StartsWith("so") || videoid.StartsWith("nm"));
                System.Diagnostics.Debug.WriteLine(videoid);
                var title = sampleItem.GetRankTrimmingTitle();
                System.Diagnostics.Debug.WriteLine(title);

                var moreData = sampleItem.GetMoreData();

                Assert.IsNotNull(moreData.Title);
                Assert.IsTrue(moreData.Length > TimeSpan.Zero);
                Assert.IsTrue(moreData.WatchCount >= 0);
                Assert.IsTrue(moreData.CommentCount >= 0);
                Assert.IsTrue(moreData.MylistCount >= 0);
            }
        }
예제 #2
0
        static async Task <RssVideoResponse> Internal_GetHotTopicRankingRssAsync(RankingTerm term, int page)
        {
            if (!IsHotTopicAcceptTerm(term))
            {
                throw new ArgumentOutOfRangeException($"out of range {nameof(RankingTerm)}. accept with {string.Join(" or ", Constants.HotTopicAccepteRankingTerms)}.");
            }

            if (page == 0 || page > Constants.MaxPageHotTopic)
            {
                throw new ArgumentOutOfRangeException($"out of range {nameof(page)}. inside btw from 1 to {Constants.MaxPageHotTopic} in with tag.");
            }

            var dict = new Dictionary <string, string>()
            {
                { "rss", "2.0" },
                { "lang", "ja-jp" }
            };

            dict.Add(nameof(term), term.GetDescription());
            if (page != 1)
            {
                dict.Add(nameof(page), page.ToString());
            }

            try
            {
                return(await VideoRssContentHelper.GetRssVideoResponseAsync(
                           $"{Constants.NiconicoRankingHotTopicDomain}?{HttpQueryExtention.DictionaryToQuery(dict)}"
                           ));
            }
            catch
            {
                return(new RssVideoResponse()
                {
                    IsOK = false, Items = new List <RssVideoData>()
                });
            }
        }
예제 #3
0
 public Task <RssVideoResponse> GetRankingGenreWithTagAsync(RankingGenre genre, string tag, RankingTerm term, int page = 1)
 {
     return(_niconicoSession.ToolkitContext.Video.Ranking.GetRankingRssAsync(genre, tag, term, page));
 }
예제 #4
0
 public async Task RankingHotTopicFailTestAsync(RankingTerm term, int page)
 {
     await Assert.ThrowsExceptionAsync <ArgumentOutOfRangeException>(async() =>
                                                                     await NiconicoRanking.GetRankingRssAsync(RankingGenre.HotTopic, term: term, page: page)
                                                                     );
 }
예제 #5
0
 public static bool IsGenreWithTagAcceptTerm(RankingTerm term)
 {
     return(Constants.GenreWithTagAccepteRankingTerms.Any(x => x == term));
 }
예제 #6
0
 public static bool IsHotTopicAcceptTerm(RankingTerm term)
 {
     return(Constants.HotTopicAccepteRankingTerms.Any(x => x == term));
 }
예제 #7
0
        static async Task <RssVideoResponse> Internal_GetHotTopicRankingRssWithKeyAsync(string key, RankingTerm term)
        {
            if (!IsHotTopicAcceptTerm(term))
            {
                throw new ArgumentOutOfRangeException($"out of range {nameof(RankingTerm)}. accept with {string.Join(" or ", Constants.HotTopicAccepteRankingTerms)}.");
            }

            var dict = new Dictionary <string, string>()
            {
                { "rss", "2.0" },
                { "lang", "ja-jp" }
            };

            dict.Add(nameof(key), Uri.EscapeDataString(key));
            dict.Add(nameof(term), term.GetDescription());

            try
            {
                return(await VideoRssContentHelper.GetRssVideoResponseAsync(
                           $"{Constants.NiconicoRankingHotTopicDomain}?{HttpQueryExtention.DictionaryToQuery(dict)}"
                           ));
            }
            catch
            {
                return(new RssVideoResponse()
                {
                    IsOK = false, Items = new List <RssVideoData>()
                });
            }
        }
예제 #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="genre"></param>
 /// <param name="tag"></param>
 /// <param name="term"></param>
 /// <param name="page"></param>
 /// <returns></returns>
 public static async Task <RssVideoResponse> GetRankingRssAsync(RankingGenre genre, string tag = null, RankingTerm term = RankingTerm.Hour, int page = 1)
 {
     if (genre != RankingGenre.HotTopic)
     {
         if (string.IsNullOrEmpty(tag))
         {
             return(await Internal_GetRankingRssAsync(genre, term, page));
         }
         else
         {
             return(await Internal_GetRankingRssWithTagAsync(genre, tag, term, page));
         }
     }
     else
     {
         if (string.IsNullOrEmpty(tag))
         {
             return(await Internal_GetHotTopicRankingRssAsync(term, page));
         }
         else
         {
             return(await Internal_GetHotTopicRankingRssWithKeyAsync(tag, term));
         }
     }
 }
예제 #9
0
 public async Task <Mntone.Nico2.RssVideoResponse> GetRankingGenreWithTagAsync(RankingGenre genre, string tag, RankingTerm term, int page = 1)
 {
     return(await NiconicoRanking.GetRankingRssAsync(genre, tag, term, page));
 }