为什么80%的码农都做不了架构师?>>>
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},...}
频道(Channels)
使用 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