将视频从我的 Java Web 服务器上传到 Youtube

2023-12-23

我的目标是将上传到我的网络服务器的视频上传到 Youtube我自己的频道, 不是用户的 YouTube 帐户(我的网络服务器充当代理)。

我找到了上传视频到Youtube的示例代码here https://github.com/youtube/api-samples/blob/master/java/src/main/java/com/google/api/services/samples/youtube/cmdline/data/UploadVideo.java与获得的证书this way https://github.com/youtube/api-samples/blob/master/java/src/main/java/com/google/api/services/samples/youtube/cmdline/Auth.java。我遇到的这个示例的问题是,它将凭证写入磁盘,并打开一个 http 服务器。由于我的 Web 服务器可能有很多用户同时上传视频,因此凭证文件位置必须是动态的,并且不可能多次绑定到同一 http 端口。此外,在搜索了其他有关上传到 Youtube 的文章后,我认为这种方法适合用户上传到他们的 Youtube 帐户。

您能否分享您针对我的场景的经验/代码示例/解决方案?简而言之,我只是想自动化打开 Youtube 仪表板并将视频上传到 Youtube 频道的过程。


一般来说,从 API V3 开始,Google 更喜欢 OAuth2 而不是其他机制,并且上传视频(或修改用户数据的任何其他操作)需要 OAuth2。

幸运的是,有一种特殊的令牌称为refresh token来救援。刷新令牌不会像普通访问令牌那样过期,并且用于在需要时生成普通访问令牌。因此,我将我的申请分为两部分:

  • 第一部分用于生成刷新令牌,这是一个 Java 桌面应用程序,旨在由用户在计算机上运行。See here https://github.com/googleads/googleads-java-lib/blob/master/examples/adwords_axis/src/main/java/adwords/axis/auth/GetRefreshToken.java来自 Google 的示例代码。
  • 第二部分是我的 Web 应用程序的一部分,它使用给定的刷新令牌来创建凭证对象。

这是我在 Scala 中的实现,您可以轻松适应 Java 版本:

要生成刷新令牌,您应该将 accessType 设置为offline用于授权流程。注意:如果您的系统上已经存在令牌,即使它没有刷新令牌,它也不会尝试获取新令牌,因此您还必须将批准提示设置为force:

def authorize(dataStoreName: String, clientId: String, clientSecret: String): Credential = {

    val builder = new GoogleAuthorizationCodeFlow.Builder(
      HTTP_TRANSPORT,
      JSON_FACTORY,
      clientId,
      clientSecret,
      Seq(YouTubeScopes.YOUTUBE_UPLOAD)
    )

    val CREDENTIAL_DIRECTORY = s"${System.getProperty("user.home")}/.oauth-credentials"
    val fileDataStoreFactory = new FileDataStoreFactory(new java.io.File(CREDENTIAL_DIRECTORY))
    val dataStore: DataStore[StoredCredential] = fileDataStoreFactory.getDataStore(dataStoreName)

    builder.setCredentialDataStore(dataStore).setAccessType("offline").setApprovalPrompt("force")

    val flow = builder.build()

    val localReceiver = new LocalServerReceiver.Builder().setPort(8000).build()

    new AuthorizationCodeInstalledApp(flow, localReceiver).authorize("user")
}

val credential = authorize(dataStore, clientId, clientSecret)
val refreshToken = credential.getRefreshToken

要在服务器上使用刷新令牌,您可以从刷新令牌构建凭据:

def getCredential = new GoogleCredential.Builder()
    .setJsonFactory(JSON_FACTORY)
    .setTransport(HTTP_TRANSPORT)
    .setClientSecrets(clientId, clientSecret)
    .build()
    .setRefreshToken(refreshToken)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将视频从我的 Java Web 服务器上传到 Youtube 的相关文章

