V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xingzhi
V2EX  ›  问与答

豆瓣FM的歌曲的播放地址探究

  •  
  •   xingzhi · 2012-12-10 20:54:54 +08:00 · 5093 次点击
    这是一个创建于 4384 天前的主题,其中的信息可能已经有所发展或是发生改变。
    豆瓣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让某个算法去生成的。

    那么, 该如何破解随机数的中间四位呢? 大家不妨探讨下:)
    4 条回复    1970-01-01 08:00:00 +08:00
    xingzhi
        1
    xingzhi  
    OP
       2012-12-12 10:45:57 +08:00
    居然等不到一个回复。。。难道没人对这个东西感一点点兴趣么 T T
    andy12530
        2
    andy12530  
       2012-12-12 10:48:39 +08:00
    @xingzhi 破解了,然后呢。豆瓣电台那音质64K,木有啥利用价值吧。
    xingzhi
        3
    xingzhi  
    OP
       2012-12-12 10:54:25 +08:00
    @andy12530 倒不是想说继续利用, 想解决这个问题最大的原因也仅仅是因为好奇心而已。

    如果勉强是要说利用价值的话, 知道每个歌曲的播放页面后,
    不就可以打造属于自己的豆瓣电台歌单了么——虽然这有悖于豆瓣fm的初衷。
    xingzhi
        4
    xingzhi  
    OP
       2013-02-26 17:32:39 +08:00
    旧帖子,贴上我的新发现。 做个备注。

    豆瓣FM pro 推出了新功能,可以下载歌曲。

    下载链接如: http://douban.fm/j/pro/download?id=60932&ssid=d7e6

    而通过查看localStroage, 发现我在帖子上说的 “随机码中间的四位” 恰好和该链接的ssid值是一样的。

    证实了我前文所说的一点, “g” 是必然会出现的。
    而该ssid, 也有可能是类似于数据库中id的性质,有可能是完全随机而不可算的。

    因此,结贴。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3142 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:00 · PVG 13:00 · LAX 21:00 · JFK 00:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.