【问题标题】:How to use YouTube Data API如何使用 YouTube 数据 API
【发布时间】:2020-08-06 22:32:38
【问题描述】:

我尝试使用 YouTube 数据 API。 我真的很好地查看了我在互联网上找到的所有内容。代码本身不是问题,但我没有找到,在哪里使用这个代码。我是否只需创建一个 python 文件(例如在 Visual Studio Code 中)并在那里运行它?因为当我尝试这个时它没有工作...... 我还看到很多人只使用指挥官的 API,其他人使用 chrome (localhost:8888...)。所以我真的不知道该走什么路,也不知道该做什么。

感谢您的帮助 :) 最好的问候!

【问题讨论】:

    标签: api youtube youtube-api youtube-data-api


    【解决方案1】:
    1. 确保您的 PC 上安装了 python
    2. 创建项目:Google’s APIs and Services dashboard
    3. 启用 Youtube v3 API:API Library
    4. 创建凭据:Credentials wizard
    5. 现在您需要使用您创建的凭据获取访问令牌和刷新令牌
    6. 在以下库之一中查找身份验证示例:
    7. 复制并粘贴您从第 4 步获得的客户端 ID 和客户端密码,并将它们粘贴到您在第 6 步中找到的身份验证示例中(应搜索 OAuth2 示例),此步骤应提供访问令牌和刷新令牌
    8. 从以下任一位置复制并粘贴 Youtube 示例:
    9. 将访问令牌和刷新令牌字段替换为您获得的字段。

    现在您应该可以通过键入以下内容从任何终端运行该文件:

    python3 yourfile.py
    

    [编辑]

    API 密钥与访问令牌不同。使用 Google API 进行身份验证的主要方法有两种:

    1. 访问和刷新令牌
    2. API_KEY.

    API 密钥不适用于个人信息。您需要为此获取访问和刷新令牌(方法 1)。

    一旦您获得访问令牌,它的行为方式与您获得的 API_KEY 类似。获取访问令牌比仅使用 API_KEY 复杂一些。

    刷新令牌是您在身份验证时通过访问令牌获得的令牌。访问令牌在 3600 秒后过期。当它们过期时,您的身份验证库会向 Google 的服务器请求带有刷新令牌的新访问令牌。刷新令牌的生命周期很长(通常是无限期的),因此请确保安全地存储它。

    要获取访问令牌和刷新令牌(用户凭据),您必须首先创建客户端凭据。其中应包含 1. 客户端 ID 和 2. 客户端密码。这些只是普通的字符串。

    您还应该在 Google 应用程序控制台中设置重定向 URL,以便正确执行 OAuth2 流程。 OAuth2 流是许多 API 所依赖的身份验证协议,以允许它们在用户同意的情况下对用户的帐户进行操作。 (例如,当应用要求您代表您发帖或控制您的帐户时,它通常会使用此协议。)

    Aiogoogle 的文档在解释 Google 可用的身份验证流程方面做得不错。

    https://aiogoogle.readthedocs.io/en/latest/

    但这是一个异步 Python 库。如果您不熟悉异步语法,可以阅读文档以大致了解身份验证系统的工作原理,然后将其应用于 Google 的同步 Python 库。

    关于第 6 点。我发布的 Aiogoogle 链接就是其中之一,它们只是客户端库,可以帮助您更快地访问 Google 的 API,并且使用更少的样板。这两个库都有文档,其中包含有关如何使用它们的示例的链接。因此,打开文档,阅读它,搜索发布的示例,尝试了解示例中的代码是如何工作的。然后也许下载它并在你自己的机器上运行它。

    我建议您阅读docs。希望对您有所帮助。

    【讨论】:

    • 感谢您迄今为止的帮助!我不明白第 5 步和第 6 步到底是什么。我创建了一个项目,启用了 youtube v3 API,创建了凭据。我有 API 密钥(与访问令牌相同),什么是刷新令牌?你能解释一下第 6 点吗?非常感谢您的帮助:)
    • 我编辑了答案以回答您的评论。从标题后阅读:[编辑]。希望有帮助
    【解决方案2】:
    using System;
    using System.IO;
    using System.Reflection;
    using System.Threading;
    using System.Threading.Tasks;
    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Services;
    using Google.Apis.Upload;
    using Google.Apis.Util.Store;
    using Google.Apis.YouTube.v3;
    using Google.Apis.YouTube.v3.Data;
    
    namespace Google.Apis.YouTube.Samples
    {
      /// <summary>
      /// YouTube Data API v3 sample: upload a video.
      /// Relies on the Google APIs Client Library for .NET, v1.7.0 or higher.
      /// See https://code.google.com/p/google-api-dotnet-client/wiki/GettingStarted
      /// </summary>
      internal class UploadVideo
      {
        [STAThread]
        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/*");
            videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged;
            videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived;
    
            await videosInsertRequest.UploadAsync();
          }
        }
    
        void videosInsertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress)
        {
          switch (progress.Status)
          {
            case UploadStatus.Uploading:
              Console.WriteLine("{0} bytes sent.", progress.BytesSent);
              break;
    
            case UploadStatus.Failed:
              Console.WriteLine("An error prevented the upload from completing.\n{0}", progress.Exception);
              break;
          }
        }
    
        void videosInsertRequest_ResponseReceived(Video video)
        {
          Console.WriteLine("Video id '{0}' was successfully uploaded.", video.Id);
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      我不是 python 开发人员,但我猜你可以从这里开始:

      https://developers.google.com/youtube/v3/quickstart/python

      使用 pip 安装所需的依赖项。

      您应该能够创建一个简单的 python 文件,该文件使用 API 进行身份验证,然后在 google api 客户端上调用一个方法,然后将其输出。这里有一些例子:

      https://github.com/youtube/api-samples/blob/master/python/

      【讨论】:

        猜你喜欢
        • 2019-08-22
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-08
        • 2014-07-29
        • 1970-01-01
        • 2015-09-14
        相关资源
        最近更新 更多