Example #1
0
        public static string ToDisplayString(this RankingMode mode)
        {
            switch (mode)
            {
            case RankingMode.Daily:
                return(Resources.GetString("Daily/Text"));

            case RankingMode.DailyMale:
                return(Resources.GetString("PopularMale/Text"));

            case RankingMode.DailyFemale:
                return(Resources.GetString("PopularFemale/Text"));

            case RankingMode.WeeklyOriginal:
                return(Resources.GetString("Original/Text"));

            case RankingMode.WeeklyRookie:
                return(Resources.GetString("Rookie/Text"));

            case RankingMode.Weekly:
                return(Resources.GetString("Weekly/Text"));

            case RankingMode.Monthly:
                return(Resources.GetString("Monthly/Text"));

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
        }
Example #2
0
 public RankingViewModel(RankingMode mode, IImageStoreService imageStoreService,
                         INavigationService navigationService)
 {
     RankingMode       = mode;
     ImageStoreService = imageStoreService;
     NavigationService = navigationService;
 }
Example #3
0
        /// <summary>
        /// Gets a list of ranking illusts.
        /// </summary>
        /// <param name="mode">The ranking mode to use.</param>
        /// <param name="date">The date to get ranking illusts for.</param>
        /// <param name="filter">The filter to use.</param>
        /// <returns><seealso cref="IllustSearchResult"/> for ranking illusts.</returns>
        public async Task <IllustSearchResult> RankingIllustsAsync(RankingMode mode  = RankingMode.Day, DateTime?date = null,
                                                                   FilterType?filter = null)
        {
            // Converts time to the correct timezone and produces a date string in correct format
            Stream   response;
            DateTime dateValue  = date ?? DateTime.Now.AddDays(-1);
            string   dateString = dateValue.Year.ToString("0000") + "-" + dateValue.Month.ToString("00")
                                  + "-" + dateValue.Day.ToString("00");

            Dictionary <string, string> parameters = new Dictionary <string, string>()
            {
                { "mode", mode.JsonValue() },
                { "date", dateString }
            };

            // Adds filter if required
            if ((filter ?? Filter) != FilterType.None)
            {
                parameters.Add("filter", filter.JsonValue() ?? Filter.JsonValue());
            }

            FormUrlEncodedContent encodedParams = new FormUrlEncodedContent(parameters);

            response = await RequestClient.RequestAsync(PixivUrls.RankingIllusts, encodedParams)
                       .ConfigureAwait(false);

            return(Json.DeserializeJson <IllustSearchResult>(response));
        }
Example #4
0
        public async Task <SearchResult[]> GetRankingAsync(RankingMode mode, int offset, DateTime?date)
        {
            if (string.IsNullOrWhiteSpace(AccessToken))
            {
                throw new AuthentificationRequired();
            }

            await CheckUpdateTokenAsync();

            string url = _baseUrl + "/v1/illust/ranking?mode=" + _rankingModeValues[mode];

            if (offset != 0)
            {
                url += "&offset=" + offset;
            }
            if (date.HasValue)
            {
                url += "&date=" + date.Value.ToString("yyyy-MM-dd");
            }

            var request = new HttpRequestMessage(HttpMethod.Get, url);

            request.Headers.Add("Authorization", "Bearer " + AccessToken);

            var response = await HttpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

            response.EnsureSuccessStatusCode();

            var jsonToken = JsonConvert.DeserializeObject <JToken>(await response.Content.ReadAsStringAsync());

            return(ParseSearchResults((JArray)jsonToken["illusts"]));
        }
Example #5
0
        public RankingNovelViewModel(INovel novel, RankingMode mode, IImageStoreService imageStoreService,
                                     INavigationService navigationService)
            : base(mode, imageStoreService, navigationService)
        {
            Title = novel.Title;

            ThumbnailPath = PyxisConstants.DummyImage;
            Thumbnailable = new PixivNovel(novel, imageStoreService);
        }
Example #6
0
        public RankingImageViewModel(IIllust illust, RankingMode mode, ContentType contentType, IImageStoreService imageStoreService,
                                     INavigationService navigationService)
            : base(mode, imageStoreService, navigationService)
        {
            _illust      = illust;
            _contentType = contentType;
            Title        = _illust.Title;

            ThumbnailPath = PyxisConstants.DummyImage;
            Thumbnailable = new PixivImage(_illust, imageStoreService);
        }
Example #7
0
        public PixivRanking(IPixivClient pixivClient, ContentType rankingType, RankingMode rankingMode, IQueryCacheService queryCacheService)
        {
            _pixivClient       = pixivClient;
            _rankingType       = rankingType;
            _rankingMode       = rankingMode;
            _queryCacheService = queryCacheService;
            _offset            = "";
            if (_rankingType == ContentType.Novel)
            {
                Novels = new ObservableCollection <INovel>();
            }
            else
            {
                Illusts = new ObservableCollection <IIllust>();
            }
#if OFFLINE
            HasMoreItems = false;
#else
            HasMoreItems = true;
#endif
        }
Example #8
0
        /// <summary>
        ///     ランキング上位のイラスト一覧を取得します。
        /// </summary>
        /// <param name="mode">ランキングモード</param>
        /// <param name="date">YYYY-MM-DD 形式の日付</param>
        /// <param name="offset">オフセット</param>
        /// <param name="filter">フィルター (`for_ios` が有効)</param>
        /// <returns>
        ///     <see cref="IllustCollection" />
        /// </returns>
        public async Task <IllustCollection> RankingAsync(RankingMode mode, string date = "", long offset = 0, string filter = "")
        {
            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("mode", mode.ToParameter())
            };

            if (!string.IsNullOrWhiteSpace(date))
            {
                parameters.Add(new KeyValuePair <string, string>("date", date));
            }
            if (offset > 0)
            {
                parameters.Add(new KeyValuePair <string, string>("offset", offset.ToString()));
            }
            if (!string.IsNullOrWhiteSpace(filter))
            {
                parameters.Add(new KeyValuePair <string, string>("filter", filter));
            }

            return(await PixivClient.GetAsync <IllustCollection>("https://app-api.pixiv.net/v1/illust/ranking", parameters).Stay());
        }
        /// <summary>
        ///     <see cref="RankingMode" /> を URL クエリパラメータに変換します。
        /// </summary>
        /// <param name="obj">
        ///     <see cref="RankingMode" />
        /// </param>
        /// <returns>変換後文字列</returns>
        public static string ToParameter(this RankingMode obj)
        {
            switch (obj)
            {
            case RankingMode.Daily:
                return("day");

            case RankingMode.DailyMale:
                return("day_make");

            case RankingMode.DailyFemale:
                return("day_famele");

            case RankingMode.DailyManga:
                return("day_manga");

            case RankingMode.Weekly:
                return("week");

            case RankingMode.WeeklyOriginal:
                return("week_original");

            case RankingMode.WeeklyRookie:
                return("week_rookie");

            case RankingMode.WeeklyManga:
                return("week_manga");

            case RankingMode.Monthly:
                return("month");

            case RankingMode.MonthlyManga:
                return("month_manga");

            default:
                throw new ArgumentOutOfRangeException(nameof(obj), obj, null);
            }
        }
