Exemplo n.º 1
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));
         }
     }
 }
Exemplo n.º 2
0
 public void AddHiddenGenre(RankingGenre genre)
 {
     if (false == HiddenGenres.Contains(genre))
     {
         HiddenGenres.Add(genre);
     }
 }
Exemplo n.º 3
0
        public async ValueTask <List <RankingGenreTag> > GetRankingGenreTagsAsync(RankingGenre genre, bool isForceUpdate = false, CancellationToken ct = default)
        {
            if (isForceUpdate)
            {
                _rankingGenreCache.Delete(genre);
            }
            else
            {
                var cachedTags = _rankingGenreCache.Get(genre);
                if (cachedTags != null && (DateTime.Now - cachedTags.UpdateAt) < TimeSpan.FromHours(12))
                {
                    return(cachedTags.Tags.Select(x => new RankingGenreTag()
                    {
                        Label = x.DisplayName, Genre = genre, Tag = x.Tag
                    }).ToList());
                }
            }

            var tagsRaw = await _niconicoSession.ToolkitContext.Video.Ranking.GetGenrePickedTagAsync(genre);

            var tags = tagsRaw.Select(x => new RankingGenreTag()
            {
                Label = x.DisplayName, Tag = x.Tag, Genre = genre
            }).ToList();

            _rankingGenreCache.Upsert(genre, tags.Select(x => new RankingGenreTagEntry()
            {
                DisplayName = x.Label, Tag = x.Tag
            }));

            return(tags);
        }
Exemplo n.º 4
0
        static async Task <RssVideoResponse> Internal_GetRankingRssAsync(RankingGenre genre, RankingTerm term, int page)
        {
            if (page == 0 || page > Constants.MaxPage)
            {
                throw new ArgumentOutOfRangeException($"out of range {nameof(page)}. inside btw from 1 to {Constants.MaxPage} 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.NiconicoRankingGenreDomain}{genre.GetDescription()}?{HttpQueryExtention.DictionaryToQuery(dict)}"
                           ));
            }
            catch
            {
                return(new RssVideoResponse()
                {
                    IsOK = false, Items = new List <RssVideoData>()
                });
            }
        }
Exemplo n.º 5
0
        protected override bool TryGetHohoemaPin(out HohoemaPin pin)
        {
            var    genreName = RankingGenre.ToCulturelizeString();
            var    tag       = SelectedRankingTag.Value?.Tag;
            var    pickedTag = PickedTags.FirstOrDefault(x => x.Tag == tag);
            string parameter = null;

            if (string.IsNullOrEmpty(pickedTag?.Tag) || pickedTag.Tag == "all")
            {
                pickedTag = null;
                parameter = $"genre={RankingGenre}";
            }
            else
            {
                parameter = $"genre={RankingGenre}&tag={Uri.EscapeDataString(SelectedRankingTag.Value.Tag)}";
            }
            pin = new HohoemaPin()
            {
                Label     = pickedTag != null ? $"{pickedTag.DisplayName} - {genreName}" : $"{genreName}",
                PageType  = HohoemaPageType.RankingCategory,
                Parameter = parameter
            };

            return(true);
        }
Exemplo n.º 6
0
        public async Task RankingGettingWithTagTestAsync(RankingGenre genre, string tag, RankingTerm term, int page)
        {
            var data = await NiconicoRanking.GetRankingRssAsync(genre, tag, 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);
            }
        }
Exemplo n.º 7
0
        public static bool Delete(RankingGenre genre)
        {
            var db        = HohoemaLiteDb.GetLocalLiteRepository();
            var genreCode = genre.ToString();

            return(db.Delete <RankingGenreTagsInfo>(x => x.GenreCode == genreCode) > 0);
        }
Exemplo n.º 8
0
 public void AddHiddenGenre(RankingGenre genre)
 {
     if (false == HiddenGenres.Contains(genre))
     {
         HiddenGenres.Add(genre);
         Save(HiddenGenres, nameof(HiddenGenres));
     }
 }
Exemplo n.º 9
0
 public bool Upsert(RankingGenre genre, IEnumerable <RankingGenreTagEntry> tags)
 {
     return(_collection.Upsert(new RankingTagsGenreGroupedEntry()
     {
         GenreCode = genre.ToString(),
         Tags = tags.ToList(),
         UpdateAt = DateTime.Now
     }));
 }
Exemplo n.º 10
0
        public void RemoveFavoriteTag(RankingGenre genre, string tag)
        {
            var target = FavoriteTags.FirstOrDefault(x => x.Genre == genre && x.Tag == tag);

            if (target != null)
            {
                FavoriteTags.Remove(target);
            }
        }
Exemplo n.º 11
0
        public void RemoveHiddenTag(RankingGenre genre, string tag)
        {
            var target = _HiddenTags.FirstOrDefault(x => x.Genre == genre && x.Tag == tag);

            if (target != null)
            {
                _HiddenTags.Remove(target);
                Save(_HiddenTags.ToList(), nameof(HiddenTags));
            }
        }
