使用 YouTube API 检查视频是否可嵌入

Use the YouTube API to check if a video is embeddable

我正在尝试使用 YouTube 数据 API v3 确定 YouTube 视频是否可嵌入,从类似问题的答案中我注意到 status.embeddable 属性 视频,对于这样的请求:

https://www.googleapis.com/youtube/v3/videos?id=63flkf3S1bE&part=contentDetails,status&key={MY_API_KEY}

响应如下

{
    "kind": "youtube#videoListResponse",
    "etag": "\"ksCrgYQhtFrXgbHAhi9Fo5t0C2I/ctZQYtBcOuMdnQXh8-Fv1EbS_VA\"",
    "pageInfo": {
        "totalResults": 1,
        "resultsPerPage": 1
    },
    "items": [
        {
            "kind": "youtube#video",
            "etag": "\"ksCrgYQhtFrXgbHAhi9Fo5t0C2I/Cd8aGZD09NPuGYNumIEozZs2S90\"",
            "id": "63flkf3S1bE",
            "contentDetails": {
                "duration": "PT8M23S",
                "dimension": "2d",
                "definition": "hd",
                "caption": "false",
                "licensedContent": false,
                "projection": "rectangular"
            },
            "status": {
                "uploadStatus": "processed",
                "privacyStatus": "public",
                "license": "youtube",
                "embeddable": true,
                "publicStatsViewable": true,
                "madeForKids": false
            }
        }
    ]
}

status 下的 embeddable 参数返回为 true,但是该视频实际上不可嵌入,可见 here.

实际使用 iframe 嵌入视频时 API,还有更详细的错误消息:

Video unavailable This video contains content from International Olympic Committee, who has blocked it from display on this website or application. Watch on YouTube

我看不出如何从 YouTube 数据中检测到这种情况API - 谁能帮忙吗?

不幸的是,这 'copyright check' 直接发生在玩家身上。此数据无法通过 API.

获得

this answer中使用了其他选项:

这里,可以使用下面的URL:

https://www.youtube.com/get_video_info?video_id=<VIDEO_ID>

其中 VIDEO_ID 是您要检索信息的 YouTube video_id

在这种情况下,收到响应后,您会看到一个名为 "playabilityStatus.status" 的 属性。

以下是回复的摘录:

 "playabilityStatus": {
        "status": "UNPLAYABLE",
        "reason": "The video is not available",
        "errorScreen": {
            "playerErrorMessageRenderer": {
                "reason": {
                    "simpleText": "The video is not available"
                },

除了 ,在 YouTube 网页中看到的一些结果在 API 中并不总是 shown/available。

我有答案。从 https://www.youtube.com/get_video_info?video_id= 输出的文件 只不过是 URLENCODED.

的标准文本文件

要正确查看它,您首先必须使用 URLDECODER 对其进行解码,然后您必须将 json 部分与 URL 查询字符串部分分开。要查看 JSON 部分,您可以使用 json 格式化并查看 URL 部分,您可以使用 PrettyPrint URL.

执行此操作后,您会注意到您正在寻找的用于验证视频是否可播放的标签是此处其他用户提到的标签。它位于名为 "player_response" 的 URL 参数上,在您对文件进行解码后,您会很容易找到它。此参数包含一个较长的 JSON 文件,可播放状态低于 playabilityStatus.Status。

要在 Javascript 上操作它,只需将文件的这一部分解析为 JSON 文件并访问您选择的节点,或者将其解析为文本并搜索必须的 playabilityStatus 节点如果您不想对其进行解码,则不对其进行编码(不用担心,只有一些 %2D 和 %7B 而不是空格和大括号)。

祝你好运!