/// <summary>
        /// 获取用户已经发布得视频列表 分页
        /// </summary>
        /// <param name="open_id">用户应用标识</param>
        /// <param name="access_token">用户授权token</param>
        /// <param name="cursor">分页游标, 默认传0。</param>
        /// <param name="count">每页数量</param>
        /// <returns></returns>
        public List <VideoData> GetVideoList(string open_id, string access_token, long cursor, int count)
        {
            VideoListRequest request = new VideoListRequest()
            {
                OpenId = open_id
                ,
                AccessToken = access_token
                ,
                Cursor = cursor
                ,
                Count = count
            };

            VideoListResponse response = Execute <VideoListResponse>(request);

            if (response != null)
            {
                if (response.Data != null && response.Data.List != null && response.Data.List.Count > 0)
                {
                    return(response.Data.List);
                }
                else
                {
                    return(new List <VideoData>());
                }
            }
            else
            {
                throw new Exception("error code:" + response.Data.ErrorCode + ",error msg:" + response.Data.Description);
            }
        }
        public Task <VideoListResponse> GetVideosAsync(VideoListRequest request, CancellationToken cancellationToken)
        {
            // Validate parameters.
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            // The URL.
            // Documentation: https://developers.google.com/youtube/v3/docs/videos/list
            var url = "videos";

            // Append items in the request.
            url = QueryHelpers.AddQueryString(url, "id", request.Ids.Join(","));
            url = QueryHelpers.AddQueryString(url, "part", request.Parts.GetPartsParameter());
            if (request.MaxResults != null)
            {
                url = QueryHelpers.AddQueryString(url, "maxResults", request.MaxResults.Value.ToString(CultureInfo.InvariantCulture));
            }
            if (!string.IsNullOrWhiteSpace(request.PageToken))
            {
                url = QueryHelpers.AddQueryString(url, "pageToken", request.PageToken);
            }

            // Get JSON from the client factory.
            return(GetAsync <VideoListResponse>(url, cancellationToken));
        }
        public async Task Test_GetVideos_Async(string videoId)
        {
            // Validate parameters.
            if (string.IsNullOrWhiteSpace(videoId))
            {
                throw new ArgumentNullException(nameof(videoId));
            }

            // Create the youtube client.
            var youTubeClient = CreateYouTubeClient();

            // Create the request.
            var request = new VideoListRequest()
                          .AddIds(videoId)
                          .AddParts(YouTube.V3.VideoResource.Part.Id);

            // Make the call.
            await youTubeClient.GetVideosAsync(request, CancellationToken.None).ConfigureAwait(false);
        }
        /// <summary>
        /// 获取用户下的所有视频
        /// </summary>
        /// <param name="open_id"></param>
        /// <param name="access_token"></param>
        /// <param name="cursor"></param>
        /// <param name="count"></param>
        /// <param name="videoDatas"></param>
        public void GetAllVideoData(string open_id, string access_token, long cursor, int count, ref List <VideoData> videoDatas)
        {
            VideoListRequest request = new VideoListRequest()
            {
                OpenId = open_id
                ,
                AccessToken = access_token
                ,
                Cursor = cursor
                ,
                Count = count
            };

            VideoListResponse response = Execute <VideoListResponse>(request);

            if (response != null)
            {
                if (response.Data != null && response.Data.List != null && response.Data.List.Count > 0)
                {
                    videoDatas.AddRange(response.Data.List);
                    if (response.Data.HasMore)
                    {
                        cursor = response.Data.Cursor;
                        GetAllVideoData(open_id, access_token, cursor, count, ref videoDatas);
                    }
                }
                else
                {
                    videoDatas = new List <VideoData>();
                }
            }
            else
            {
                throw new Exception("error code:" + response.Data.ErrorCode + ",error msg:" + response.Data.Description);
            }
        }
Exemple #5
0
        public async Task <IActionResult> List([FromBody] VideoListRequest request)
        {
            var user = await userManager.GetUserAsync(User);

            var query = videoManager.GetAll(user);

            // Apply filters
            if (request.Ids != null)
            {
                query = query.Where(x => request.Ids.Contains(x.Id));
            }

            if (request.SubscriptionId != null)
            {
                query = query.Where(x => x.SubscriptionId == request.SubscriptionId.Value);
            }

            if (request.SubscriptionFolderId != null)
            {
                var sub = subscriptionManager.GetFolder(user, request.SubscriptionFolderId.Value);
                if (sub == null)
                {
                    return(BadRequest(responseFactory.Error("Invalid subscription folder ID.")));
                }

                var validSubscriptionIds = subscriptionManager.GetSubscriptionsRecursive(sub).Select(x => x.Id).ToArray();
                query = query.Where(x => validSubscriptionIds.Contains(x.SubscriptionId));
            }

            if (request.IsWatched.HasValue)
            {
                query = query.Where(x => x.IsWatched == request.IsWatched.Value);
            }

            if (request.IsDownloaded.HasValue)
            {
                if (request.IsDownloaded.Value)
                {
                    query = query.Where(x => x.DownloadedPath != null);
                }
                else
                {
                    query = query.Where(x => x.DownloadedPath == null);
                }
            }

            // TODO: proper search
            if (request.Query != null)
            {
                query = query.Where(x => x.Name.ToLower().Contains(request.Query.ToLower()));
            }

            // Get the item count here, before applying the limit and offset
            int itemCount = query.Count();

            // Sorting, limit and offset
            query = query.OrderBy(request.Order)
                    .Skip(request.Offset ?? 0)
                    .Take(request.Limit ?? 50);

            // Obtain mime types
            var videos    = query.ToArray();
            var apiVideos = new List <ApiVideo>();

            foreach (var video in videos)
            {
                var apiVideo = modelFactory.ToApi(video);
                apiVideo.StreamMimeType = await videoStorage.GetMimeType(video);

                apiVideos.Add(apiVideo);
            }

            return(Ok(responseFactory.Success(new VideoListResponse
            {
                TotalCount = itemCount,
                Videos = apiVideos.ToArray(),
            })));
        }