Exemplo n.º 12
0
        public RankingTagsGenreGroupedEntry Get(RankingGenre genre)
        {
            if (genre == RankingGenre.All)
            {
                return(null);
            }

            var genreCode = genre.ToString();

            return(_collection.FindOne(x => x.GenreCode == genreCode));
        }
Exemplo n.º 13
0
        public static bool Upsert(RankingGenre genre, IEnumerable <RankingGenreTag> tags)
        {
            var db = HohoemaLiteDb.GetLocalLiteRepository();

            db.Upsert(new RankingGenreTagsInfo()
            {
                GenreCode = genre.ToString(),
                Tags      = tags.ToList(),
                UpdateAt  = DateTime.Now
            });
            return(true);
        }
Exemplo n.º 14
0
        public static RankingGenreTagsInfo Get(RankingGenre genre)
        {
            if (genre == RankingGenre.All)
            {
                return(null);
            }

            var db        = HohoemaLiteDb.GetLocalLiteRepository();
            var genreCode = genre.ToString();

            return(db.SingleOrDefault <RankingGenreTagsInfo>(x => x.GenreCode == genreCode));
        }
Exemplo n.º 15
0
 public void AddHiddenTag(RankingGenre genre, string tag, string label)
 {
     if (false == HiddenTags.Any(x => x.Genre == genre && x.Tag == tag))
     {
         HiddenTags.Add(new RankingGenreTag()
         {
             Tag   = tag,
             Label = label,
             Genre = genre
         });
     }
 }
Exemplo n.º 16
0
 public void AddHiddenTag(RankingGenre genre, string tag, string label)
 {
     if (false == _HiddenTags.Any(x => x.Genre == genre && x.Tag == tag))
     {
         _HiddenTags.Add(new RankingGenreTag()
         {
             Tag   = tag,
             Label = label,
             Genre = genre
         });
         Save(_HiddenTags.ToList(), nameof(HiddenTags));
     }
 }
Exemplo n.º 17
0
        public static bool TryGetRankingGenre(this INavigationParameters parameters, out RankingGenre outGenre)
        {
            if (parameters.TryGetValue(RankingGenreQueryKey, out string strGenre))
            {
                if (Enum.TryParse(strGenre, out RankingGenre enumGenre))
                {
                    outGenre = enumGenre;
                    return(true);
                }
            }

            outGenre = RankingGenre.All;
            return(false);
        }
Exemplo n.º 18
0
        public async Task GetRankingTagsAsync(RankingGenre genre)
        {
            var res = await _context.Video.Ranking.GetGenrePickedTagAsync(genre);

            foreach (var tag in res)
            {
                Assert.IsTrue(!string.IsNullOrWhiteSpace(tag.DisplayName));
                Assert.IsNotNull(tag.Tag);
            }

            if (genre is not RankingGenre.All)
            {
                Assert.AreEqual(res.Count(x => x.IsDefaultTag), 1);
            }
        }
Exemplo n.º 19
0
        public List <RankingGenreTag> GetRankingGenreTagsFromCache(RankingGenre genre)
        {
            var cachedTags = _rankingGenreCache.Get(genre);

            if (cachedTags != null)
            {
                return(cachedTags.Tags.Select(x => new RankingGenreTag()
                {
                    Label = x.DisplayName, Genre = genre, Tag = x.Tag
                }).ToList());
            }
            else
            {
                return(new List <RankingGenreTag>());
            }
        }
Exemplo n.º 20
0
        public async Task GetRankingRssItemsAsync(RankingGenre genre)
        {
            var res = await _context.Video.Ranking.GetRankingRssAsync(genre);

            Assert.IsTrue(res.IsOK);
            Assert.IsTrue(res.Items.Any());

            foreach (var item in res.Items.Take(3))
            {
                Assert.IsNotNull(item.Description);
                Assert.IsNotNull(item.RawTitle);

                var moreData = item.GetMoreData();

                Assert.AreNotEqual(default(TimeSpan), moreData.Length);
                Assert.IsTrue(!string.IsNullOrWhiteSpace(moreData.Title));
                Assert.IsTrue(!string.IsNullOrWhiteSpace(moreData.ThumbnailUrl));
                Assert.IsTrue(moreData.WatchCount > 0);
                Assert.AreNotEqual(default(DateTime), moreData.PostedAt);
            }
        }
Exemplo n.º 21
0
        HohoemaPin IPinablePage.GetPin()
        {
            var genreName = RankingGenre.Translate();
            var tag       = SelectedRankingTag.Value?.Tag;
            var pickedTag = PickedTags.FirstOrDefault(x => x.Tag == tag);

            Dictionary <string, string> pairs = new Dictionary <string, string>();

            pairs.Add(RankingCategoryPageNavigationConstants.RankingGenreQueryKey, RankingGenre.ToString());
            if (!string.IsNullOrEmpty(pickedTag.Tag) && pickedTag.Tag != "all")
            {
                pairs.Add(RankingCategoryPageNavigationConstants.RankingGenreTagQueryKey, pickedTag.Tag);
            }

            return(new HohoemaPin()
            {
                Label = pickedTag != null ? $"{pickedTag.Label} - {genreName}" : $"{genreName}",
                PageType = HohoemaPageType.RankingCategory,
                Parameter = pairs.ToQueryString()
            });
        }
