Rokesh Kumar Ответов: 0

Youtube-v3-api “не удалось запустить браузер с помощью ”https://accounts.google.com/o/oauth2/v2/auth-что?


Привет, я работаю над веб-приложением, которое загружает видео на канал Youtube пользователей. Я использовал код, который приведен в руководстве google Youtube API Guide.

static void Main(string[] args)
{
  Console.WriteLine("YouTube Data API: Upload Video");
  Console.WriteLine("==============================");

  try
  {
    new UploadVideo().Run().Wait();
  }
  catch (AggregateException ex)
  {
    foreach (var e in ex.InnerExceptions)
    {
      Console.WriteLine("Error: " + e.Message);
    }
  }

  Console.WriteLine("Press any key to continue...");
  Console.ReadKey();
}

private async Task Run()
{
  UserCredential credential;
  using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
  {
    credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        // This OAuth 2.0 access scope allows an application to upload files to the
        // authenticated user's YouTube channel, but doesn't allow other types of access.
        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"; // 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/*");


    await videosInsertRequest.UploadAsync();
  }
}


Что я уже пробовал:

Этот код отлично работает, когда я запускаю его в visual studio локально, и видео загружается на мой канал Youtube. Но проблема с которой я сталкиваюсь заключается в том что когда я размещаю приложение в IIS на серверной машине оно выдает исключение отказано в доступе к папке

'C:\Windows\system32\config\systemprofile'

Я дал разрешение на папку и теперь она выдала другое исключение

"Не удалось запустить браузер с помощью "https://accounts.google.com/o/oauth2/v2/auth-что?access_type=offline&response_type=code&client_id=MY_CLIENT_ID&redirect_uri=http%3A%2F%2Flocalhost%3A62196%2Fauthorize%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.загрузить" для авторизации. Подробнее см. Внутреннее исключение."

Patrice T

Мы не являемся поддержкой Google/YouTube.

Rokesh Kumar

Я просто хотел знать, сталкивался ли кто-то еще с этой проблемой

F-ES Sitecore

Этот;

Хранилище FileStream("для выполнения действий, описанных.в JSON"...

вероятно, он делает не то, что вы думаете, если этот код размещен в IIS. В какой папке он будет искать ваш файл json?

Rokesh Kumar

Файл Json находится внутри папки приложения, и у него есть разрешение на доступ к нему, проблема в том, что он хочет, чтобы браузер открывался с URI перенаправления, но этого не происходит.

F-ES Sitecore

"Папка приложения"? Что такое "папка приложения" для сайта, работающего под управлением IIS? Помните, что ваш код в IIS выполняется внутри хост-приложения (IIS), и когда запрашивается файл, это делает хост, а не ваш сайт.

Кроме того, если этот код буквально открывает браузер, то он не будет работать и внутри веб-сайта, поскольку ваш код (опять же) работает внутри хост-службы, и эта служба не имеет доступа к рабочему столу.

Просто потому, что ваш код работает в консоли, не означает, что вы можете поместить этот код на веб-сайт, и он все равно будет работать.

Rokesh Kumar

Мои извинения, позвольте мне объяснить, как это работает. В первый раз, когда пользователь загружает видео на YouTube, он открывает браузер для авторизации и в конечном итоге загружает видео. Это одноразовое разрешение. Со второго раза он не открывает браузер, а загружает видео. Теперь проблема в том, что, как я уже объяснял ранее, это, кажется, работает нормально, когда я запускаю это в Visual studio(ASP.NET) но при размещении в IIS он выдает ошибку "браузер не открывается".

F-ES Sitecore

Вы не можете создать браузер из процесса IIS, у него нет доступа к рабочему столу. Он работал только локально, поскольку клиент и сервер были одной и той же машиной, а ваш код выполнялся из вашей учетной записи пользователя, которая имела доступ к рабочему столу.

0 Ответов