Есть ли выход за пределы Azure, чтобы использовать YouTube API для загрузки видео с URL-адреса Azure blob storage publi c - PullRequest
0 голосов
/ 18 марта 2020

Пожалуйста, исправьте меня, если я ошибаюсь, но моей первоначальной мыслью было использование функции 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();
        }
    }
} ``` 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...