使用 Python 的具有多个帐户的 YouTube 数据 API

2024-01-28

我正在开发一个应用程序,旨在帮助我的一个朋友更好地组织他的 YouTube 频道。他在不同的 Google 帐户上拥有多个频道。我正在用 Python 开发这个程序,目前我对 YouTube Data API 没有太多经验,我计划使用它,因为它似乎是唯一的选择。

应用程序本身并不是很复杂。它唯一需要做的就是上传具有指定标题、描述和其他属性的视频,并且还应该可以在视频上撰写评论。我在 Google Developers Console 中启动了一个简单的应用程序,启用了 YouTube 数据 API 并创建了一个 API 密钥和一个 OAUTH 客户端 ID。

到目前为止,我已经成功地在视频上发表评论,但似乎每次我运行 Python 脚本(目前它只是一个发布单个评论的简单脚本)时,Google 都希望我明确选择我想要使用的帐户,并且我每次运行脚本时都必须授予脚本权限。

有没有一种方法可以让我只运行一次脚本并告诉Google我想使用哪个帐户来发布评论,授予所有权限,然后Google会记住这一点,这样我就不必每次都明确授予权限?

另外,我如何能够切换帐户并使用该帐户进行上传,因为目前我总是需要在运行脚本时弹出 Google 客户端时选择一个帐户。

我听说您可以获得 Google 授权的应用程序,这会有所帮助吗?或者如果我只是将我的应用程序保留在测试状态而不是生产环境中,可以吗?


如果你有N帐户并想要在每个帐户上上传视频,那么您必须运行才能成功完成NOAuth 2 授权/身份验证流程。

对于每一个NOAuth 流程中,成功完成每一项后,您必须将获得的凭据数据持久保存到计算机本地存储中的单独文件中。

这很可能被视为应用程序的初始化步骤(尽管在以后的任何阶段,您都可以对需要应用程序了解的任何其他渠道重复此步骤)。你的代码看起来像:

# run an OAuth flow; then obtain credentials data
# relative to the channel the app's user had chosen
# during that OAuth flow
from google_auth_oauthlib.flow import InstalledAppFlow
scopes = ['https://www.googleapis.com/auth/youtube']
flow = InstalledAppFlow.from_client_secrets_file(
           client_secret_file, scopes)
cred = flow.run_console()

# build an YouTube service object such that to
# be able to retrieve the ID of the channel that
# the app's user had chosen during the OAuth flow
from googleapiclient.discovery import build
youtube = build('youtube', 'v3', credentials = cred)
response = youtube.channels().list(
    part = 'id',
    mine = True
).execute()
channel_id = response['items'][0]['id']

# save the credentials data to a JSON text file
cred_file = f"/path/to/credentials/data/dir/{channel_id}.json"
with open(cred_file, 'w', encoding = 'UTF-8') as json_file:
    json_file.write(cred.to_json())

Above, client_secret_file是包含您从 Google Developers Console 获取的应用的客户端密钥 JSON 文件的文件的完整路径。

随后,每次您想要上传视频时,您都必须在应用程序内选择将该视频上传到哪个频道。从程序逻辑的角度来看,这意味着以下事情——假设您选择了 ID 为的频道channel_id:读入关联的凭据数据文件channel_id用于将其内容传递给您的 YouTube 服务对象youtube构造如下图:

# read in the credentials data associated to
# the channel identified by its ID 'channel_id'
from google.oauth2.credentials import Credentials
cred_file = f"/path/to/credentials/data/dir/{channel_id}.json"
cred = Credentials.from_authorized_user_file(cred_file)

# the access token need be refreshed when
# the previously saved one expired already
from google.auth.transport.requests import Request
assert cred and cred.valid and cred.refresh_token
if cred.expired:
    cred.refresh(Request())
    # save credentials data upon it got refreshed
    with open(cred_file, 'w', encoding = 'UTF-8') as json_file:
        json_file.write(cred.to_json())

# construct an YouTube service object through
# which any API invocations are authorized on
# behalf of the channel with ID 'channel_id'
from googleapiclient.discovery import build
youtube = build('youtube', 'v3', credentials = cred)

运行此代码后,YouTube 服务对象youtube将进行初始化,以便通过此对象发出的每个 API 端点调用都将代表由以下标识的通道完成授权请求channel_id.

重要提示:您需要安装该软件包适用于 Python 的 Google 身份验证库 https://github.com/GoogleCloudPlatform/google-auth-library-python, google-auth,版本 >= 1.21.3 (google-authv1.3.0引入Credentials.from_authorized_user_file、v1.8.0引入Credentials.to_jsonv1.21.3 修复了后一个函数。它的阶级'expiry成员),用于凭证对象cred保存到 JSON 文本文件并从中加载。

还有一个重要的注意事项:上面的代码已尽可能简化。错误情况根本不被处理。例如,上面的代码不处理以下错误情况:cred_file在写出新的凭证数据文件时或在cred_file在读取应该已经存在的凭据数据时不存在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 的具有多个帐户的 YouTube 数据 API 的相关文章

