Пожалуйста, исправьте меня, если я ошибаюсь, но моей первоначальной мыслью было использование функции Azure для загрузки видео на YouTube с помощью API YouTube (с помощью этого кода: https://developers.google.com/youtube/v3/docs/videos/insert), но я понял, что такой подход неосуществим. API данных YouTube имеет два метода доступа к данным: ApiKey и OAuth. Метод ApiKey был бы тем, что нам нужно для межсерверного взаимодействия, но он может получить доступ только к публикуемой информации c (список публикуемых c видео, плейлисты и т. Д. c). Мы не можем загружать видео в аккаунт методом ApiKey. Метод OAuth - это то, что позволяет нам загружать видео, но это «интерактивный» поток OAuth, то есть он требует, чтобы интерактивный пользователь предоставлял учетные данные в устройстве / браузере. Функция Azure не является интерактивным процессом. Решением этой проблемы будет использование служебной учетной записи, которая предназначена для OAuth между серверами. Но YouTube не поддерживает служебную учетную запись.
Я не уверен, как преодолеть этот блокиратор, если в моей функции есть API Google. Мне интересно, какие другие подходы я мог бы использовать? Есть ли простой способ, кроме Azure, использовать API YouTube для загрузки видео с URL-адреса Azure blob storage publi c? Спасибо.
Ниже приведена моя функция, которая содержит пример кода YouTube API, взятый отсюда (https://developers.google.com/youtube/v3/docs/videos/insert)
Function1.cs:
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Upload;
using Google.Apis.YouTube.v3.Data;
using System.Reflection;
using Google.Apis.YouTube.v3;
using Google.Apis.Services;
using System.Threading;
namespace YoutubeUploadFunction
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run([BlobTrigger("video/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, Microsoft.Azure.WebJobs.ExecutionContext context, ILogger log)
{
UserCredential credential;
using (var stream = new FileStream(System.IO.Path.Combine(context.FunctionDirectory, "client_secrets.json"), FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
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";
video.Status = new VideoStatus();
video.Status.PrivacyStatus = "unlisted";
var VideoInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", myBlob, "video/*");
await VideoInsertRequest.UploadAsync();
}
}
} ```