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?