如何一次性通过YouTube API V3从播放列表中检索部分视频详细信息(持续时间,日期,视图)

时间:2015-08-01 02:02:44

标签: c# youtube-api youtube-data-api

大家好,特别是Google人员根据您的支持页面监控此标记。我使用.NET和 PlaylistItems.List (" snippet,contentDetails")与旧的RSS Feed搜索相比并没有做很多工作。事实上,添加部分 contentDetails 几乎没有增加价值,因为现在只返回了VideoID,但它已经是Snippet.ResourceId.VideoId

的一部分了。
  

" kind":" youtube#playlistItem",      BLA,      BLA,      " contentDetails":{       " videoId":" DLME0PsJRnk"      }

为什么要添加"部分"这只会返回一点信息?

如何支持类似"片段,contentDetails(持续时间,已发布时间,视图)" 我觉得这是大多数应用程序想要列出给用户的基本元数据(片段)。 当你在它时,请删除这种无意义的Java外壳参数。为什么你会把你选择的语言泄漏到API中,这真的很难过。是的,继续检查我是否正确拼写它们是令人沮丧的。

好吧,看起来你强迫我们"我们"建立一个VideoIds列表,而不是转向,并在我之前用更少的时间做更多的API调用。 这也意味着,我必须管理50个项目的最大分页两次,一次是播放列表,如果它超过50个视频,然后当我转身进行Videos.List调用时,手动管理我的VideosIds分页列表。

如果我错过了一个多功能呼叫类型的API,请告诉我,谢谢。

1 个答案:

答案 0 :(得分:3)

以下是我现在的工作,如果有更好的方法,请告诉我

        // 20150802
    public async Task<List<YouTubeInfo>> PlaylistVideosInfo(String PlaylistID)
    {
        var YoutubeService = YouTubeService();
        //
        List<YouTubeInfo> VideoInfos = new List<YouTubeInfo>();
        //
        var NextPageToken = "";
        while (NextPageToken != null)
        {
            // 
            var SearchListRequest = YoutubeService.PlaylistItems.List("snippet");
            SearchListRequest.PlaylistId = PlaylistID;
            SearchListRequest.MaxResults = 50;
            SearchListRequest.PageToken = NextPageToken;
            // Call the search.list method to retrieve results matching the specified query term.
            var SearchListResponse = await SearchListRequest.ExecuteAsync();
            // Collect Video IDs from this page
            var VideoIDsBatch = new List<string>(); // batch Video detail search by 50 max
            foreach (var searchResult in SearchListResponse.Items)
            {
                VideoIDsBatch.Add(searchResult.Snippet.ResourceId.VideoId);                    
            }
            // Make API call for this batch  - expect a single page :(
            var VideoListRequest = YoutubeService.Videos.List("snippet,contentDetails");
            VideoListRequest.Id = String.Join(",", VideoIDsBatch); 
            VideoListRequest.MaxResults = 50;
            var VideoListResponse = await VideoListRequest.ExecuteAsync();
            // Collect each Video details
            foreach (var VideoResult in VideoListResponse.Items)
            {
                YouTubeInfoAdd(VideoInfos, VideoResult);
            }
            // request next page
            NextPageToken = SearchListResponse.NextPageToken;
        }
        // Return All Videos' detail
        return VideoInfos;
    }