豆瓣电台API 2.0 笔记
源代码下载地址:http://lemanz-douban-radio.googlecode.com/files/DoubanFM%20API.zip
最近无聊自己用WPF写了一个豆瓣电台,之前的版本API一直有些问题,昨天晚上无聊把API这部分重写了,解决了以前的一些Bug,记个笔记,怕自己以后忘记了。
把Network文件夹里的东西无视掉基本上可以跨平台。
1、验证身份
验证身份需要向http://www.douban.com/j/app/login这个地址Post数据,返回一个json格式的结果。
Post的数据参数如下:
email=豆瓣帐号
password=密码
app_name="radio_desktop_win"
version="100"
返回的json数据对象User结构:
返回r为false表示登录失败,此时err表示一段说明登录失败的解释,其余成员为null;若登录成功,r返回true,其余成员亦有意义。
2、获取歌曲列表
获取歌曲列表时有两种情况:长报告和短报告。长报告适用于需要添加音乐池队列,短报告适用于向服务器返回本地操作。报告的正确发送与否直接影响服务器对该用户的歌曲匹配程度。
发送报告需要向http://www.douban.com/j/app/radio/people这个地址Get数据,返回json格式的结果。
Get数据参数如下:
app_name="radio_desktop_win"
version="100"
user_id=user_id
expire=expire
token=token
sid=当前音乐的sid属性
h=最近播放的音乐
channel=频道id
type=报告类型
说明:
1、红色标记的三个参数为非必要参数,适用于未登录的情况。user_id、expire、token三个参数分别来自于验证身份里User结构的三个成员。
2、最近播放的音乐一般为20个记录,格式为“|Song.sid:报告类型”,如“|1386894:s|444482:p|460268:s|48180:s|1027376:s|188257:s”。
3、频道id为枚举数字,目前已知的频道与id对应如下:
4、报告类型为一个字符,说明如下:
b: bye(?),不再播放,短报告;
e: end,当前歌曲播放完毕,但是歌曲队列中还有歌曲,短报告;
n: new,没有歌曲播放,歌曲队列也没有任何歌曲,需要返回新播放列表,长报告;
p: playing(?),歌曲正在播放,但是歌曲队列中已经没有歌曲,需要返回新播放列表,长报告;
s: skip,歌曲正在播放,歌曲队列中还有歌曲,适用于用户点击“下一首”,短报告;
r: rate(?),歌曲正在播放,标记喜欢当前歌曲,短报告;
u: unrate(?),歌曲正在播放,标记取消喜欢当前歌曲,短报告;
尤其注意在发出长报告以后更新歌曲列表,发送短报告后亦会返回歌曲列表,但是认为没有意义。
返回的json数据对象中song[]成员结构(注:返回的结构song[]只是一个成员,并非返回的就是song[]):
尤其注意subtype这个成员。默认情况subtype为"",但是最近发现一些广告音频的subtype属性为"T",不除非还有其它可能性。