Exemplo n.º 22
0
        public async Task RankingGenreTagsGettingsAsync(RankingGenre genre)
        {
            var tags = await NiconicoRanking.GetGenrePickedTagAsync(genre);

            foreach (var tag in tags)
            {
                Assert.IsNotNull(tag);

                if (tag.IsDefaultTag)
                {
                    System.Diagnostics.Debug.WriteLine("Default tag: " + tag.DisplayName);
                    Assert.IsNotNull(tag.DisplayName);
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine($"{tag.DisplayName}");
                    System.Diagnostics.Debug.WriteLine($"{tag.Tag}");
                    Assert.IsNotNull(tag.DisplayName);
                    Assert.IsNotNull(tag.Tag);
                }
            }
        }
Exemplo n.º 23
0
        static IEnumerable <RankingItem> GetGenreTagRankingItems(RankingGenre genre, RankingSettings rankingSettings)
        {
            // アプリ上の要請としてジャンルトップの「すべて」or「話題」を除外して表示したい
            // (GroupItemと表示錠の役割が重複してしまうような、ユーザーを混乱させてしまう可能性を除去したい)
            var info = Database.Local.RankingGenreTagsDb.Get(genre);

            if (info == null)
            {
                return(Enumerable.Empty <RankingItem>());
            }

            return(info.Tags
                   .Where(x => !string.IsNullOrEmpty(x.Tag) && x.Tag != "all")
                   .Select(y => new RankingItem()
            {
                Genre = genre,
                IsDisplay = !rankingSettings.IsHiddenTag(genre, y.Tag),
                Label = y.DisplayName,
                Tag = y.Tag
            }
                           ));
        }
Exemplo n.º 24
0
        HohoemaPin IPinablePage.GetPin()
        {
            var    genreName = RankingGenre.Translate();
            var    tag       = SelectedRankingTag.Value?.Tag;
            var    pickedTag = PickedTags.FirstOrDefault(x => x.Tag == tag);
            string parameter = null;

            if (string.IsNullOrEmpty(pickedTag?.Tag) || pickedTag.Tag == "all")
            {
                pickedTag = null;
                parameter = $"genre={RankingGenre}";
            }
            else
            {
                parameter = $"genre={RankingGenre}&tag={Uri.EscapeDataString(SelectedRankingTag.Value.Tag)}";
            }
            return(new HohoemaPin()
            {
                Label = pickedTag != null ? $"{pickedTag.DisplayName} - {genreName}" : $"{genreName}",
                PageType = HohoemaPageType.RankingCategory,
                Parameter = parameter
            });
        }
Exemplo n.º 25
0
 public Task <RssVideoResponse> GetRankingGenreWithTagAsync(RankingGenre genre, string tag, RankingTerm term, int page = 1)
 {
     return(_niconicoSession.ToolkitContext.Video.Ranking.GetRankingRssAsync(genre, tag, term, page));
 }
Exemplo n.º 26
0
 public bool IsHiddenGenre(RankingGenre genre)
 {
     return(HiddenGenres.Contains(genre));
 }
Exemplo n.º 27
0
 public void RemoveHiddenGenre(RankingGenre genre)
 {
     HiddenGenres.Remove(genre);
 }
Exemplo n.º 28
0
 public bool IsFavoriteTag(RankingGenre genre, string tag)
 {
     return(FavoriteTags.Any(x => x.Genre == genre && x.Tag == tag));
 }
Exemplo n.º 29
0
        public bool Delete(RankingGenre genre)
        {
            var genreCode = genre.ToString();

            return(_collection.DeleteMany(x => x.GenreCode == genreCode) > 0);
        }
Exemplo n.º 30
0
        /// <summary>
        /// 指定ジャンルの「人気のタグ」を取得します。 <br />
        /// RankingGenre.All を指定した場合のみ、常に空のListを返します。(RankingGenre.All は「人気のタグ」を指定できないため)
        /// </summary>
        /// <param name="genre">RankingGenre.All"以外"を指定します。</param>
        /// <remarks></remarks>
        /// <returns></returns>
        public static async Task <List <RankingGenrePickedTag> > GetGenrePickedTagAsync(RankingGenre genre)
        {
            if (genre == RankingGenre.All)
            {
                return(new List <RankingGenrePickedTag>());
            }

            if (genre != RankingGenre.HotTopic)
            {
                return(await Internal_GetPickedTagAsync($"{Constants.NiconicoRankingGenreDomain}{genre.GetDescription()}"));
            }
            else
            {
                return(await Internal_GetPickedTagAsync($"{Constants.NiconicoRankingHotTopicDomain}"));
            }
        }