【发布时间】:2020-08-21 06:02:06
【问题描述】:
我最近使用 Youtube api v3 制作了一个 Python 程序,在给定播放列表 ID 的情况下,它会从播放列表中的每个视频中获取某些信息。但是,通过这段代码和this post on Google 的输出,很明显,关于被私有或删除的视频的信息无法通过 Youtube api 获得。
我是否可以使用其他程序或资源从这些不可用的视频中提取信息,尤其是它们的视频 ID?
我现在能想到的唯一解决方案是访问显示 Youtube 的 HTML 并在其中搜索某些字符串(如“[deleted video]”),然后提取与该字符串对应的 id。但是,我从来没有处理过 HTML,如果我正确理解 HTML,我必须为播放列表中的每 50 个视频加载一个新页面,对于包含数千个视频的播放列表来说,这变得相当低效和费力。
我希望使用 PyTube 之类的东西,但它也无法处理不可用的视频。
编辑
这是提取视频ID的代码:
from googleapiclient.discovery import build
api_key = "AI~~~" #get from yt (private key)
yt = build("youtube", "v3", developerKey = api_key)
plst_id = "PLorw3mfu-J0ipF4Ss0XgR8IxcwP-JzNKC" #unique yt playlist id
plst_req = yt.playlistItems().list( #request for info from yt api
part = "contentDetails",
playlistId = plst_id,
maxResults = 50
)
plst = plst_req.execute()
vid_ids = [] #available video ids taken from current playlist
for vid in plst['items']:
vid_ids.append(vid['contentDetails']['videoId'])
print(vid_ids)
print(plst['pageInfo']['totalResults'])
打印的第一行包含播放列表中每个可用视频的视频 ID。打印的第二行给出了播放列表中的视频数量,包括可用的和不可用的。
上面代码中使用的播放列表是here。它总共包含 10 个视频,其中一个不可用。
在这种情况下,输出是(使用有效的 api 密钥)
['bv_cEeDlop0', 'mRKTOZmX2cE', '5ACvKdx1nns', 'wSNhP8b_Avo', 's56cHgokPlE', 'E4IHMWnQiMw', 'sCDkPShADSc', 'EVwgeUVVDYU', 'Z8Mqw0b9ADs']
10
Youtube 仍然将不可用的视频视为播放列表的一个元素,但不会给出它的视频 ID。本例中,不可用视频的视频id为“t83zUmjr05I”,手动查找不难:复制已删除视频的链接地址,提取“v=”后面的部分。
但是,在更大的范围内,手动提取变得乏味。
【问题讨论】:
-
您能否在您正在检查的播放列表和您正在使用的代码中添加已删除视频的示例? - 这个信息应该在你的问题中 - 如果 YouTube API 或其网站都无法提供该信息,我怀疑是否有办法获取此类视频的信息 - 除非你以某种方式访问任何数据库在被删除或设为私有之前保存了这些视频的信息。我没试过,但是,如果存在这样的网站,请在互联网上搜索(我的意思是,管理 YouTube 视频数据库的网站)。
-
添加了有关我使用的代码的更多信息