文档章节

豆瓣音乐API分析

itfanr
 itfanr
发布于 2014/01/22 20:07
字数 992
阅读 8867
收藏 26

http://douban.fm/j/mine/playlist 是用cookie来识别登录用户的,而http://www.douban.com/j/app/radio 则是在一次登录之后用token来识别,属于OAuth。建议使用这个接口,会好用一些。

 {"channels":[{"name_en":"Personal Radio","seq_id":0,"abbr_en":"My","name":"私人兆赫","channel_id":0},...}

频道(Channels) 

使用  GET方法对http://www.douban.com/j/app/radio/channels发起请求,将返回一个JSON,结构如下

{
    "channels": [
        {
            "name": "私人兆赫",
            "seq_id": 0,
            "abbr_en": "My",
            "channel_id": 0,
            "name_en": "Personal Radio"
        },
        ...
    ]
}

歌曲列表及其它功能 

使用  GET方法对http://www.douban.com/j/app/radio/people发起请求,其中可包含以下参数,采用URL Encode方法发送。   

  • 参数名    是否必选    参数类型    值

  • app_name    必选    string    radio_desktop_win

  • version    必选    int    100

  • user_id    非必选    string    user_id

  • expire    非必选    int    expire

  • token    非必选    string    token

  • sid    非必选    int    song id

  • h    非必选    string    最近播放列表

  • channel    非必选    int    频道id

  • type    必选    string    报告类型

  • app_name 是固定值radio_desktop_win

  • version 是固定值100

  • user_id 非必选,若有则必须与expire和token搭配使用

  • expire token过期时间msec

  • token 登录令牌

  • sid 歌曲的id

  • h 最近播放的音乐,格式为|song.sid:报告类型,如|1386894:s|444482:p|460268:s|48180:s|1027376:s|188257:s

  • channel 频道id

其中type 报告类型是一个字符,包括以下类型

  • 类型    需要参数    含义    报告长度

  • b    sid    bye,不再播放    短报告

  • e    sid    end,当前歌曲播放完毕,但是歌曲队列中还有歌曲    短报告

  • n        new,没有歌曲播放,歌曲队列也没有任何歌曲,需要返回新播放列表    长报告

  • p        playing,歌曲正在播放,队列中还有歌曲,需要返回新的播放列表

  • s    sid    skip,歌曲正在播放,队列中还有歌曲,适用于用户点击下一首    短报告

  • r    sid    rate,歌曲正在播放,标记喜欢当前歌曲    短报告

  • s    sid    skip,歌曲正在播放,队列中还有歌曲,适用于用户点击下一首    短报告

  • u    sid    unrate,歌曲正在播放,标记取消喜欢当前歌曲    短报告

其中,p报告可以附上h参数,表示最近播完的歌的信息。


获取新播放列表的返回信息:

{
    "r": 0,
    "version_max": 100,
    "song": [
        {
            "album": "/subject/2266925/",
            "picture": "http://img3.douban.com/mpic/s2891182.jpg",
            "ssid": "3853",
            "artist": "李宗盛 / 梁静茹",
            "url": "http://mr3.douban.com/201301221627/ca5607811b5ad84a5b66990f19135dbd/view/song/small/p425687.mp3",
            "company": "滚石",
            "title": "问",
            "rating_avg": 4.76596,
            "length": 207,
            "subtype": "",
            "public_time": "2007",
            "sid": "425687",
            "aid": "2266925",
            "kbps": "64",
            "albumtitle": "理性与感性作品音乐会",
            "like": 0
        },
        ...
    ]
}

解释:

  • r 错误判断,若为0则表示请求正确,若为1则表示出错,JSON中的err字段表示错误信息

  • version_max 固定值100

  • song 歌曲列表

  • album 专辑跳转地址

  • picture 专辑图片地址

  • ssid 未知

  • artist 艺术家

  • url 歌曲的URL

  • company 唱片公司

  • title 歌曲名

  • rating_avg 平均分数

  • length 长度

  • subtype 子类型(有些广告的字类型会是T)

  • public_time 出版年份

  • sid 歌曲id

  • aid 专辑id

  • kbps 码率

  • albumtitle 专辑名

  • like 是否已喜欢,0为false,1为true

用户登录 

使用 POST方法向http://www.douban.com/j/app/login发送数据,参数为

  •  参数名    是否必选    参数类型    值

  • app_name    必选    string    radio_dsktop_win

  • version    必选    int    100

  • email    必选    string    用户登录的邮箱名

  • password    必选    string    用户密码

返回的数据是JSON格式

{
    "user_id": "48071607",
    "err": "ok",
    "token": "50b196a088",
    "expire": "1374395894",
    "r": 0,
    "user_name": "钟小腾",
    "email": "[隐藏隐藏]"
}

 

若登录出错,r会为1,err会包含错误信息。

若模仿浏览器登录,还需要验证码。请求http://douban.fm/j/new_captcha,返回id然后将此id添加到http://douban.fm/misc/captcha?size=m&id=后面,再次请求。接下来登录,登录表单的目标地址为http://douban.fm/j/login,参数有:

  • source: radio

  • alias: 用户名

  • form_password: 密码

  • captcha_solution: 验证码

  • captcha_id: 验证码ID

  • task: sync_channel_list

参考:

  • [1]:http://zonyitoo.github.io/blog/2013/01/22/doubanfmbo-fang-qi-kai-fa-shou-ji/

  • [2]:https://github.com/turingou/douban.fm

  • [3]:http://www.cnblogs.com/7c00/archive/2013/01/15/2860505.html

本文转载自:http://zonyitoo.me/blog/2013/01/22/doubanfmbo-fang-qi-kai-fa-shou-ji/

itfanr
粉丝 116
博文 467
码字总数 165540
作品 1
济南
程序员
私信 提问
加载中

评论(12)

Wendall_
Wendall_

引用来自“sqaiyan”的评论

获取到的音乐怎么播放,为啥audio播放就403
哎,我也是啊,兄台,你后来怎么处理的?
s
sqaiyan
获取到的音乐怎么播放,为啥audio播放就403
月魂草

引用来自“itfanr”的评论

引用来自“月魂草”的评论

引用来自“月魂草”的评论

为什么服务器突然不好用了,时间大概在2015年2月15日 16点40分左右,话说正在弄毕设呢,求给力啊

引用来自“itfanr”的评论

不知道了 https://github.com/turingou/douban.fm/blob/master/libs/sdk.js 你试试这个
今早好用了,话说维护人员可能昨天回家准备年货了吧

13
又不好用了= =。
itfanr
itfanr

引用来自“月魂草”的评论

引用来自“月魂草”的评论

为什么服务器突然不好用了,时间大概在2015年2月15日 16点40分左右,话说正在弄毕设呢,求给力啊

引用来自“itfanr”的评论

不知道了 https://github.com/turingou/douban.fm/blob/master/libs/sdk.js 你试试这个
今早好用了,话说维护人员可能昨天回家准备年货了吧

13
月魂草

引用来自“月魂草”的评论

为什么服务器突然不好用了,时间大概在2015年2月15日 16点40分左右,话说正在弄毕设呢,求给力啊

引用来自“itfanr”的评论

不知道了 https://github.com/turingou/douban.fm/blob/master/libs/sdk.js 你试试这个
今早好用了,话说维护人员可能昨天回家准备年货了吧
itfanr
itfanr

引用来自“月魂草”的评论

为什么服务器突然不好用了,时间大概在2015年2月15日 16点40分左右,话说正在弄毕设呢,求给力啊
不知道了 https://github.com/turingou/douban.fm/blob/master/libs/sdk.js 你试试这个
月魂草
为什么服务器突然不好用了,时间大概在2015年2月15日 16点40分左右,话说正在弄毕设呢,求给力啊
S
ShenWrt

引用来自“kym僵尸”的评论

可不可以给一个完整的接口示例,为什么我使用http://www.douban.com/j/app/radio/people?app_name=radio_desktop_win&version=100&type=n返回的结果是{"r":1,"logout":1,"err":"one channel param is required"}
我三个必要参数都加了啊
后面加多个&channel=xx就可以了
itfanr
itfanr

引用来自“kym僵尸”的评论

可不可以给一个完整的接口示例,为什么我使用http://www.douban.com/j/app/radio/people?app_name=radio_desktop_win&version=100&type=n返回的结果是{"r":1,"logout":1,"err":"one channel param is required"}
我三个必要参数都加了啊

https://github.com/turingou/douban.fm 你看他这个吧 我是打酱油的
kymjs张涛
kymjs张涛
可不可以给一个完整的接口示例,为什么我使用http://www.douban.com/j/app/radio/people?app_name=radio_desktop_win&version=100&type=n返回的结果是{"r":1,"logout":1,"err":"one channel param is required"}
我三个必要参数都加了啊
Jingbin_/CloudReader

CloudReader Netease cloud music Ui && Retrofit + RxJava + MVVM-databinding && Gank.Io、Douban Api Introduce 一款基于网易云音乐UI,使用GankIo及豆瓣api开发的符合Google Material D......

Jingbin_
2017/11/03
0
0
aiheiye/CloudReader

CloudReader Netease cloud music Ui && Retrofit + RxJava + MVVM-databinding && GankIo、Douban Api Introduce 一款基于网易云音乐UI,使用GankIo及豆瓣api开发的符合Google Material Des......

aiheiye
2017/01/06
0
0
jsonpGet,跨域如此简单

我们经常在项目中遇到跨域问题,比如有时候在做个人项目的时候,我们需要请求第三方的一些数据,比如请求豆瓣公开api的数据,或则qq音乐开放api 的数据等等。但是毫无疑问,在我们的web应用中...

🍼holyZhengs
2018/08/16
0
0
绝对干货-国内值得关注的官方API集合,很全很强大(必须收藏)

相关阅读: 吊炸天!74款APP完整源码! 123个微信小程序源码分享(附下载) [干货]2017已来,最全面试总结——这些Android面试题你一定需要 第一 笔记 为知笔记(http://www.wiz.cn/manual...

xhmj12
2017/01/20
0
0
Python实用教学:如何用Python玩转各大网站

Hi~,各位小伙伴,Python是目前编程语言中的主流语言之一,也是公认最容易入门的编程语言,因为Python语言近几年的火爆,有很多小伙伴都开始学习这门语言。 编程语言学习,最重要的是“多看代...

W3Cschool小编
2018/07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
31分钟前
2
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
8
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
4
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部