【问题标题】:Use the YouTube API to check if a video is embeddable使用 YouTube API 检查视频是否可嵌入
【发布时间】:2020-07-11 02:12:00
【问题描述】:

我试图确定 YouTube 视频是否可以使用 YouTube 数据 API v3 嵌入,从对类似问题的回答中我注意到视频的 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 嵌入视频时,还有更详细的错误消息:

视频不可用 该视频包含来自国际奥委会的内容,该委员会已阻止其在本网站或应用程序上显示。 在 YouTube 上观看

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

【问题讨论】:

    标签: javascript youtube youtube-api youtube-data-api


    【解决方案1】:

    this answer中使用了其他选项:

    在这里,您可以使用以下网址:

    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"
                    },
    

    除了johnh10's answer,在 YouTube 网页中看到的某些结果并不总是在 API 中显示/可用。

    【讨论】:

    • 有趣,感谢您提供指向此未记录端点的指针,不幸的是,当我尝试获取请求时,响应不是像您显示的提取那样的 JSON,而是奇怪的字符编码,知道为什么会发生这种情况?
    • @JoGr 我相信这是因为响应是文本文件。不幸的是,我不知道如何通过 javascript 处理这个响应,但是,它必须是 Stack Overflow 上关于它的答案。祝你好运:)
    • 好吧,我将其标记为解决方案,因为它确实提供了一种检查可嵌入状态的方法,尽管它没有记录并且有点棘手
    • 遗憾的是,由于 CORS 政策,fetch() 无法在 javascript 中访问它:(
    • 你能帮我看看如何运行这个 API URL 吗?我试过邮递员,但得到 404。
    【解决方案2】:

    我有答案。从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 而不是空格和大括号)。

    祝你好运!

    【讨论】:

      【解决方案3】:

      不幸的是,这种“版权检查”直接来自播放器。此数据无法通过 API 获得。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-28
        • 2012-11-07
        • 2012-01-27
        • 2015-12-02
        • 2015-10-08
        • 2022-10-06
        • 1970-01-01
        • 2012-04-19
        相关资源
        最近更新 更多