以前我可以通过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
值。任何人都可以帮助我让网站开始转换,第一个网址我不知道是什么错误。感谢
答案 0 :(得分:1)
我刚试过它。对于第一个请求,您需要向其发送标题:
Accept-Location: *
否则,它将返回500(内部服务器错误)。但是使用该标题,它将返回youtube视频ID的字符串,您可以使用第2个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)调试标签中跟踪标题。
此致