Glan

(转自好友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: 值为用户持续无操作时间, 

分类:

技术点:

相关文章: