YouTube IFrame Player API getVideoData 已删除:如何获取标题?

Posted

技术标签:

【中文标题】YouTube IFrame Player API getVideoData 已删除:如何获取标题?【英文标题】:YouTube IFrame Player API getVideoData is removed: how to get title? 【发布时间】:2018-04-27 04:33:58 【问题描述】:

11 月 13 日,我接到一位客户的电话,报告说 YouTube 播放器不再工作。快速浏览了一下开发工具,发现有错误:

Uncaught TypeError: a.getVideoData is not a function

查看播放器对象所包含的内容,我了解到 getVideoData 不再存在函数。

getVideoData 函数提供了一种获取视频标题的方法。现在,我怎样才能获得标题?

Google 是否有任何关于此更改的文章?

【问题讨论】:

只是为了确保您使用的是 iFrame Player API,而不是 Flash API 和 javascript API? 为什么这个方法被删除了? Youtube 通过删除此方法破坏了许多集成,并且在他们的文档中没有涵盖或标记为弃用。 任何人都可以链接到他们的文档以显示此功能存在的位置吗?我查看了他们的reference page(并检查了它的以前版本),根本找不到那里列出的getVideoData() 函数。这可能是从未官方支持的功能吗?无论如何,我同意你的看法,如果提前知道它正在被删除,那就太好了。我整天都在修复这个 API 的实时实现。 @funrob 我希望我能得到关于同一个问题的遮阳篷。 @GreatBlakes 这个函数从来都不是文档,我想我为什么要删除它。我认为人们从来没有打算使用它,以获取与 googleapis.com 可以提供的相同数据,videodata 功能现在可以免费使用,如果您有一个高流量网站,他们可以让您为使用 api 付费- 这是我基于理论的 【参考方案1】:

要获取视频的标题,可以查询YouTube Data API v3:

GET https://www.googleapis.com/youtube/v3/videos
    ?part=snippet
    &id=VIDEO_ID
    &key=YOUR_API_KEY

为此,您需要在Google Cloud Console 上注册并创建一个 API 密钥(它是免费的)。您可以将 API 密钥限制为仅在您的网站上使用,这样您就可以安全地在您的 JS 源代码/html 代码中公开它,而其他人无法代表您进行查询。确保也在控制台中启用 YouTube Data API v3,否则您的查询将返回错误。

上述查询将返回您感兴趣的视频信息的 JSON 表示形式(snippet 部分)。假设您将 JSON 解析为一个名为 result 的对象。然后你可以通过

获取视频标题
result.items[0].snippet.title

【讨论】:

从 Youtube Iframe API 中删除 getVideoData() 后,无法检索视频 ID 来执行此查找。 @GreatBlakes 我同意我遇到了同样的问题,幸运的是客户插入了视频,所以可以在自定义数据-att 中获得它 好吧,我认为可以假设知道视频 ID,因为您已经插入了需要 ID 的播放器。 幸运的是,在我的情况下,我首先使用 Data API 填充 iframe,因此我可以将 ID 和标题作为 HTML 属性传递,但这对于很多人来说不是一个选项 - 我希望 Google 提供比要求额外出站请求更好的方法。 @paolo 我的想法是用户当前可能没有查看原始视频 ID(可能通过相关视频或播放列表导航),因此可能会假定第一个 ID,但用户可能不会实际上不再看那个视频了。在更多“外部”场景中,用户(或脚本)可以即时更改 iframe src。我想解决这个问题的唯一方法是使用 API 中的 getVideoUrl() 解析 v 查询参数的 URL。【参考方案2】:

getVideoData() 似乎又回来了(2017 年 12 月)。所以,再试一次!

【讨论】:

是的,我知道它已经回归一段时间了,如果 youtube 将来要删除它,并且它不是文档中的文档,那么我将不再指望这个功能,我已经标记了我现在使用的解决方案,并且在未来,我认为人们应该考虑使用, @user3173634 你会发布你的解决方案作为答案吗?在 jQuer Ajax 的帮助下,我有相同的 php 代码。但是,您可以发布您的解决方案。 这个函数仍然存在,并且仍然——据我所知——没有记录。这非常令人困惑。 20201 年 10 月功能还在,无证,谁知道什么时候会被移除【参考方案3】:

从今天(2020 年 10 月 1 日)开始,我正在从 YouTube 的 API 对象中检索视频的标题:

// Assigning YouTube's ID to your ID variable
const playerID = "xxxxxxx";

// Creating an object for the video using YouTube's API.
const yPlayer = new YT.Player(playerID, 
    events: 
        'onReady': onPlayerReady(),
        'onStateChange': onPlayerStateChange()
    
);

function onPlayerReady() 


function onPlayerStateChange() 
    // Title retrieved here
    let videoTitle = yPlayer.j.videoData.title;


onYouTubeIframeAPIReady();

【讨论】:

以上是关于YouTube IFrame Player API getVideoData 已删除:如何获取标题?的主要内容,如果未能解决你的问题,请参考以下文章

使用 YouTube iframe API 触发简单事件/使用 player.getCurrentTime 同步事件

有没有办法将referer设置为youtube-iframe-api?

如何启动和停止使用youtube iframe API创建的YouTube视频?

如何在 localhost html 文件中使用 YouTube IFRAME-Player?

在 iPad 上执行 playVideo() 命令后,YouTube iFrame API 处于缓冲状态

如何在现有iframe上使用YouTube API?