打开豆瓣FM,就会有歌曲播放,如下:
看了下浏览器加载的内容,发现浏览器通过访问:http://douban.fm/j/mine/playlist?type=n&sid=&pt=0.0&channel=0&from=mainsite&r=c7bc353d05,然后获得一些音乐的数据,如下图:
为了获得歌曲信息发出的具体请求信息如下:
里面有type、sid、pt、channel、from、r字段,但是这些字段的值是怎么得到的啊,现在只知道channel是频道的代码,0是私人频道,-3是红心频道等。其他字段的值不知道是怎么得到的,如果是随机生成的,那么随机函数在哪里呢?
已经看了https://code.google.com/p/drhac/wiki/Protocol 关于这些字段的表述,但是还是没有解决上面的疑问。
其实这个可以用对比方法来获取他的含义。 我看了一下。 r就是为了防止ajax缓存的一个类似时间戳的作用 channel就是频道,其实有实际意义就是这个参数 然后你给的文档也写的非常详细了啊。 你主要是想知道频道的id是如何获取。他是通过网页传参进去。
在douban.fm首页里面,源代码不是有写着他的频道和对应的id吗?因为他频道是可以个人创建,你只需要把官方的频道手动复制下来就行了,好像就几十个。 你也可以通过搜索获取。。
http://douban.fm/j/explore/search?query=关键字&start=0&limit=20
参考 github 上命令行电台:
Python版
node.js 版
http://douban.fm/j/mine/playlist?type=n&sid=966135&pt=206.8&channel=61&pb=64&from=mainsite&r=1d56c92354
上面的链接是一个基本的豆瓣歌曲列表请求。每次对歌曲进行操作(加/取消红心,下一个,加入垃圾桶等)都会重新向豆瓣发送新的歌曲请求。
type是对该歌曲的操作,取值有:n/r/u/b/e。
n:一开始进入豆瓣type取值为n
s:下一曲
r:对该歌曲加红心
u:取消该歌曲的红心
b:将该歌曲放入垃圾桶
e:对该歌曲没有任何操作
(若对歌曲无操作,不会更新歌曲列表,但是还会发送一个请求给豆瓣,类似于这种:http://douban.fm/j/mine/playlist?type=e&sid=2063541&channel=61&pt=286.9&pb=64&from=mainsite&r=aa555bfa8e,不过不会更新歌曲列表,该请求返回{"r":0})
sid是当前播放歌曲的id
sid可以在链接返回的json数据里面得到
channel是频道
频道获取链接:http://douban.fm/j/app/radio/channels
from字段的值固定为mainsite
其他字段还不清楚具体含义,不知道对获取歌曲列表有什么具体的影响。
随机
http://douban.fm/j/mine/playlist?type=n&sid=966135&pt=206.8&channel=61&pb=64&from=mainsite&r=1d56c92354
加红心
http://douban.fm/j/mine/playlist?type=r&sid=2065721&pt=25.9&channel=61&pb=64&from=mainsite&r=fd0c942a01
取消红心
http://douban.fm/j/mine/playlist?type=u&sid=2065721&pt=36.3&channel=61&pb=64&from=mainsite&r=1b51b45b21
加入垃圾桶
http://douban.fm/j/mine/playlist?type=b&sid=2065721&pt=111.9&channel=61&pb=64&from=mainsite&r=4b4f7703f5
下一曲
http://douban.fm/j/mine/playlist?type=s&sid=2017382&pt=119.5&channel=61&pb=64&from=mainsite&r=38834642d5
无操作顺序播放
http://douban.fm/j/mine/playlist?type=e&sid=2005025&channel=61&pt=224.8&pb=64&from=mainsite&r=75ceee4fa9