/// <summary>
        /// 分页获取个人博客文章列表。
        /// </summary>
        /// <param name="blogapp">博主用户名。</param>
        /// <param name="pageIndex">第几页,从 1 开始。</param>
        /// <param name="pageSize">每页条数。</param>
        /// <returns>文章列表。</returns>
        /// <exception cref="ArgumentException">博主找不到。</exception>
        /// <exception cref="ArgumentOutOfRangeException">文章页数错误。</exception>
        /// <exception cref="ArgumentOutOfRangeException">文章条数错误。</exception>
        public static async Task <IEnumerable <Article> > ArticleAsync(string blogapp, int pageIndex, int pageSize)
        {
            if (pageIndex < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(pageIndex));
            }
            if (pageSize < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(pageSize));
            }

            var url = string.Format(CultureInfo.InvariantCulture, ArticleUrlTemplate, blogapp, pageIndex, pageSize);

            url = url.WithCache();
            var uri     = new Uri(url, UriKind.Absolute);
            var request = WebRequest.Create(uri);

            using (var response = (HttpWebResponse)await request.GetResponseAsync())
            {
                if (response.StatusCode.HasFlag(HttpStatusCode.InternalServerError))
                {
                    throw new ArgumentException("找不到该博主", nameof(blogapp));
                }
                var document = XDocument.Load(response.GetResponseStream());
                return(ArticleHelper.Deserialize(document));
            }
        }
        /// <summary>
        /// 48 小时阅读排行。
        /// </summary>
        /// <param name="itemCount">条数。</param>
        /// <returns>文章列表。</returns>
        /// <exception cref="ArgumentOutOfRangeException">条数错误。</exception>
        public static async Task <IEnumerable <Article> > TwoDaysTopViewAsync(int itemCount)
        {
            if (itemCount < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(itemCount));
            }

            var url = string.Format(CultureInfo.InvariantCulture, TwoDaysTopViewUrlTemplate, itemCount);

            url = url.WithCache();
            var uri     = new Uri(url, UriKind.Absolute);
            var request = WebRequest.Create(uri);

            using (var response = await request.GetResponseAsync())
            {
                var document = XDocument.Load(response.GetResponseStream());
                return(ArticleHelper.Deserialize(document));
            }
        }
        /// <summary>
        /// 分页获取首页文章列表。
        /// </summary>
        /// <param name="pageIndex">第几页,从 1 开始。</param>
        /// <param name="pageSize">每页条数。</param>
        /// <returns>文章列表。</returns>
        /// <exception cref="ArgumentOutOfRangeException">文章页数错误。</exception>
        /// <exception cref="ArgumentOutOfRangeException">文章条数错误。</exception>
        public static async Task <IEnumerable <Article> > RecentAsync(int pageIndex, int pageSize)
        {
            if (pageIndex < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(pageIndex));
            }
            if (pageSize < 1 || pageSize > 100)
            {
                throw new ArgumentOutOfRangeException(nameof(pageSize));
            }

            var url = string.Format(CultureInfo.InvariantCulture, RecentUrlTemplate, pageIndex, pageSize);

            url = url.WithCache();
            var uri     = new Uri(url, UriKind.Absolute);
            var request = WebRequest.Create(uri);

            using (var response = await request.GetResponseAsync())
            {
                var document = XDocument.Load(response.GetResponseStream());
                return(ArticleHelper.Deserialize(document));
            }
        }