随机推荐

  • R Shiny:如何在 DT::renderDataTable 中添加分页

    我正在尝试在我的 R Shiny 应用程序中添加分页 搜索框和选择器 但它现在不起作用 我尝试了分页 TRUE 和搜索 TRUE 在选项中 如下所示 但它不起作用 你知道我应该添加什么吗 output mytable1 lt DT rend
  • 从短信打开应用程序并获取 iOS 中的短信内容

    我正在尝试构建一个 iOS 应用程序 基本前提是用户收到一条包含消息 应用程序链接和其他详细信息的短信 例如 该消息可能如下所示 Good morning Kindly open the application mylink here Ad
  • 等待进程完成以启动另一个进程

    当用户单击我的按钮时 它会执行两个功能 发送短信和发送电子邮件 当我单击此按钮时 正在发送短信 突然弹出电子邮件选择客户端窗口 我希望仅在完成短信发送功能后才显示电子邮件客户端选择器窗口 我应该如何更改我的代码 Button hi Butt
  • 如何从 SQL 结果中提取数值数据

    假设有一个表 A 有 2 列 ID INT DATA VARCHAR 100 执行 SELECT DATA FROM A 的结果如下所示 DATA Nowshak 7 485 m Maja e Korabit Golem Korab 2 7
  • 如何区分应用程序中的测试属性和生产属性?

    我们正在开发一个大型 J2ee 电子销售解决方案 它有很多集成 CMS ERP 邮件服务器等 所有这些系统都分为测试和生产环境 我们需要使用测试配置将应用程序部署到测试服务器 而当部署到生产服务器时 它应该使用生产配置 我们如何让我们的应用
  • Swift 的 UITableView 示例

    我使用 Swift 和 iOS 已有好几个月了 我熟悉许多做事的方法 但我还不够好 我不能不看就直接写下来 我过去很欣赏 Stack Overflow 提供的快速答案 让我回到对我已经生疏的主题的正轨 例如 AsyncTask Androi
  • 如何开始将 django-cms 集成到现有项目中

    我的目的是将现有项目中的静态页面 关于我们 联系我们等 转换为管理可编辑页面 我已按照以下说明进行操作tutorial http django cms readthedocs org en 3 0 12 how to integrate h
  • W1024 组合有符号和无符号类型 - 扩大两个操作数

    我怎样才能防止这个警告 DCC 警告 uFvSystem pas 293 W1024 组合有符号和无符号类型 扩大了两个操作数 function LinkerTimestamp TDateTime overload begin Result
  • 为什么我不应该#include

    我用我的代码发布了一个问题 其唯一的 include指令如下 include
  • Chrome Devtools 以搜索方式打开,而不是开发工具本身

    尝试运行 Nativescript 调试会话 每次我进入 chrome devtools devtools bundled inspector html experiments true ws localhost 41000 它会打开谷歌搜
  • 全卷积网络的每像素 softmax

    我正在尝试实现类似全卷积网络的东西 其中最后一个卷积层使用大小为 1x1 的滤波器并输出 分数 张量 分数张量的形状为 Batch height width num classes 我的问题是 张量流中的什么函数可以对每个像素应用 soft
  • UITextView 绘制不可见/空白字符

    我将如何做一个UITextView为制表符 空格和换行符结尾绘制不可见字符 我认为必须在drawRect CGRect 方法或通过 Text Kit 中的布局管理器 有什么简单和 或直观的解决方案吗 我只需要知道如何获得CGRect每个空白
  • 如何在 Windows 8 Metro 应用程序中的设备中存储缩略图图像#

    我正在使用此代码创建缩略图并在框架中显示 平台 gt 使用 C 的 Windows 8 Metro 应用程序 http code msdn microsoft com windowsapps File and folder thumbnai
  • 使用 TextArea 通过 JavaFX 编辑大型文本文件

    有没有一种方法可以在 TextArea 中相当快地编辑相对较大的文本文件 例如 10 25 MB 或者也许可以禁用某些功能以使其更快 有替代组件吗 我了解 RichTextFX 但我想它会更慢 因为它做得更多 而且我只需要一个基本的编辑器
  • 单击按钮时关闭 jQuery 厚盒

    这是我的 jQuery script gt Html
  • 不同饼图中每个标签保持相同的颜色

    我无法为从一个饼图到另一个饼图的每个标签保持相同的颜色 如下图所示 Matplotlib 反转了第二个饼图中的颜色 我希望 Frogs 标签保持红色 Hogs 标签保持绿色 我也尝试添加label参数 但它只是给出了错误的计数 我还尝试反转
  • PHP $_FILES 文件循环上传

    我想从 php 函数将文件插入到 mysql 中 需要上传的文件已经存在于服务器上 所以我不想使用上传表单 我想循环遍历目录并将文件信息放入 FILES 请让我知道如何获得 file into FILES然后调用上传 dir handle
  • 在多个线程上并行调用 ICsharpCode.SharpZipLib 是否安全

    我们当前使用 ICsharpCode SharpZipLib 库的 GZipOutputStream 类进行压缩 我们通过一个线程来完成它 我想将输入数据流分割成块并并行压缩它们 我担心这个库内部可能有一些静态数据 这些静态数据会被多个线程
  • 使用 Python 的 Headless Chrome 在尝试下载文件时暂停

    我在 Mac 上使用 Python Jupyter Selenium webdriver 和 headless Chrome 带有 Canary 我写了一个脚本来抓取一个非常旧的网站 为了从该网站下载文件 我需要单击几个按钮 最终引导我到一
  • 使用 Python 的具有多个帐户的 YouTube 数据 API

    我正在开发一个应用程序 旨在帮助我的一个朋友更好地组织他的 YouTube 频道 他在不同的 Google 帐户上拥有多个频道 我正在用 Python 开发这个程序 目前我对 YouTube Data API 没有太多经验 我计划使用它 因