1.参数
type: [benpsur], RPC函数指示:
b: bye(?), 播放以删除终止.长报告
e: end, 返回:'"OK"',报告歌曲播放完毕,短报告
n: new, 返回新播放列表,无其余必备参数(uid?).长报告
p: playing(?), 单首歌曲播放开始且播放列表已空时发送,长报告, 疑似是专门为平淡地获取播放列表而设定的.
s: skip, 用户点击”下一首“时即时报告
u: unlike, 将sid的歌曲取消喜欢
r: rated(?), 喜欢一首歌时即时报告
uid: 用户在豆瓣的UID,如果与请求中的cookie所带uid值不同可能会收到回复{"r":1,}
r: random, JavaScript中Math.random()自然产生的随机数
h: history, 格式为'|'分割的sid + ':' + /[psbr]/避免短时间内出现重复
sid: Song ID
aid: Album ID
rest: '|'分割的sid.已获取的播放列表中尚未播放的曲目,避免短时间内出现重复.
status: 播放器状态, 'p'代表正在播放中.
du: 用户持续无操作时间,疑似用于下发广告.
2.channel是频道请求参数.
经过测试,频道对应关系如下:
channel=0 私人兆赫 type=s
channel=1 公共兆赫【地区语言】:华语MHZ
channel=2 公共兆赫【地区语言】:欧美MHZ
channel=3 公共兆赫【年代】:70年代MHZ
channel=4 公共兆赫【年代】:80年代MHZ
channel=5 公共兆赫【年代】:90年代MHZ
channel=6 公共兆赫【地区语言】:粤语MHZ
channel=22 公共兆赫【地区语言】:法语MHZ
channel=17 公共兆赫【地区语言】:日语MHZ
channel=18 公共兆赫【地区语言】:韩语MHZ
channel=8 公共兆赫【流派】:民谣MHZ
channel=7 公共兆赫【流派】:摇滚MHZ
channel=13 公共兆赫【流派】:爵士MHZ
channel=27 公共兆赫【流派】:古典MHZ
channel=14 公共兆赫【流派】:电子MHZ
channel=16 公共兆赫【流派】:R&BMHZ
channel=15 公共兆赫【流派】:说唱MHZ
channel=10 公共兆赫【流派】:电影原声MHZ
channel=26 公共兆赫:豆瓣音乐人MHZ
channel=20 公共兆赫【特辑】:女声MHZ
channel=dj DJ兆赫
channel=28公共兆赫【特辑】:动漫MHZ
channel=32 公共兆赫【特辑】:咖啡MHZ
channel=67 公共兆赫【特辑】:东京事变MHZ
channel=52 公共兆赫【品牌】:乐混翻唱MHZ
channel=58 公共兆赫【品牌】:路虎揽胜运动MHZ
如:channel=6 粤语兆赫 请求格式 http://douban.fm/j/mine/playlist?channel=6
Google 百度在线音乐搜索和豆瓣电台的出现,仿佛预示着未来的收听歌曲方式,只要一个客户端无需下载打开就能听,想听什么就听什么,而随着3G资费的降低和wifi等无线网络的普及,手机等移动终端的在线收听终有一天会成为大众主流。
经过反复测试,使用IssueHTTPGetL(_L8("http://douban.fm/j/mine/playlist?")); 发送请求获得了“公共电台”歌曲列表,?后跟参数不同意义不同3
3。
不同频道请求参数 channel=1 华语兆赫 channel=2 欧美兆赫 channel=3 70兆赫 channel=4 80兆赫 channel=5 90兆赫 channel=6 粤语兆赫 请求格式 http://douban.fm/j/mine/playlist?channel=1
5
申请获得cookie :
使用CHTTPFormEncoder post 获得 bid 和 dbcl2 cookie值,这个dbcl2是个有意思的值,相当于一个sessionid,也就是登陆网站的最重要凭证,接着从302中跳转到http://www.douban.com/,GET请求中设置上一步获得的dbcl2 等cookie值可以获得ck这个cookie值,这样也就拿到了登陆私人电台中最重要的两个cookie值。
在请求播放列表中可以获得rdat这个值,
_utma 等cookie值是Google统计值,具体使用可以Google。
如果设置正确的dbcl2和ck这两个cookie值,请求列表获得EGotResponseHeaders将不再是302而是200。
6
有了 dbcl2 和 ck 这两个cookie,下面就可以向豆瓣发送“喜欢” “删除” 等操作了
比如“喜欢”请求
IssueHTTPGetL(_L8("http://douban.fm/j/mine/playlist?r=0.1237416032899653&type=r&sid=491899&uid=26636761&h=491899:r&du=9&channel=0&rest=983288&aid=1405209&last_channel=0"));
参数以 参数=值 为数组,意义大概如下(可能不完全准确)
参数type: [benpsur], RPC函数指示: 值p: playing(?), 歌曲无操作播放完成标记 值r: rated(?), 喜欢一首歌时即时报告 值u: unlike, 将sid的歌曲取消喜欢 值b: bye(?), 播放以删除终止. 值s: skip, 用户点击"下一首"时即时报告 值e: end, 返回:'"OK"', 报告歌曲播放完毕, 短报告 值n: new, 返回新播放列表 参数uid: 值为用户在豆瓣的UID, 参数r: random, 值小数点后17位自然产生的随机数 参数h: history, 值为格式为'|'分割的 sid + ':' + /[psbr]/ 避免短时间内出现重复 参数sid: 值为Song ID
参数aid:值为 Album ID
参数rest:值为 '|'分割的sid. 已获取的播放列表中尚未播放的曲目, 避免短时间内出现重复.
参数status: 值为播放器状态, 'p'代表正在播放中.
参数du: 值为用户持续无操作时间,