前几天发了一篇QQ音乐直链的帖子:http://www.52pojie.cn/thread-419942-1-1.html
今晚利用空闲时间,折腾了一个百度音乐直链分析工具,也是网页在线的,
大家可以先看一下:http://dwz.cn/1WQoqW
---------------------------------------------蛋疼的分割线---------------------------------------------
论坛里面有人提供音乐接口:
①:http://music.baidu.com/data/music/fmlink?songIds={$SongId}&type={$SongType}
②:http://music.baidu.com/data/music/fmlink?songIds={$SongId}&type={$SongType}&rate={$Rate}
我测试了一下,可行,只不过现在修改了,跳转结果是
http://music.baidu.com/data/music/links?songIds=歌曲ID
至于上面的type和rate可忽略了。
百度音乐的ID就是点击一首歌曲的网址,不是播放音乐的音乐盒网址,例如:
http://music.baidu.com/song/134294423
QQ截图20151009224317.jpg (52.74 KB, 下载次数: 8)
2015-10-9 22:40 上传
复制上面网址中的那串数字,我随便看了一下,音乐ID从6位数到10位数都有,这个等下再说。
拼接网址和ID,结果如下:
http://music.baidu.com/data/music/links?songIds=134294423
直接粘贴浏览器地址栏,回车访问,得到以下结果:
{"errorCode":22000,"data":{"xcode":"0fa193606a6cf0e18156ebcf093b7cc0","songList":[{"queryId":"134294423","songId":134294423,"songName":"\u82b1\u4e3a\u5a92","artistId":"5976","artistName":"\u7396\u6708\u5947\u8ff9","albumId":134294430,"albumName":"\u82b1\u4e3a\u5a92","songPicSmall":"http:\/\/c.hiphotos.baidu.com\/ting\/pic\/item\/50da81cb39dbb6fd04ad51040d24ab18972b3719.jpg","songPicBig":"http:\/\/b.hiphotos.baidu.com\/ting\/pic\/item\/dbb44aed2e738bd43fb60613a58b87d6277ff979.jpg","songPicRadio":"http:\/\/b.hiphotos.baidu.com\/ting\/pic\/item\/18d8bc3eb13533faa840270cacd3fd1f41345b19.jpg","lrcLink":"\/data2\/lrc\/134331079\/134331079.lrc","version":"","copyType":0,"time":208,"linkCode":22000,"songLink":"http:\/\/yinyueshiting.baidu.com\/data2\/music\/134294564\/1342944231444312861128.mp3?xcode=0fa193606a6cf0e123407a79428c3f0f","showLink":"http:\/\/yinyueshiting.baidu.com\/data2\/music\/134294564\/1342944231444312861128.mp3?xcode=0fa193606a6cf0e123407a79428c3f0f","format":"mp3","rate":128,"size":3342029,"relateStatus":"0","resourceType":"0","source":"web"}]}}
这个就是返回结果,JSON格式,仔细看一下,里面有songLink后面的网址就是MP3链接,songPicBig是音乐封面的图片链接,只不过多了一些斜杠等等。
有了上面的数据,就可以使用编程语言封装了,本人使用的ASP.NET做演示。
我知道论坛很多人都会易语言,可是我不会,没有系统的学过,这里仅供思路参考。
---------------------------------------------蛋疼的分割线---------------------------------------------
/***
思路:
1、读取音乐网址里面的音乐ID
2、拼接网址和ID并且访问
3、解析&输出结果
***/
这个界面我就不说了,从按钮事件开始
QQ截图20151009224855.jpg (10.06 KB, 下载次数: 7)
2015-10-9 22:47 上传
[C#] 纯文本查看 复制代码//获取音乐直链地址
protected void btnGo_Click(object sender, EventArgs e)
{
string mid = "";//定义存放音乐ID的变量
//这里使用正则表达式,匹配输入网址里面的音乐ID,也就是一串数字,使用\d+可以匹配连续的多个数字,符合我们的要求
ArrayList alist = new HttpHelper().PiPeiText(this.txtMusicUrl.Text.Trim(), "\\d+");
//判断是否有返回结果
if (alist.Count > 0)
{
mid = alist[0].ToString();//如果有,就读取结果
}
if (string.IsNullOrEmpty(mid))//如果没有结果,说明音乐网址不正确,返回错误信息
{
this.txtMp3Url.InnerText = "错误:请检查音乐网址是否正确,是否可以正常播放";
return;
}
string requestUrl = "http://music.baidu.com/data/music/links?songIds=" + mid;//拼接访问网址
//获得访问网址返回的JSON信息
string responseHTML = new HttpHelper().GetDocumentText(requestUrl);
//由于我电脑网络问题,打不开json网站,不能下载类库,就没有用Json解析了,
//如果你用解析的方法,可以获得更多信息:音乐封面图片(大和小),音乐时长,大小等。
//这里我使用了正则表达式匹配想要的信息
ArrayList mp3List = new HttpHelper().PiPeiText(responseHTML, "songLink\":\".*\",\"show");
string musicUrl = "";//定义MP3音乐直链的变量
if (mp3List.Count == 0)
{
/*这里验证是否匹配到了mp3链接,如果没有,那么可能是下面这种情况:
* 一开始音乐网址就不对,虽然有音乐ID,但是可能因为网址里面有一串数字而已,并不是要求的网址页面,
* 所以,一开始的匹配音乐ID,要做严格的网址验证,也是使用正则表达式,这块自己升级一下
* */
this.txtMp3Url.InnerText = "错误:请检查音乐网址是否正确,是否可以正常播放";
return;
}
else
{
//如果匹配到了mp3链接,就保存网址到上面定义的变量
musicUrl = mp3List[0].ToString();
}
//使用正则表达式匹配的结果,要过滤一下,如果使用json解析,就不用这么麻烦,直接取出来再replace一次就可以了
musicUrl = musicUrl.Replace("\"", "").Replace("songLink:", "").Replace(",show", "").Replace("\\", "");
//输出结果到网页上
this.txtMp3Url.InnerHtml = musicUrl;
}
.NET老鸟别嫌我注解写的太多,照顾新人吧。
如果你直接复制上面的代码到VS里面编译,会出错,因为缺少HttpHelper类,这个是我自己写的下面发出来
HttpHelper.txt
(4.91 KB, 下载次数: 6)
2015-10-9 23:09 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB
用的时候,修改txt为cs,复制到VS,修改命名空间即可。