正在获取用户的 "Favorites" 播放列表:contentDetails.relatedPlaylists.favorites 是无效 ID
Getting the user's "Favorites" playlist: contentDetails.relatedPlaylists.favorites is an invalid ID
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,但它与我的 "Favorites" URL link 中的 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();
这是怎么回事?我错过了什么吗?我怎样才能为我的 "Favorites" 播放列表获取正确的 ID,如果不能在 playlistItemsListRequest.PlaylistId
中使用,那么 ContentDetails.RelatedPlaylists.Favorites
是什么?
您需要记住,YouTube API 是基于频道的。当您使用您的应用程序向 API 进行身份验证时,系统会要求您选择一个频道。您拥有的身份验证只会让您访问这一渠道。
如果您想访问其他频道,则必须重新验证您的应用程序并选择其他频道。
提示:将"user"更改为其他内容,它将再次请求授权。 user 是您的凭据存储在 %appData%
中的用户的名称
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,但它与我的 "Favorites" URL link 中的 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();
这是怎么回事?我错过了什么吗?我怎样才能为我的 "Favorites" 播放列表获取正确的 ID,如果不能在 playlistItemsListRequest.PlaylistId
中使用,那么 ContentDetails.RelatedPlaylists.Favorites
是什么?
您需要记住,YouTube API 是基于频道的。当您使用您的应用程序向 API 进行身份验证时,系统会要求您选择一个频道。您拥有的身份验证只会让您访问这一渠道。
如果您想访问其他频道,则必须重新验证您的应用程序并选择其他频道。
提示:将"user"更改为其他内容,它将再次请求授权。 user 是您的凭据存储在 %appData%
中的用户的名称