豆瓣fm一个很好玩的地方就是它的随机性,
但通过“分享”功能,是可以找到一首歌曲的播放地址
于是我想探讨一下如何找出具体歌曲的播放地址。
例如:
许巍-蓝莲花
http://douban.fm/?start=617730g07d8g1000190&cid=1000190
(复制到新窗口打开)
打开后你能看到播放了蓝莲花,channel是: 陈医生的病人。
(在这里是可以伪造channel, 更改cid的值和start最后的数字,就可以指定channel了。这是题外话)
去掉channel,也是可以播放歌曲的
http://douban.fm/?start=617730g07d8g
617730是该歌曲的id, 我发现有两种方法可以查到该id:
1. 查看localStroage, "bubbler_song_info" 的值已经包含了该歌曲的id和播放地址, 但这种方法必须在播放该歌曲时才能使用。

2. 去该专辑页面,查看源码。

所以, 一首歌曲的地址就是:
http://douban.fm/?start=歌曲id+6位数随机码
通过对一些歌曲的分析,我发现随机码还是有一定规律的。
这个6位数随机码,前后必定是小写g.(大家可以测试一下)
因此, 破解一个歌曲地址的难点,就在于随机码中间的四位了。
我觉得,从数据储存的角度来看, 每首歌曲的数据库记录,很低可能会储存一个随机数, 而豆瓣开始做电台时,也应该没考虑播放具体歌曲的功能的(也有可能是后来再统一生成随机数给每首歌曲)。
再从各首歌的随机数前后都是g可以推测,这个随机数有可能是把某些歌曲信息作为input让某个算法去生成的。
那么, 该如何破解随机数的中间四位呢? 大家不妨探讨下:)
但通过“分享”功能,是可以找到一首歌曲的播放地址
于是我想探讨一下如何找出具体歌曲的播放地址。
例如:
许巍-蓝莲花
http://douban.fm/?start=617730g07d8g1000190&cid=1000190
(复制到新窗口打开)
打开后你能看到播放了蓝莲花,channel是: 陈医生的病人。
(在这里是可以伪造channel, 更改cid的值和start最后的数字,就可以指定channel了。这是题外话)
去掉channel,也是可以播放歌曲的
http://douban.fm/?start=617730g07d8g
617730是该歌曲的id, 我发现有两种方法可以查到该id:
1. 查看localStroage, "bubbler_song_info" 的值已经包含了该歌曲的id和播放地址, 但这种方法必须在播放该歌曲时才能使用。

2. 去该专辑页面,查看源码。

所以, 一首歌曲的地址就是:
http://douban.fm/?start=歌曲id+6位数随机码
通过对一些歌曲的分析,我发现随机码还是有一定规律的。
这个6位数随机码,前后必定是小写g.(大家可以测试一下)
因此, 破解一个歌曲地址的难点,就在于随机码中间的四位了。
我觉得,从数据储存的角度来看, 每首歌曲的数据库记录,很低可能会储存一个随机数, 而豆瓣开始做电台时,也应该没考虑播放具体歌曲的功能的(也有可能是后来再统一生成随机数给每首歌曲)。
再从各首歌的随机数前后都是g可以推测,这个随机数有可能是把某些歌曲信息作为input让某个算法去生成的。
那么, 该如何破解随机数的中间四位呢? 大家不妨探讨下:)