源代码下载地址: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",不除非还有其它可能性。

作者: 博比123 发表于 2011-05-21 00:42 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架