#c# #api #youtube-api #youtube-data-api
Вопрос:
Я пробовал код в течение 3 дней для получения информации о статусе видео на моем канале YouTube, но не преуспел.
Ниже приведен код, который я использовал, я могу writeln()
указать название, идентификатор, описание видео, но не могу получить статус видео.
private async Task Editvideo()
{
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", 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;
// Retrieve the contentDetails part of the channel resource for the authenticated user's channel.
var channelsListResponse = await channelsListRequest.ExecuteAsync();
foreach (var channel in channelsListResponse.Items)
{
// From the API response, extract the playlist ID that identifies the list
// of videos uploaded to the authenticated user's channel.
var uploadsListId = channel.ContentDetails.RelatedPlaylists.Uploads;
Console.WriteLine("Videos in list {0}", uploadsListId);
var nextPageToken = "";
while (nextPageToken != null)
{
var playlistItemsListRequest = youtubeService.PlaylistItems.List("snippet");
playlistItemsListRequest.PlaylistId = uploadsListId;
playlistItemsListRequest.MaxResults = 50;
playlistItemsListRequest.PageToken = nextPageToken;
// Retrieve the list of videos uploaded to the authenticated user's channel.
var playlistItemsListResponse = await playlistItemsListRequest.ExecuteAsync();
foreach (var playlistItem in playlistItemsListResponse.Items)
{
// Print information about each video.
// playlistItem.Status = new PlaylistItemStatus();
// string videostatus = playlistItem.Status.PrivacyStatus;
// Console.WriteLine(videostatus);
Console.WriteLine("{0} ({1})", playlistItem.Snippet.Title, playlistItem.Snippet.ResourceId.VideoId);
}
nextPageToken = playlistItemsListResponse.NextPageToken;
}
}
}
Ответ №1:
Ответ на ваш вопрос будет немедленным, если принять во внимание спецификацию параметра part
запроса PlaylistItems.list
конечной точки API:
part
(строка)
part
Параметр указывает разделенный запятыми список одного или несколькихplaylistItem
свойств ресурса, которые будут включены в ответ API.Если параметр определяет свойство, содержащее дочерние свойства, дочерние свойства будут включены в ответ. Например, в
playlistItem
ресурсеsnippet
свойство содержит множество полей, включаяtitle
,description
position
, иresourceId
свойства. Таким образом, если вы зададитеpart=snippet
этот параметр , ответ API будет содержать все эти свойства.Следующий список содержит
part
имена, которые можно включить в значение параметра:
contentDetails
id
snippet
status
Теперь должно быть очевидно, что при необходимости status
свойство, возвращаемое конечной точкой, part
также должно содержать status
, как показано ниже:
var playlistItemsListRequest = youtubeService
.PlaylistItems.List("snippet,status");
Благодаря этому изменению кода ответ, полученный от API, будет включать запрошенный объект в разделе playlistItem.Status
.
Комментарии:
1. О, действительно, когда нам нужны результаты возвращаемых
status
свойств,part
необходимо их содержать. Я переоделся,part
как вы сказали выше, и код работал нормально. Большое Вам спасибо