在不使用搜索查询的情况下从所选频道获取 *所有* Youtube 视频 ID

Get *all* Youtube video ids from a chosen channel without using search query

从给定频道获取所有视频信息的最便宜的方法似乎是使用从频道的“contentDetails”中找到的“上传”,如前所述here。但是这个returns只有最近的20000条视频信息。 (在 Python)

CNN_ID = "UCupvZG-5ko_eiXAupbDfxWw" # CNN channel ID
search_kwargs = {
    "part": "contentDetails",
    "id": CNN_ID,
}
results = youtube.channels().list(**search_kwargs).execute()
playlist_id = results["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"]

search_kwargs = {
    "part": "snippet",
    "playlistId": CNN_ID,
}
results = youtube.playlistItems().list(**search_kwargs).execute()
n_total = results["pageInfo"]["totalResults"] # 20000

其中一个播放列表中似乎包含所有视频(例如 CNN), I could get their information using Playlists, 例如

search_kwargs = {
    "part": "snippet",
    "channelId": CNN_ID,
}
results = []
while True:
    results.extend(youtube.playlists().list(**search_kwargs).execute()["items"])
    if "nextPageToken" not in results[-1]:
        break
    search_kwargs["pageToken"] = results[-1]["nextPageToken"]
pids = [item["id"] for item in results]
n_total = 0
for pid in pids:
    search_kwargs = {
        "part": "snippet",
        "playlistId": pid,
    }

    results = youtube.playlistItems().list(**search_kwargs).execute()
    n_total += results["pageInfo"]["totalResults"]
# n_total == 42579

并且这些视频包括较早的视频。但是我仍然无法获取未包含在任何播放列表中的旧视频的信息。有没有办法不用 Search 就能得到它们?

嗯,最好的方法(至少在我看来)是使用 Selenium 从 Youtube 收集视频 ID。人们必须找到感兴趣的频道的视频部分,并在向下滚动时收集视频。