(转自好友Gobby的blog:http://blog.163.com/gobby_1110/blog/static/292817152011984207585/)
Google 百度在线音乐搜索和豆瓣电台的出现,仿佛预示着未来的收听歌曲方式,只要一个客户端无需下载打开就能听,想听什么就听什么,而随着3G资费的降低和wifi等无线网络的普及,手机等移动终端的在线收听终有一天会成为大众主流。
1。
使用HttpWatch做PC浏览器截包分析工具。
2。
经过反复测试,使用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: 值为用户持续无操作时间,