最近有人问怎么解析微云的音乐外链,于是我花了点时间看了一下。
音乐分享地址:http://share.weiyun.com/37b92875f407f6d595c6eab92792d41a
查看网页源码,源码里面没有音乐的下载地址,只有一个加密过的地址dl_encrypt_url。
用firebug调试了下,发现js的解密函数太麻烦,所以放弃另寻他法。
先用firefox的插件User Agent Switcher伪装成手机浏览器:
然后再访问页面,可以发现微云的手机版网页源码里有下载地址:
<a class="ui-btn-open" href="http://sync.box.qq.com/share_dl.fcg?sharekey=37b92875f407f6d595c6eab92792d41a&uin=1989052999&skey=&fid=0ef59818-982c-42e6-96ef-85460737055c&dir=&pdir=478a8e765ccd740aa7b6436361a4fccb&zn=%E5%A4%A9%E4%B9%8B%E7%97%95%E5%A6%82%E5%BF%86%E7%8E%89%E5%84%BF%E6%9B%B2.mp3&os_info=iphone&browser=webkit&ver=11">打 开</a>
于是匹配出这个地址并跳转,发现不成功。
复制这个地址在浏览器中打开,会发现网页返回403错误,禁止访问:
但是在微云网页里点击下载按钮后,会打开这个地址下载音乐。
根据上面的信息可以推断出,服务器判断了下载地址的来路referer。
于是用curl伪造来路访问下载地址,就不会出现403错误了。
但是curl不能跳转,而音乐外链需要跳转才能实现。
用firebug监控网页请求,发现打开下载地址后,会跳转到真实的音乐地址:
那么可以从下载地址的响应头信息里匹配出Location的地址。
把下面的代码保存为weiyun.php文件,放在网站根目录:
<?php //最后更新时间:2013-12-12 //构造微云分享地址 preg_match('|\/.+\/(\w+)\.|', $_SERVER['REQUEST_URI'], $res); $key = $res ? $res[1] : exit("Url format error!"); $url = $referer = "http://share.weiyun.com/$key"; //获取源码,匹配出下载地址 $src = curl_get_contents($url, ""); preg_match('|shareInfo = (.*);|Ui', $src, $res); $json = $res ? json_decode($res[1]) : exit("Can not get shareInfo!"); //拼接歌曲链接 $songurl = implode("", array( "http://".$json->dl_svr_host, ":".$json->dl_svr_port, "/ftn_handler", "/".$json->dl_encrypt_url, "?fname=".urlencode($json->filename), )); header("Location: $songurl"); //用curl获取网页源码 function curl_get_contents($url, $referer) { $curl = curl_init($url); curl_setopt($curl, CURLOPT_HEADER, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_REFERER, $referer); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us)"); curl_setopt($curl, CURLOPT_TIMEOUT, 10); $src = curl_exec($curl); curl_close($curl); return $src; } ?>
如果分享地址为:
http://share.weiyun.com/37b92875f407f6d595c6eab92792d41a
则外链地址为:
//www.poboke.com/weiyun.php/37b92875f407f6d595c6eab92792d41a.mp3
音乐外链试听:
http://poboke.duapp.com/weiyun/37b92875f407f6d595c6eab92792d41a.mp3
.
2014/01/04 15:34:50
2014/01/05 16:15:32
微云有验证码了
2013/12/28 23:27:32
还微云 ,微云连个sdk包都没有 就有api,
2013/12/28 15:03:50
[…] 代码来自破博客 […]
2013/12/28 10:09:02
2013/12/26 22:35:56
才怪哥有空再看下 还能连不 哎
2013/12/28 23:07:38
微云也加了验证码了
2013/12/26 21:51:55
微云又不可以用了
2013/12/23 11:07:14
nginx的伪静态怎么写啊
2013/12/28 23:07:07
百度一下吧
2013/12/18 02:43:13
2013/12/11 19:11:15
是哦,微云今天失效了,腾讯搞什么飞机,博主能修复一下不。
2013/12/12 00:07:14
已修复,最近一直要加班
2013/12/13 08:36:38
我用这修改了的怎么不行啊
2013/12/14 09:35:58
可以用了,谢谢!
2013/12/11 10:14:19
微云又失效了
希望博主修复一下!
2013/12/07 16:50:23
腾讯微云网盘外链解析失败了。
求最新代码
2013/12/08 18:45:49
微云已经修复了
2013/12/11 11:41:45
是的,微云从多天开始又无法使用了,请站长修复一下吧
2013/12/05 18:44:24
2013/12/07 02:27:55
2013/12/07 05:54:17
2013/12/08 02:32:09
不行啊? 你们是用的这个吗?
2013/11/22 22:15:00
好顶赞~
2013/11/15 19:08:08
感谢大神提供分享
以前一直用咕咕网盘和百度云外链的,这几天基本连不上,请问楼主,是不是百度他们有动作了?
另外,请问楼主这个微云转换的程序会一直有效吗?
谢谢!
2013/11/16 00:14:15
现在百度应该开始和谐了,腾讯以后可能也会和谐