如何运行 Youtube Api 视频:插入 (python)

Posted

技术标签:

【中文标题】如何运行 Youtube Api 视频:插入 (python)【英文标题】:How to run Youtube Api Video: insert (python) 【发布时间】:2021-12-03 13:18:14 【问题描述】:

我想将 Youtube api 添加到我的项目中以从我的网站加载视频,直到现在我只使用 html、css、javascriptphp 和 sql 等语言,现在我在这个链接上看到了 https://learndataanalysis.org/how-to-upload-a-video-to-youtube-using-youtube-data-api-in-python/ 一个关于如何使用 python 实现 youtube api(我有 0 知识)。 这些是我正在使用的代码: - 第一个名为“upload_video.py”

import datatime
from Google import Create_Service
from googleapiclient.http import MediaFileUpload

CLIENT_SECRET_FILE = 'client_secret.json'
API_NAME = 'youtube'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/youtube.upload']

service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)

upload_date_time = datetime.datetime(2021, 11, 25, 12, 30, 0).isoformat() + '.000Z'


#print(“Site to refer: https://developers.google.com/youtube/v3/docs/videos/insert#.net”)
request_body = 

'snippet': 

  'categoryId': 19,
  'title': 'Uploading Test',
  'description': '1° test di caricamento su youtube',
  'tags': ['Travel', 'video test', 'Treavel tips']
,

'status': 

  'privacyStatus': 'private',
  'publishAt': upload_date_time,
  'selfDeclareMadeForKids': False
,

'notifySubscribers': False



mediaFile = MediaFileUpload('../Video/Clouds - 64767.MP4')

response_upload = service.videos().insert(

  part= 'snippet, status',
  body= request_body,
  media_body= mediaFile 
  ).execute()

  
service.thumbnails().set(

  videoId= response_upload.get('id'),
  
  media_body= MediaFileUpload('../img/Thumbnail_Video/logo_STM.png')
  ).execute()

-第二个名为“Google.py”

import pickle
import os
from google_auth_oauthlib.flow import Flow, InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload, MediaIoBaseDownload
from google.auth.transport.requests import Request


def Create_Service(client_secret_file, api_name, api_version, *scopes):
print(client_secret_file, api_name, api_version, scopes, sep='-')
CLIENT_SECRET_FILE = client_secret_file
API_SERVICE_NAME = api_name
API_VERSION = api_version
SCOPES = [scope for scope in scopes[0]]
print(SCOPES)

cred = None

pickle_file = f'token_API_SERVICE_NAME_API_VERSION.pickle'
# print(pickle_file)

if os.path.exists(pickle_file):
    with open(pickle_file, 'rb') as token:
        cred = pickle.load(token)

if not cred or not cred.valid:
    if cred and cred.expired and cred.refresh_token:
        cred.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)
        cred = flow.run_local_server()

    with open(pickle_file, 'wb') as token:
        pickle.dump(cred, token)

try:
    service = build(API_SERVICE_NAME, API_VERSION, credentials=cred)
    print(API_SERVICE_NAME, 'service created successfully')
    return service
except Exception as e:
    print('Unable to connect.')
    print(e)
    return None

def convert_to_RFC_datetime(year=1900, month=1, day=1, hour=0, minute=0):
dt = datetime.datetime(year, month, day, hour, minute, 0).isoformat() + 'Z'
return dt

-然后是我在 Google Cloud Platform 上创建的名为“client_secret_194676583237-td2pjjvuhtad5dfg1fn65r9g0jin1mmm.apps.googleusercontent.com.json”的 JSON 文件(我创建了项目、OAuth 2.0 客户端 ID 并添加了 Api)。

所以我的第一个问题是:我如何让这段代码工作?我缺少什么?(在教程视频中,它只使用这段代码,但我无法让它运行) 第二个问题我是否应该尝试使用 php 来运行 API?还是更好的 Python?

注意:我已经在 youtube 上验证了频道,我使用的是 Sublime text 3 和 Xampp。

【问题讨论】:

如果你在让别人的代码工作时遇到困难——尤其是如果你不认为代码有问题,而是你必须做一些外部的事情来“让它运行”——那么您需要询问该代码的作者(或阅读相关文档等),而不是在这里询问。 Stack Overflow 不是技术支持,也不是论坛。请阅读How to Ask 了解主题内容。 欢迎加入堆栈,请记住在发布问题时说明您的问题。究竟是什么不适用于您的代码。遵循官方示例 Python quickstart 可能会有所帮助,但它是已安装的应用程序而不是 Web 应用程序。 【参考方案1】:

您尚未说明您的代码存在什么问题。所以我会解决我看到你会遇到的问题。

已安装的应用程序与网络应用程序

我想将 Youtube api 添加到我的项目中以从我的网站加载视频

您将遇到的第一个问题是您正在使用

InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)

这仅适用于已安装的应用程序,因此 Web 浏览器同意窗口将在运行代码的机器上打开。如果您尝试将其放在网络服务器上,它会尝试在服务器上打开同意屏幕。

Oauth2 您将上传到谁的帐户。

您将遇到的第二个问题是,运行您的代码的任何人都将连接到他们自己的 YouTube 频道,而不是您的频道。如果您希望他们与您的连接,那么您将不得不存储一个刷新令牌供他们使用上传。这有点棘手。

配额

将视频上传到 YouTube api 受您的配额限制。您使用 YouTube api 的默认配额是 10000,这将允许您每天上传大约六个视频。如果您想上传更多,则需要申请更多配额。

公共视频与私人视频

在应用程序通过验证流程之前,使用 YouTube api 上传的所有视频都将是私有的。我建议您现在就查看验证流程,而不是等到您的申请完成。

【讨论】:

我知道我应该问谁制作了代码,但因为我问的是一个旧视频,但直到现在我才收到答案,所以我在这里问,无论如何你给我有用的信息谢谢。 我认为我给你的信息是一个好的开始,特别是如果你一开始不是程序员的话。如果你真的想把它放在网络上,那么你需要一个支持网络的样本,以及你现在使用的东西。如果您希望其他人上传到您的 YouTube 频道,无论发生什么情况,您都必须对其进行监控,因为如果您必须使用刷新令牌进行访问,它就不会完美。但它是可行的,我在几年前使用 PHP 为客户做了这个。

以上是关于如何运行 Youtube Api 视频:插入 (python)的主要内容,如果未能解决你的问题,请参考以下文章

在搜索Youtube api后,如何获取Youtube视频[关闭]

为什么Youtube API不显示视频ID的结果?

YouTube Data v3 API - 如何从频道请求所有视频?

如何在 WordPress 插件页面中插入 youtube 视频?

如何使用 youtube 的 API 下载 youtube 视频?

在拖动山墙视图中如何插入 youtube 等视频