【发布时间】:2018-09-30 16:58:29
【问题描述】:
我目前正在开展一个项目,从 YouTube 视频的音频中检索 mp3 文件。
我从 youtube 链接的一些基本解析开始我的项目,并想出了一个正则表达式来提取 id。
private static string GetYoutubeID(string url)
{
var match = youtubeRegex.Match(url);
if(match.Success)
{
return match.Groups[0].Value ?? throw new ArgumentException("url");
}
else
{
throw new ArgumentException(url);
}
}
然后我在这样的请求中使用 id:
public static string GetResponse(string id)
{
using (WebClient client = new WebClient())
{
return client.DownloadString($"http://youtube.com/get_video_info?video_id={id}");
}
}
所以现在这个调用返回一个带有“status”和“errorcode”标签的字符串。还有一个名为“url_encoded_fmt_stream_map”的特定标签。在其中我可以找到下载各种质量视频的网址。
例如:
https%3A%2F%2Fr2---sn-h0jeened.googlevideo.com%2Fvideoplayback...
但我的查询似乎失败了,结果给我一个空的“url_encoded_fmt_stream_map”标签,其中包含“status=fail”和“errorcode=150”,即“视频不可用”。
据我了解,帮助下载 youtube 视频的库有一些类似的问题。
所以我的问题是,我的方法可靠吗?如果是这样,我做错了什么?
如果它不可靠,我怎样才能可靠地检索到视频流的链接?
【问题讨论】:
-
你尝试了什么
id?您是否尝试在浏览器中手动执行http://youtube.com/get_video_info?video_id={id}?如果是这样,您是否获得了信息文件并打开它以检查url_encoded_fmt_stream_map标记? -
@pookie 我尝试了视频 ID。 youtube.com/watch?v=y6120QOlsfU -> y6120QOlsfU。我得到的所有结果都在返回字符串中。如果您在浏览器中打开链接,出于某种原因,它会让我下载一个无扩展名的文件。但答案是一样的。