随机推荐

  • 传递一个简单的 IEnumerable 来查看并使用 foreach 循环会返回空白屏幕?

    我有一个简单的客户模型类列表 我将其传递到我的视图 我想迭代客户类 但我的观点是告诉我通过返回空白屏幕来结束 请告诉我这里出了什么问题 型号类别 public class Customer public string CustomerNam
  • ASCII 艺术图像转换算法如何工作? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有一些不错的免费 图像到 ASCII 艺术 转换网站 如下所示 ASCII art org http www ascii art or
  • Laravel 有没有办法执行 .SQL 文件来加载数据

    我有历史数据想要加载到新数据库中 我可以通过运行 MySQL 命令来做到这一点 但我有兴趣知道是否有artisan命令来做到这一点 没有办法使用以下方式导入开箱即用的数据库转储artisan 但是 您可以创建自定义artisan命令 php
  • 什么场景调用fs.close是必要的

    我在nodejs API中找不到更多关于fs close的解释 我想知道什么场景下调用fs close是必要的 例如 var fs require fs fs writeFile home a tex abc or like fs appe
  • codeigniter 2.1.4 支持http方法自定义路由吗?

    我知道 codeigniter 支持自定义路由到另一个类 方法 例如 route product any catalog product lookup 但是 它是否支持基于调用 url 的 http 请求类型的路由 如 laravel 中那
  • Android Facebook 获取所有个人资料信息

    我如何从 Facebook 获取所有用户个人资料信息 如名字 姓氏 电子邮件等 我已经下载了FB SDK https github com facebook facebook android sdk但没有获取个人资料信息的示例 文件夹 fa
  • 如何用另一个 numpy 数组填充 numpy 数组

    我有一个空的 numpy 数组 另一个填充了值 我想用填充的数组填充空的 numpy 数组 x 次 因此 当 x 3 时 最初为空数组 看起来像 populated array populated array populated array
  • 如何使 ActionBar 上的项目分别为左、中、右各一个?

    我在用着actionbarsherlock去做吧 我想要在操作栏中显示的示例 登录 公司徽标 过滤器 我在操作栏中得到的示例 登录 公司徽标 过滤器 我在 res menu 中创建了登录按钮 公司徽标和过滤按钮 以可绘制的形式 activi
  • Django + uwsgi + nginx 重定向到默认页面“欢迎来到 NGINX”

    我是 python 和 django 的初学者 不过 我正在尝试创建一个服务器来部署我的应用程序 但是当我想访问我的应用程序时 我总是得到默认的 nginx 页面 欢迎使用 nginx 该服务器运行 Ubuntu 12 04 精确 我已经使
  • 将 switch 语句案例分组在一起?

    我可能忽略了一些东西 但是 C 中有没有一种简单的方法可以将案例分组在一起 而不是将它们单独写出来 我记得基本我可以这样做 SELECT CASE Answer CASE 1 2 3 4 C 示例 对于需要的人 include
  • 网络日期的国际化

    有人有任何好的日期国际化 架构 吗 就像英语中的it Monday 中文 Monday 荷兰语 maandag 日语 月曜日 所以我的第一个想法是创建某种类 以 59 种不同的语言存储周一到周日的字符串 显然这根本不可扩展 想象一下现在我需
  • 将实体关系模型扩展到表(子类)

    在 EER 模型中存在子类实体 我想知道在真正的 SQL 表中实现这一点的方法是什么 或者是否有任何指南可以帮助我了解如何将实体子类实现到有帮助的表中 谢谢 马丁 福勒的书企业应用架构模式 http www martinfowler com
  • 从经过身份验证的路由获取图像

    我有一个正在运行的图像上传前端 后端代码 现在我希望能够在上传后从服务器获取图像 问题是图像必须位于经过身份验证的路由后面 用户必须在标头或正文中传递 jwt 令牌 当我尝试像这样获取图像时 fetch imageURL method GE
  • hidpi 显示上的 Android 模拟器?

    我在安装了 KDE Neon 的笔记本电脑上运行 android 模拟器 26 1 3 KDE Neon 是基于 Ubuntu 16 04 和最新 KDE 的发行版 我的笔记本电脑的屏幕分辨率是 14 3840X2160 物理 DPI 31
  • Woocommerce 和 Opayo:向发送到 API 的数据添加自定义字段

    非常具体的问题 但是 我在我们的 Wordpress Woocommerce 网站上遇到了我们公司支付网关的问题 我们在该网站上使用 Opayo 插件 适用于 Opayo Direct 问题是 最初设置时 没有选择模板 选项Referenc
  • 使用Java Apache PoolingClientConnectionManager泄漏内存,如何解决?

    我的网络应用程序在晚上运行作业 并遇到问题 它使用了大量内存 我用命令来查找哪个函数占用了java资源 其结果是 tomcat uhzd006525 jstack 2365 grep 93f A 30 parking to wait for
  • 如何在Python中将元组作为参数传递?

    假设我想要一个元组列表 这是我的第一个想法 li li append 3 three 结果是 Traceback most recent call last File foo py line 12 in
  • 为什么在满时将阵列容量加倍是常见的做法?

    我注意到实现动态数组是很常见的 尤其是在面试问题和家庭作业中 通常 我看到的问题是这样表述的 实现一个数组 其中doubles满时容量 或者非常相似的东西 他们几乎总是 根据我的经验 使用这个词double明确地 而不是更笼统地 实现一个数
  • List::Util - 减少 - 长度 - 编码 - 问题

    为什么第一个reduce 示例得到错误的结果 test txt BE bb bbbbbbbbbbbbbbb aaaaaa test pl usr bin env perl use warnings use 5 012 use open en
  • 将视频从我的 Java Web 服务器上传到 Youtube

    我的目标是将上传到我的网络服务器的视频上传到 Youtube我自己的频道 不是用户的 YouTube 帐户 我的网络服务器充当代理 我找到了上传视频到Youtube的示例代码here https github com youtube api