以前我可以通过 youtube-mp3.org 将 YouTube 视频下载为 mp3,使用此方法:
http://www.youtube-mp3.org/api/pushItem/?item=http%3A//www.youtube.com/watch%3Fv%3D<VIDEOID>&xy=_
然后它返回视频 ID,他们开始在服务器上转换视频。然后,此请求将返回一个 JSON 字符串,其中包含有关视频和当前转换状态的信息:
http://www.youtube-mp3.org/api/itemInfo/?video_id=<VIDEOID>&adloc=
重复请求直到 status
的值为“正在服务”后,我通过从上一个 JSON 响应中获取键 h
的值来启动最后一个请求请求,这将下载 mp3 文件。
http://www.youtube-mp3.org/get?video_id=<VIDEOID>&h=<JSON string value for h>
现在第一个请求总是不返回任何内容。仅当请求的视频缓存在其服务器上(如流行音乐视频)时,第二个和第三个请求才会成功。如果情况并非如此,那么第二个请求将返回 nil,因此由于第二个请求中缺少 h
值,因此无法启动第三个请求。任何人都可以帮助我让网站开始转换吗?第一个 URL 需要有问题,我只是不知道是什么。谢谢
最佳答案
我刚刚测试过。对于第一个请求,您需要发送以下 header :
Accept-Location: *
否则,它将返回 500(内部服务器错误)。但是有了这个 header ,它将返回一个 YouTube 视频 id 的字符串,您可以使用第二个 api 来检查进度。
这是我用于测试的 C# 代码:
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create("FIRST_API_URL");
wr.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7";
wr.Headers.Add("Accept-Location", "*");
string res = (new StreamReader(wr.GetResponse().GetResponseStream())).ReadToEnd();
顺便说一句,您可以在浏览器的网络 (Chrome) 调试选项卡中跟踪 header 。
问候
关于ios - youtube-mp3.org api 无法正常工作,仅下载缓存的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8763141/