如何排除已归档的直播,但保留出现在 /videos页面中的首映?

前端开发 2026-07-10

我在尝试匹配一个频道的公开Videos标签页。我希望排除归档的直播,并保留出现在 /videos的首播视频。

这两个公开视频重现了这个问题:

  • IcZxVrRrzcM
  • 6-qDqVXDZbY

最小可复现示例(MRE):

import requests

YT_API_KEY: str = ""
VIDEO_URL = "https://www.googleapis.com/youtube/v3/videos"

for video_id in ["IcZxVrRrzcM", "6-qDqVXDZbY"]:
    resp = requests.get(
        VIDEO_URL,
        params={
            "part": "snippet,liveStreamingDetails",
            "id": video_id,
            "key": YT_API_KEY,
        },
        timeout=30,
    ).json()

    video = resp["items"][0]
    print(
        video_id,
        video["snippet"].get("liveBroadcastContent"),
        "liveStreamingDetails" in video,
    )

我从两者得到相同的答案:

IcZxVrRrzcM none True
6-qDqVXDZbY none True

但如果你查看 https://www.youtube.com/@LiquidZulu/videos

  • IcZxVrRrzcM => 出现在 /videos标签页中的首播视频。
  • 6-qDqVXDZbY => 不出现在 /videos标签页中的直播。

我本来期望有一个明确的API信号来回答“这个是否属于Videos标签页?”,但liveBroadcastContent和 liveStreamingDetails似乎无法将归档的直播与首播区分开来。

是否有官方的YouTube Data API字段用于此,还是说用YouTube Data API实现对Videos标签页 的匹配是不可能的?

解决方案

是否有官方的YouTube Data API字段用于此,还是说用YouTube Data API实现对Videos标签页 的匹配是不可能的?

不行。YouTube前端并不是基于公开的YouTube API。前端以某种方式将上传标记为“streams”或“video”或“shorts”等等。这些标签不在公开API中。另一个例子是直接的视频文件链接。前端知道它们用于实际播放,但API在返回的响应中并未揭示它们。

目前,对于“我在尝试匹配一个频道的公开Videos标签页”的最佳解决方案是直接检查该信息的页面源。打开“Videos”标签页(也许还包括它的一些子选项,如“latest”、“popular”、“members”等)并通过浏览器手动保存该页面。

你也可以通过代码尝试:

import urllib.request as urlreq

#video_id = "IcZxVrRrzcM"
#video_id = "6-qDqVXDZbY"

print("Paste your video ID:")
video_id = input()

url = 'https://www.youtube.com/@LiquidZulu/videos'

req = urlreq.Request(url)
client = urlreq.urlopen(req)
txt_html = (client.read(1499999).decode('utf-8'))

try:
  result = txt_html.index(video_id)
  print( 'VideoID:', video_id , 'is from tab "videos"' )
except:
  print( 'VideoID:', video_id , 'was NOT FOUND in "videos"' )
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章