如何在python中当youtube频道上传视频时获得通知

问题描述 投票:0回答:3

我正在尝试创建一个脚本,每当 YouTube 频道上传视频时都会通知我。就像订阅按钮一样

我尝试过的:
我尝试寻找与此相关的文档,并且在此过程中还学习了如何在 Google Cloud 中设置 YouTube V3 API。我发现的最接近的库是 python-youtubeyoutube-channel-subscribe

到目前为止我的进展:
我尝试过 youtube-channel-subscribe 但问题是它会打开浏览器然后订阅,而这将不起作用,因为我将在服务器上运行它。我已经浏览了 python-youtube 文档,我认为它没有这方面的功能(我可能是错的)

如有任何帮助,我们将不胜感激。

python python-3.x youtube youtube-api
3个回答
10
投票

这可以通过简单地使用 2 个内置 python 库来完成:

requests
re
。基本上,我们想要监控 YouTube 频道的最新视频。

我们可以通过这几行代码获取任意 YouTube 频道的最新视频的标题、上传日期和观看次数:

import requests
import re

channel = "https://www.youtube.com/user/PewDiePie"

html = requests.get(channel + "/videos").text
info = re.search('(?<={"label":").*?(?="})', html).group()
date = re.search('\d+ \w+ ago.*seconds ', info).group()

print(info)
print(date)

输出:

Reacting To Strangers Secrets by PewDiePie 4 hours ago 11 minutes, 54 seconds 584,062 views
4 hours ago 11 minutes, 54 seconds 

您可以将视频的信息(将相对日期转换为绝对日期)存储在数据库中,每当

info
带有数据库中不存在的标题,或者
date
带有减去形式的时间时当前日期晚于数据库中的最后日期,则已上传新视频。


更新

YouTube 视频的日期格式已更改,因此上述日期的正则表达式不再有效。然而,

info
仍然包含它。

这是还获取最新视频网址的版本:

import requests
import re

channel = "https://www.youtube.com/user/PewDiePie"

html = requests.get(channel + "/videos").text
info = re.search('(?<={"label":").*?(?="})', html).group()
url = "https://www.youtube.com/watch?v=" + re.search('(?<="videoId":").*?(?=")', html).group()

print(info)
print(url)

输出:

Lot of big changes lately.. by PewDiePie 6 hours ago 22 minutes 723,960 views
https://www.youtube.com/watch?v=psHriqExm6U

2
投票

就这么简单,

  1. 找到您要监控的页面。 enter image description here
  1. 获取它的 URL 并使用 Python Library Beautiful Soup 抓取它。 https://pypi.org/project/beautifulsoup4/

  2. 列出项目

  3. 为该文件的第一个版本创建一个 Json 文件(您可以使这变得非常简单,只需采用最新视频的名称)。

  4. 无论您喜欢什么时间间隔,再次调用Python scraper进行比较

  5. 当 JSON 文件不同时,(如果最新的名称与原始文件的名称不同,则执行 x)对 Zapier 进行 API 调用 https://zapier.com/

  6. 让 Zapier 通过 API 调用向您发送变更短信。

上面的代码可以直接在文档中找到。如果您想要一种更完整的抓取方法,可以绕过客户端网站的任何类型的阻止,我会使用代理链接仅供参考。


-1
投票

我的 Discord 机器人也需要该功能,但我找不到利用 YouTube Data API v3 提供的 PubSubHubbub 的 Python 包,这很遗憾。

使用此协议的好处是它非常高效,因为它不需要不断轮询 API,并且您不需要 Google Cloud 的 API 密钥(对于使用 YouTube 数据 API 有配额限制

因此,我为我自己和其他可能也需要它的人创建了一个新的 python 包

pip install ytnoti

这是如何使用该包的基本示例:

from ytnoti import YouTubeNotifier, Notification

notifier = YouTubeNotifier()

@notifier.upload()
async def listener(notification: Notification):
    print(f"New video from {notification.channel.name}: {notification.video.title}")

notifier.subscribe("UC9EEyg7QBL-stRX-7hTV3ng")  # YouTube Channel ID(s)
notifier.run()
© www.soinside.com 2019 - 2024. All rights reserved.