Список YouTube видео с использованием C# и Google.Apis.YouTube.v3
Я пытаюсь выполнить взаимодействие с видео на YouTube, используя последнюю версию Google.Apis.YouTube.v3 (по состоянию на 15 января 2014 г.).
Я сделал NuGet на следующем:
- Google.Apis.YouTube.v3
- Google.Apis.Authentication
- Google.Apis.Drive.v2 (не обязательно, но все равно получил)
Затем я попытался запустить код, найденный по адресу: https://developers.google.com/youtube/v3/docs/playlistItems/list
Тем не менее, код имеет следующие ссылки, которые я не могу найти ни в одной из последних загрузок NuGet...
using Google.Apis.Auth.OAuth2.DotNetOpenAuth;
using Google.Apis.Samples.Helper;
Тогда есть следующий комментарий в верхней части кода, но ссылки не приводят меня ни к чему полезному.
/* External dependencies, OAuth 2.0 support, and core client libraries are at: */
/* https://code.google.com/p/google-api-dotnet-client/wiki/APIs#YouTube_Data_API */
/* Also see the Samples.zip file for the Google.Apis.Samples.Helper classes at: */
/* https://code.google.com/p/google-api-dotnet-client/wiki/Downloads */
Я начинаю верить, что лучший способ играть на YouTube с использованием C# - это использовать более старые версии базы кода YouTube.v3, которые совпадают с примерами, которые, похоже, работали.
Любая помощь (особенно от peleyal) будет высоко ценится. Возможно, я упускаю что-то очевидное и нужно бить по голове...
Кстати, я скачал секретный файл JSON своего клиента и успешно запустил несколько примеров, содержащихся в google-api-dotnet-client-1.7.0-beta.samples.zip
файл. Однако, как ни странно, в этом образце zip-файла отсутствуют какие-либо образцы YouTube. В этом zip-файле также отсутствуют классы Google.Apis.Samples.Helper.
Есть ли у кого-нибудь полезный пример кода для взаимодействия с YouTube с использованием последней версии кода NuGet от 14 января 2014 года?
1 ответ
Поэтому после долгих исследований, рытья и немного меньшего количества волос я понял несколько вещей.
Сначала войдите в "Google Cloud Console". Если вы используете GAE (Google App Engine) и нажимаете на свой проект GAE и включаете "API данных YouTube v3", вы гарантированно не получите ГДЕ! Вместо этого вернитесь из своего проекта GAE и, например, создайте новый проект под названием "Проект API".
Затем в этом проекте включите нужные API, и вы начнете получать лучшие результаты. Намного лучшие результаты. Начните с попытки поиска на YouTube. Это позволяет вам просто вставить свой ключ API, и вам не нужно связываться с OAuth2, для этого требуется меньше DLL, так что это хорошее место для начала. Попробуйте что-то вроде следующего:
YouTubeService youtube = new YouTubeService(new BaseClientService.Initializer() {
ApplicationName = "{yourAppName}",
ApiKey = "{yourApiKey}",
});
SearchResource.ListRequest listRequest = youtube.Search.List("snippet");
listRequest.Q = "Loeb Pikes Peak";
listRequest.MaxResults = 5;
listRequest.Type = "video";
SearchListResponse resp = listRequest.Execute();
foreach (SearchResult result in resp.Items) {
CommandLine.WriteLine(result.Snippet.Title);
}
Не стесняйтесь заменить CommandLine обычными средствами печати консоли.
Затем перейдите к OAuth 2.0 и попробуйте ввести свои учетные данные без ошибок. Вам необходимо загрузить файл OAuth JSON из "Консоли Google Cloud" в разделе "Учетные данные". Получив этот файл, замените все файлы с именем client_secrets.json содержимым загруженного файла json. Чтобы получить разрешение на работу, я обнаружил, что мне не хватает Microsoft.Threading.Tasks.Extensions.Desktop.dll, которая является DLL, которая позволяет браузеру открывать окно, чтобы предоставить доступ для родного приложения, чтобы гадить с вашим YouTube действие Поэтому, если у вас есть какие-то ошибки во время авторизации, проверьте внутреннее исключение, и есть вероятность, что это может быть вашей проблемой.
Отказ от ответственности: нижняя половина кода, показанного ниже, была взята из: github.com/youtube/api-samples/blob/master/dotnet
UserCredential credential;
using (FileStream stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None,
new FileDataStore("YouTube.Auth.Store")).Result;
}
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
var video = new Video();
video.Snippet = new VideoSnippet();
video.Snippet.Title = "Default Video Title";
video.Snippet.Description = "Default Video Description";
video.Snippet.Tags = new string[] { "tag1", "tag2" };
video.Snippet.CategoryId = "22"; // See https://developers.google.com/youtube/v3/docs/videoCategories/list
video.Status = new VideoStatus();
video.Status.PrivacyStatus = "unlisted"; // or "private" or "public"
var filePath = @"REPLACE_ME.mp4"; // Replace with path to actual movie file.
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
var videosInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", fileStream, "video/*");
videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged;
videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived;
videosInsertRequest.UploadAsync();
}
Так что мои 2 цента стоят. Кроме того, вам необходимо выполнить NuGet для DotNetOpenAuth и в своем коде заменить любые "использующие" вызовы Google.Apis.Auth.OAuth2.DotNetOpenAuth на "используя DotNetOpenAuth".
Надеюсь, это поможет другим. Важным было выяснить GAE против нового проекта. Как только я понял это, нормальное количество исследований начало приносить результаты, а не чистое разочарование!!