如何通过YouTube视频链接获取标题?能否用指定代码实现?
嘿,我来帮你搞定这两个关于YouTube视频标题获取的问题:
问题一:已知YouTube视频链接,如何获取视频标题?
有几种靠谱的方式,我给你列两个最常用的:
1. 使用官方YouTube Data API v3(推荐)
这是最稳定、功能最全的方法,步骤如下:
- 先去Google Cloud控制台创建一个项目,启用YouTube Data API v3,然后生成一个API密钥
- 从你的YouTube链接里提取视频ID:比如链接是
https://www.youtube.com/watch?v=abc123,那视频ID就是abc123 - 调用API的
videos.list接口,请求参数设置:part=snippet(我们需要获取包含标题的snippet部分)id=你的视频IDkey=你的API密钥
- 接口返回的JSON里,
items[0].snippet.title就是视频的标题
2. 使用YouTube oEmbed接口
YouTube支持oEmbed协议,你可以直接请求对应的接口获取元数据,但要注意跨域问题(前端直接请求可能会被浏览器拦截,除非服务器允许CORS)。请求格式大概是:
https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=你的视频ID&format=json
返回的JSON里title字段就是视频标题。如果前端要直接用,要么确认该接口支持CORS,要么通过自己的后端代理转发请求。
问题二:你提供的代码能否获取YouTube视频标题?
先把你贴的代码完整整理出来(补全了截断的部分):
function setYouTubeTitle(id) { $.ajax({ url: window.location.protocol + '//query.yahooapis.com/v1/public/yql', data: { q: "select * from json where url ='http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=" + id + "&format=json'", format: "json" }, dataType: "jsonp", success: function (data) { if (data && data.query && data.query.results && data.query.results.json) { // 这里应该是把data.query.results.json.title赋值到页面元素里 // 比如 $('#title').text(data.query.results.json.title); } } }) }
很遗憾地说,这段代码现在完全用不了了——因为Yahoo的YQL服务早在2019年就正式关闭了,你请求query.yahooapis.com这个域名会直接失败。
不过思路是对的:通过oEmbed获取视频元数据,再用JSONP绕开跨域限制。但现在YQL没了,你可以换成下面两种方案:
- 改用前面说的YouTube Data API v3,这是长期可用的方案
- 如果想继续用oEmbed,要么自己搭一个后端代理来转发请求(避免跨域),要么检查YouTube oEmbed接口是否支持CORS,直接用jQuery的ajax请求(注意要去掉JSONP,用普通的ajax,如果CORS允许的话)
内容的提问来源于stack exchange,提问作者Bsde
相关产品推荐
相关产品推荐

