打开豆瓣FM,就会有歌曲播放,如下:
看了下浏览器加载的内容,发现浏览器通过访问:http://douban.fm/j/mine/playlist?type=n&sid=&pt=0.0&channel=0&from=mainsite&r=c7bc353d05,然后获得一些音乐的数据,如下图:
为了获得歌曲信息发出的具体请求信息如下:
里面有type、sid、pt、channel、from、r字段,但是这些字段的值是怎么得到的啊,现在只知道channel是频道的代码,0是私人频道,-3是红心频道等。其他字段的值不知道是怎么得到的,如果是随机生成的,那么随机函数在哪里呢?
已经看了https://code.google.com/p/drhac/wiki/Protocol 关于这些字段的表述,但是还是没有解决上面的疑问。
其實這個可以用對比方法來取得他的意義。 我看了一下。 r就是為了防止ajax快取的一個類似時間戳記的作用 channel就是頻道,其實有實際意義就是這個參數 然後你給的文檔也寫的非常詳細了啊。 你主要是想知道頻道的id是如何取得。他是透過網頁傳參進去。
在douban.fm首頁裡面,原始碼不是有寫著他的頻道和對應的id嗎? 因為他頻道是可以個人創建,你只需要把官方的頻道手動複製下來就行了,好像就幾十個。 你也可以透過搜尋來獲取。 。
http://douban.fm/j/explore/search?query=關鍵字&start=0&limit=20
參考 github 上命令列電台:
Python版
node.js 版
http://douban.fm/j/mine/playlist?type=n&sid=966135&pt=206.8&channel=61&pb=64&from=mainsite&r=1d56c92354
上面的連結是一個基本的豆瓣歌曲清單請求。每次對歌曲進行操作(加/取消紅心,下一個,加入垃圾桶等)都會重新向豆瓣發送新的歌曲請求。
type是對該歌曲的操作,取值有:n/r/u/b/e。
n:一開始進入豆瓣type取值為n
s:下一曲
r:對該歌曲加紅心
u:取消該歌曲的紅心
b:將該歌曲放入垃圾桶
e:對該歌曲沒有任何操作
(若對歌曲無操作,不會更新歌曲列表,但是也會發送一個請求給豆瓣,類似於這種:http://douban.fm/j/mine/playlist?type=e&sid=2063541&channel=61&pt=286.9 &pb=64&from=mainsite&r=aa555bfa8e,不過不會更新歌曲列表,該請求返回{"r":0})
sid是目前播放歌曲的id
sid可以在連結回傳的json資料裡面得到
channel是頻道
頻道取得連結:http://douban.fm/j/app/radio/channels
from欄位的值固定為mainsite
其他欄位還不清楚具體意義,不知道對取得歌曲清單有什麼具體的影響。
隨機
http://douban.fm/j/mine/playlist?type=n&sid=966135&pt=206.8&channel=61&pb=64&from=mainsite&r=1d56c92354
加紅心
http://douban.fm/j/mine/playlist?type=r&sid=2065721&pt=25.9&channel=61&pb=64&from=mainsite&r=fd0c942a01
取消紅心
http://douban.fm/j/mine/playlist?type=u&sid=2065721&pt=36.3&channel=61&pb=64&from=mainsite&r=1b51b45b21
加入垃圾桶
http://douban.fm/j/mine/playlist?type=b&sid=2065721&pt=111.9&channel=61&pb=64&from=mainsite&r=4b4f7703f5
下一曲
http://douban.fm/j/mine/playlist?type=s&sid=2017382&pt=119.5&channel=61&pb=64&from=mainsite&r=38834642d5
無操作順序播放
http://douban.fm/j/mine/playlist?type=e&sid=2005025&channel=61&pt=224.8&pb=64&from=mainsite&r=75ceee4fa9