大家好,特别是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,请告诉我,谢谢。
答案 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;
}