Получение списка видео YouTube с помощью C# и Google.Apis.YouTube.v3

Я пытаюсь выполнить некоторое взаимодействие с видео на YouTube, используя последнюю версию Google.Apis.YouTube.v3 (по состоянию на 15 января 2014 г.).

Я сделал NuGet для следующего:

  • Google.Apis.YouTube.v3
  • Google.Apis.Аутентификация
  • 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 г.?


person user3197160    schedule 15.01.2014    source источник


Ответы (1)


Итак, после долгих исследований, копания и немного меньшего количества волос, я понял несколько вещей.

Сначала войдите в «Google Cloud Console». Если вы используете GAE (Google App Engine) и нажимаете на свой проект GAE и включаете «YouTube Data API 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 обычными stmts для печати консоли.

Затем перейдите к OAuth 2.0 и попытайтесь получить свои учетные данные без ошибок. Вам нужно будет загрузить файл OAuth JSON из «Google Cloud Console» в разделе «Учетные данные». Получив этот файл, замените все файлы с именем «client_secrets.json» содержимым загруженного файла json. Чтобы авторизация работала, я обнаружил, что мне не хватает Microsoft.Threading.Tasks.Extensions.Desktop.dll, которая является dll, которая позволяет браузеру открывать окно, чтобы предоставить доступ собственному приложению для работы с вашим Ютуб акк. Поэтому, если у вас есть какие-то ошибки во время части авторизации, проверьте внутреннее исключение, и есть вероятность, что это может быть и ваша проблема.

Отказ от ответственности: Нижняя половина кода, показанного ниже, была взята с: 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 с новым проектом. Как только я понял это, обычное количество исследований начало приносить результаты, а не просто разочарование!!

person user3197160    schedule 21.01.2014
comment
Как вы справились с FileDataStore? Он не распознается в моем проекте. - person sparcopt; 08.09.2014
comment
Сделал все это, но получил ошибку 401, хотя у меня появилось всплывающее окно с запросом разрешений и прочее stackoverflow.com/questions/40573697/ - person DanilGholtsman; 15.11.2016