Итак, после долгих исследований, копания и немного меньшего количества волос, я понял несколько вещей.
Сначала войдите в «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