http://douban.fm/j/mine/playlist 是用cookie来识别登录用户的,而http://www.douban.com/j/app/radio 则是在一次登录之后用token来识别,属于OAuth。建议使用这个接口,会好用一些。
{"channels":[{"name_en":"Personal Radio","seq_id":0,"abbr_en":"My","name":"私人兆赫","channel_id":0},...}
使用 GET方法对http://www.douban.com/j/app/radio/channels发起请求,将返回一个JSON,结构如下
{ "channels": [ { "name": "私人兆赫", "seq_id": 0, "abbr_en": "My", "channel_id": 0, "name_en": "Personal Radio" }, ... ] }
使用 GET方法对http://www.douban.com/j/app/radio/people发起请求,其中可包含以下参数,采用URL Encode方法发送。
参数名 是否必选 参数类型 值
app_name 必选 string radio_desktop_win
version 必选 int 100
user_id 非必选 string user_id
expire 非必选 int expire
token 非必选 string token
sid 非必选 int song id
h 非必选 string 最近播放列表
channel 非必选 int 频道id
type 必选 string 报告类型
app_name 是固定值radio_desktop_win
version 是固定值100
user_id 非必选,若有则必须与expire和token搭配使用
expire token过期时间msec
token 登录令牌
sid 歌曲的id
h 最近播放的音乐,格式为|song.sid:报告类型,如|1386894:s|444482:p|460268:s|48180:s|1027376:s|188257:s
channel 频道id
其中type 报告类型是一个字符,包括以下类型
类型 需要参数 含义 报告长度
b sid bye,不再播放 短报告
e sid end,当前歌曲播放完毕,但是歌曲队列中还有歌曲 短报告
n new,没有歌曲播放,歌曲队列也没有任何歌曲,需要返回新播放列表 长报告
p playing,歌曲正在播放,队列中还有歌曲,需要返回新的播放列表
s sid skip,歌曲正在播放,队列中还有歌曲,适用于用户点击下一首 短报告
r sid rate,歌曲正在播放,标记喜欢当前歌曲 短报告
s sid skip,歌曲正在播放,队列中还有歌曲,适用于用户点击下一首 短报告
u sid unrate,歌曲正在播放,标记取消喜欢当前歌曲 短报告
其中,p报告可以附上h参数,表示最近播完的歌的信息。
获取新播放列表的返回信息:
{ "r": 0, "version_max": 100, "song": [ { "album": "/subject/2266925/", "picture": "http://img3.douban.com/mpic/s2891182.jpg", "ssid": "3853", "artist": "李宗盛 / 梁静茹", "url": "http://mr3.douban.com/201301221627/ca5607811b5ad84a5b66990f19135dbd/view/song/small/p425687.mp3", "company": "滚石", "title": "问", "rating_avg": 4.76596, "length": 207, "subtype": "", "public_time": "2007", "sid": "425687", "aid": "2266925", "kbps": "64", "albumtitle": "理性与感性作品音乐会", "like": 0 }, ... ] }
解释:
r 错误判断,若为0则表示请求正确,若为1则表示出错,JSON中的err字段表示错误信息
version_max 固定值100
song 歌曲列表
album 专辑跳转地址
picture 专辑图片地址
ssid 未知
artist 艺术家
url 歌曲的URL
company 唱片公司
title 歌曲名
rating_avg 平均分数
length 长度
subtype 子类型(有些广告的字类型会是T)
public_time 出版年份
sid 歌曲id
aid 专辑id
kbps 码率
albumtitle 专辑名
like 是否已喜欢,0为false,1为true
使用 POST方法向http://www.douban.com/j/app/login发送数据,参数为
参数名 是否必选 参数类型 值
app_name 必选 string radio_dsktop_win
version 必选 int 100
email 必选 string 用户登录的邮箱名
password 必选 string 用户密码
返回的数据是JSON格式
{ "user_id": "48071607", "err": "ok", "token": "50b196a088", "expire": "1374395894", "r": 0, "user_name": "钟小腾", "email": "[隐藏隐藏]" }
若登录出错,r会为1,err会包含错误信息。
若模仿浏览器登录,还需要验证码。请求http://douban.fm/j/new_captcha,返回id然后将此id添加到http://douban.fm/misc/captcha?size=m&id=后面,再次请求。接下来登录,登录表单的目标地址为http://douban.fm/j/login,参数有:
source: radio
alias: 用户名
form_password: 密码
captcha_solution: 验证码
captcha_id: 验证码ID
task: sync_channel_list
参考:
[1]:http://zonyitoo.github.io/blog/2013/01/22/doubanfmbo-fang-qi-kai-fa-shou-ji/
[2]:https://github.com/turingou/douban.fm
[3]:http://www.cnblogs.com/7c00/archive/2013/01/15/2860505.html