Example #10
0
        /// <summary>
        ///     ランキング上位の小説を取得します。
        /// </summary>
        /// <param name="mode">ランキングモード</param>
        /// <param name="date">日付 (YYYY-MM-DD 形式)</param>
        /// <param name="offset">オフセット</param>
        /// <returns>
        ///     <see cref="NovelCollection" />
        /// </returns>
        public async Task <NovelCollection> RankingAsync(RankingMode mode, string date = "", long offset = 0)
        {
            Ensure.InvalidEnumValue(mode == RankingMode.DailyManga, nameof(mode));
            Ensure.InvalidEnumValue(mode == RankingMode.WeeklyManga, nameof(mode));
            Ensure.InvalidEnumValue(mode == RankingMode.WeeklyOriginal, nameof(mode));
            Ensure.InvalidEnumValue(mode == RankingMode.Monthly, nameof(mode));
            Ensure.InvalidEnumValue(mode == RankingMode.MonthlyManga, nameof(mode));

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("mode", mode.ToParameter())
            };

            if (!string.IsNullOrWhiteSpace(date))
            {
                parameters.Add(new KeyValuePair <string, string>("date", date));
            }
            if (offset > 0)
            {
                parameters.Add(new KeyValuePair <string, string>("offset", offset.ToString()));
            }

            return(await PixivClient.GetAsync <NovelCollection>("https://app-api.pixiv.net/v1/novel/ranking", parameters).Stay());
        }
