/// <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)); } } }
public void AddHiddenGenre(RankingGenre genre) { if (false == HiddenGenres.Contains(genre)) { HiddenGenres.Add(genre); } }
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); }
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>() }); } }
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); }
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); } }
public static bool Delete(RankingGenre genre) { var db = HohoemaLiteDb.GetLocalLiteRepository(); var genreCode = genre.ToString(); return(db.Delete <RankingGenreTagsInfo>(x => x.GenreCode == genreCode) > 0); }
public void AddHiddenGenre(RankingGenre genre) { if (false == HiddenGenres.Contains(genre)) { HiddenGenres.Add(genre); Save(HiddenGenres, nameof(HiddenGenres)); } }
public bool Upsert(RankingGenre genre, IEnumerable <RankingGenreTagEntry> tags) { return(_collection.Upsert(new RankingTagsGenreGroupedEntry() { GenreCode = genre.ToString(), Tags = tags.ToList(), UpdateAt = DateTime.Now })); }
public void RemoveFavoriteTag(RankingGenre genre, string tag) { var target = FavoriteTags.FirstOrDefault(x => x.Genre == genre && x.Tag == tag); if (target != null) { FavoriteTags.Remove(target); } }
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)); } }
public RankingTagsGenreGroupedEntry Get(RankingGenre genre) { if (genre == RankingGenre.All) { return(null); } var genreCode = genre.ToString(); return(_collection.FindOne(x => x.GenreCode == genreCode)); }
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); }
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)); }
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 }); } }
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)); } }
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); }
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); } }
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>()); } }
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); } }
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() }); }
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); } } }
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 } )); }
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 }); }
public Task <RssVideoResponse> GetRankingGenreWithTagAsync(RankingGenre genre, string tag, RankingTerm term, int page = 1) { return(_niconicoSession.ToolkitContext.Video.Ranking.GetRankingRssAsync(genre, tag, term, page)); }
public bool IsHiddenGenre(RankingGenre genre) { return(HiddenGenres.Contains(genre)); }
public void RemoveHiddenGenre(RankingGenre genre) { HiddenGenres.Remove(genre); }
public bool IsFavoriteTag(RankingGenre genre, string tag) { return(FavoriteTags.Any(x => x.Genre == genre && x.Tag == tag)); }
public bool Delete(RankingGenre genre) { var genreCode = genre.ToString(); return(_collection.DeleteMany(x => x.GenreCode == genreCode) > 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}")); } }