Javascript - 如何以编程方式获取 Youtube 视频的网址? (自我回答)
Posted
技术标签:
【中文标题】Javascript - 如何以编程方式获取 Youtube 视频的网址? (自我回答)【英文标题】:Javascript - How to get the url for Youtube videos programmatically? (self-answer) 【发布时间】:2016-10-13 07:01:42 【问题描述】:一个非常常见的问题是“如何获取 Youtube 视频的网址?”。大多数答案涉及对视频页面的 html 进行一些抓取和正则表达式,或者求助于“使用这个 3rd 方工具或网站”。
在任何 Youtube 视频页面上的任何浏览器中的开发工具控制台中都非常容易做到这一点。
请看下面的答案。
【问题讨论】:
自我回答的有趣概念 - 不知道可以发布问题并立即回答以跟踪知识... @MichalStefanow 是的,有一些关于它的文档。 blog.***.com/2011/07/… @MichalStefanow,我知道吗?必须将该链接加入书签,以防有一天我需要提取“官方”证据(如果这样的答案会导致问题)...... 【参考方案1】:例子在这里:
https://gist.github.com/geuis/8b1b2ea57d7f9a9ae22f80d4fbf5b97f
// Run from the dev tools console of any Youtube video
// Accurate as of June 12, 2016
var videoUrls = ;
ytplayer.config.args.url_encoded_fmt_stream_map.split(',').forEach(function (item)
var obj = ;
item.split('&').forEach(function (param)
param = param.split('=');
obj[param[0]] = decodeURIComponent(param[1]);
);
videoUrls[obj.quality] = obj;
);
console.log(videoUrls);
https://www.youtube.com/watch?v=9bZkp7q19f0 的示例输出
"hd720":
"url": "https://r3---sn-n4v7sn76.googlevideo.com/videoplayback?ms=au&mv=m&mt=146577…zA3KgkxMjcuMC4wLjE&ip=108.233.85.171&key=yt6&requiressl=yes&itag=22&cnr=14",
"quality": "hd720",
"s": "1BEF82C7D9487809555E4B5124CA244FD93857C62.7869EB3FE7E8BE955B85E19F769DD80C49F3A87CB",
"itag": "22",
"type": "video/mp4;+codecs=\"avc1.64001F,+mp4a.40.2\""
,
"medium":
"url": "https://r3---sn-n4v7sn76.googlevideo.com/videoplayback?ms=au&mv=m&mt=146577…AxLnNqYzA3KgkxMjcuMC4wLjE&ip=108.233.85.171&key=yt6&requiressl=yes&itag=18",
"quality": "medium",
"s": "35ADDCF2F151540B9AE72455ED9CD079B3A166669.F168091B130653FCACA72506C01625B74E46C1A7D",
"itag": "18",
"type": "video/mp4;+codecs=\"avc1.42001E,+mp4a.40.2\""
,
"small":
"url": "https://r3---sn-n4v7sn76.googlevideo.com/videoplayback?ms=au&mv=m&mt=146577…AxLnNqYzA3KgkxMjcuMC4wLjE&ip=108.233.85.171&key=yt6&requiressl=yes&itag=17",
"quality": "small",
"s": "0C397549D581241F0F39D3EB8BF6E9B9067F65AFD.76B46A360178C4B001E96166C46AEAE5CF0D6A35F",
"itag": "17",
"type": "video/3gpp;+codecs=\"mp4v.20.3,+mp4a.40.2\""
【讨论】:
任意语言应该如何访问浏览器的开发工具?想象一下,我需要使用 C++ \ C# \ Java \ Swift \ Python \ php 等制作的应用程序的 Youtube URL。console.log
变得无关紧要,这就是为什么需要正则表达式/抓取 HTML 页面或涉及一些解析工具的原因。
@VC.One 您的问题是有效的,但不在本文的讨论范围内。这就是我设置“javascript”语言标签的原因。我已经返回并添加了开发工具标签以使其更清晰。
@VC.One 您需要使用 YouTube Data API 而不是 get_video_info
端点,因为它不发送 CORS 响应(Access-Control-Allow-Origin
标头)。
@VC.One 你现在知道youtube.com/get_video_info?video_id=xxxx返回的文件的编码是什么吗?以上是关于Javascript - 如何以编程方式获取 Youtube 视频的网址? (自我回答)的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式禁用 chrome 开发人员工具中的 javascript?
以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?