Example #11
0
        public static string ToParamString(this RankingMode mode, ContentType type = ContentType.Illust)
        {
            switch (mode)
            {
            case RankingMode.Daily:
                if ((type == ContentType.Illust) || (type == ContentType.Novel))
                {
                    return("day");
                }
                return("day_manga");

            case RankingMode.DailyMale:
                if (type == ContentType.Manga)
                {
                    throw new NotSupportedException();
                }
                return("day_male");

            case RankingMode.DailyFemale:
                if (type == ContentType.Manga)
                {
                    throw new NotSupportedException();
                }
                return("day_female");

            case RankingMode.WeeklyOriginal:
                if (type != ContentType.Illust)
                {
                    throw new NotSupportedException();
                }
                return("week_original");

            case RankingMode.WeeklyRookie:
                if ((type == ContentType.Illust) || (type == ContentType.Novel))
                {
                    return("week_rookie");
                }
                return("week_rookie_manga");

            case RankingMode.Weekly:
                if ((type == ContentType.Illust) || (type == ContentType.Novel))
                {
                    return("week");
                }
                return("week_manga");

            case RankingMode.Monthly:
                if (type == ContentType.Novel)
                {
                    throw new NotSupportedException();
                }
                if (type == ContentType.Illust)
                {
                    return("month");
                }
                return("month_manga");

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
        }
Example #12
0
        public static int ToParamIndex(this RankingMode mode, ContentType type = ContentType.Illust)
        {
            if (type == ContentType.User)
            {
                throw new NotSupportedException();
            }

            switch (mode)
            {
            case RankingMode.Daily:
                return(0);

            case RankingMode.DailyMale:
                if (type == ContentType.Manga)
                {
                    throw new NotSupportedException();
                }
                return(1);

            case RankingMode.DailyFemale:
                if (type == ContentType.Manga)
                {
                    throw new NotSupportedException();
                }
                return(2);

            case RankingMode.WeeklyOriginal:
                if (type == ContentType.Illust)
                {
                    return(3);
                }
                throw new NotSupportedException();

            case RankingMode.WeeklyRookie:
                if (type == ContentType.Manga)
                {
                    return(1);
                }
                if (type == ContentType.Novel)
                {
                    return(3);
                }
                return(4);

            case RankingMode.Weekly:
                if (type == ContentType.Manga)
                {
                    return(2);
                }
                if (type == ContentType.Novel)
                {
                    return(4);
                }
                return(5);

            case RankingMode.Monthly:
                if (type == ContentType.Manga)
                {
                    return(3);
                }
                if (type == ContentType.Novel)
                {
                    throw new NotSupportedException();
                }
                return(6);

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
        }
Example #13
0
    public IList<QueryResult> Query(string query, RankingMode rankingMode)
    {
        using (FileStream indexFileStream = File.Open(indexFilePath, FileMode.Open))
        {
            using (FileStream metadataFileStream = File.Open(metadataFilePath, FileMode.Open))
            {
                IndexMetadata indexMetadata = new IndexMetadata(metadataFileStream);
                TermIndex index = new TermIndex(indexFileStream);
                QueryEngine queryEngine = new QueryEngine(index, indexMetadata);

                IList<long> results = queryEngine.Query(query.ToLower(), rankingMode);
                IList<QueryResult> queryResults = new List<QueryResult>();

                int i = 1;
                Console.WriteLine("rank\tscore\ttitle");
                foreach (long docId in results.Take(500))
                {
                    DocumentInfo docInfo;
                    if (indexMetadata.TryGetDocumentInfo(docId, out docInfo))
                    {
                        QueryResult res = new QueryResult()
                        {
                            Title = docInfo.Title,
                            Uri = docInfo.Uri,
                            Score = queryEngine.Scores[docId]
                        };
                        queryResults.Add(res);
                    }
                    else
                    {
                        Console.WriteLine("Found document id in posting list that wasn't indexed in metadata: " + docId);
                    }
                }

                return queryResults;
            }
        }
    }
Example #14
0
 public Task <SearchResult[]> GetRankingAsync(RankingMode mode)
 {
     return(GetRankingAsync(mode, 0, null));
 }