获取用户"收藏夹"播放列表:contentDetails.relatedPlaylists.favorites是一个无效的ID

时间:2017-07-05 05:24:35

标签: c# google-api youtube-api google-api-dotnet-client youtube-data-api

Google documentation on this feature非常清楚,除了这不起作用(我使用C#,但由于API本身在语言中是相同的,所以希望可以理解

private async Task FetchYtUploads()
        {
            UserCredential credential;
            var credentialsPath = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), @"..\..\..\..\client_id.json").Replace("file:\\", "");
            using (var stream = new FileStream(credentialsPath, FileMode.Open, FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    // This OAuth 2.0 access scope allows for read-only access to the authenticated 
                    // user's account, but not other types of account access.
                    new[] { YouTubeService.Scope.YoutubeReadonly },
                    "user",
                    CancellationToken.None,
                    new FileDataStore(this.GetType().ToString())
                );
            }

            var youtubeService = new YouTubeService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = this.GetType().ToString()
            });

            var channelsListRequest = youtubeService.Channels.List("contentDetails");
            channelsListRequest.Mine = true;
            var channels = await channelsListRequest.ExecuteAsync(); // A list with just one item is returned

            if (channels.Items.Count <= 0)
            {
                Console.Write("ERROR: no YT channels found.");
                return;
            }

            var favoritesListId = channels.Items[0].ContentDetails.RelatedPlaylists.Favorites; 

channels.Items是一个只有一个项目的列表。并且channels.Items[0].ContentDetails.RelatedPlaylists.Favorites有一个ID正常,但它与我的&#34;收藏夹&#34;的URL链接中的ID不同。以下请求因ID RelatedPlaylists.Favorites而失败,但如果我硬编码我在列表的URL中查找的ID,则会有效:

var playlistItemsListRequest = youtubeService.PlaylistItems.List("snippet");
playlistItemsListRequest.PlaylistId = favoritesListId;
playlistItemsListRequest.MaxResults = 50;
playlistItemsListRequest.PageToken = nextPageToken;

var playlistItemsListResponse = await playlistItemsListRequest.ExecuteAsync();

发生了什么?我错过了什么吗?如何为我的&#34;收藏夹&#34;获取正确的ID?播放列表,如果ContentDetails.RelatedPlaylists.Favorites无法使用,playlistItemsListRequest.PlaylistId是什么?

1 个答案:

答案 0 :(得分:1)

您需要记住YouTube API是基于频道的。使用应用程序对API进行身份验证时,系统会要求您选择一个频道。您拥有的身份验证只允许您访问此一个频道。

如果您想访问其他频道,则必须重新验证您的应用并选择其他频道。

提示:更改&#34;用户&#34;到别的东西,它会再次请求auth。 user是您的凭据存储在%appData%

下的用户的名称