如何排除已归档的直播,但保留出现在 /videos页面中的首映?
我在尝试匹配一个频道的公开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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。