B站音频播放接口详解:哔哩哔哩-API收集整理中的音乐功能开发

在数字媒体时代,音频内容的消费需求日益增长。B站作为国内领先的视频弹幕网站,不仅提供丰富的视频内容,还拥有庞大的音频资源库。对于开发者而言,如何高效地利用B站开放的音频接口,构建出稳定、优质的音乐播放功能,是一个值得深入探讨的话题。本文将详细介绍B站音频播放接口的相关知识,包括歌曲基本信息查询、音频流获取以及用户互动操作等方面,为开发者提供全面的技术指导。

歌曲基本信息查询

要实现音乐播放功能,首先需要获取歌曲的基本信息,如歌曲标题、作者、时长等。B站提供了专门的接口用于查询歌曲基本信息,开发者可以通过发送HTTP GET请求来获取这些数据。

查询歌曲基本信息接口

接口地址为:https://www.bilibili.com/audio/music-service-c/web/song/info,请求方式为GET,认证方式为Cookie(SESSDATA)。该接口的url参数中,sid为音频auid,是必要参数,用于指定要查询的歌曲。

以下是一个使用curl命令查询音频au13598基本信息的示例:

curl -G 'https://www.bilibili.com/audio/music-service-c/web/song/info' \
--data-urlencode 'sid=13598' \
-b 'SESSDATA=xxx'

接口返回的json数据中,根对象包含code、msg和data字段。其中,code为返回值,0表示成功;msg为错误信息,默认为success;data为信息本体,包含了歌曲的详细信息,如id、uid、uname、author、title、cover、intro、lyric、duration等。

例如,查询音频au13598的响应示例中,data字段包含了歌曲“牵丝戏”的相关信息,包括歌手“排骨音乐人”、时长239秒、发布时间戳等。

除了基本信息,还可以通过其他接口查询歌曲的TAG和创作成员列表。查询歌曲TAG的接口为https://www.bilibili.com/audio/music-service-c/web/tag/song,请求方式为GET,url参数sid为必要参数。查询歌曲创作成员列表的接口为https://www.bilibili.com/audio/music-service-c/web/member/song,同样需要sid参数。

相关文档链接

关于歌曲基本信息查询的详细内容,可以参考docs/audio/info.md

音频流URL获取

获取到歌曲基本信息后,接下来需要获取音频流URL,以便进行音频播放。B站提供了不同的接口用于获取音频流URL,适用于web端和可获取付费音频的场景。

音质参数定义

在获取音频流URL之前,需要了解音质qn参数的定义。不同的qn值对应不同的音质,具体如下表所示:

代码 含义
0 流畅 128K
1 标准 192K
2 高品质 320K
3 无损 FLAC (大会员)

web端音频流URL获取接口

web端获取音频流URL的接口为https://www.bilibili.com/audio/music-service-c/web/url,请求方式为GET。需要注意的是,web端无法播放完整付费歌曲,付费歌曲仅能获取30s试听片段,且本接口仅能获取192K音质的音频。

接口的url参数中,sid为音频auid,是必要参数;quality和privilege为不必要参数,可根据实际情况设置。

以下是一个使用curl命令获取音频au777180音频流URL的示例:

curl -G 'https://www.bilibili.com/audio/music-service-c/web/url' \
--data-urlencode 'sid=777180'

接口返回的json数据中,data对象包含了音频流的相关信息,如sid、type、timeout、size、cdns等。其中,cdns数组包含了音频流的url,开发者可以从中选择一个进行播放。

可获取付费音频的接口

对于需要获取付费音频或无损音质音频的场景,可以使用接口https://api.bilibili.com/audio/music-service-c/url,请求方式为GET,认证方式为APP或Cookie(SESSDATA)。付费音乐需要有带大会员或音乐包的账号登录,无损音质则需要登录的用户为会员。

该接口的url参数包括access_key(APP登录Token,APP方式必要)、songid(音频auid,必要)、quality(音质代码,必要)、privilege(必须为2,必要)、mid(当前用户mid,必要)、platform(平台标识,必要)等。

以下是使用Cookie方式获取音频au682118无损音质音频流URL的示例:

curl -G 'https://api.bilibili.com/audio/music-service-c/url' \
--data-urlencode 'songid=682118' \
--data-urlencode 'quality=3' \
--data-urlencode 'privilege=2' \
--data-urlencode 'platform=android' \
--data-urlencode 'mid=293793435' \
-b 'SESSDATA=xxx'

响应示例中,data对象的qualities数组展示了不同音质的信息,包括无损音质需要会员权限等。

音频流获取示例

获取到音频流URL后,可以使用curl命令结合ffplay工具直接播放音频,例如:

curl -G "https://upos-sz-mirrorcos.bilivideo.com/ugaxcode/7bf6a3a3e94421ccc653f005457b1e8c-192k.m4a?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1725013121&gen=playurlv2&os=cosbv&oi=1823807031&trid=1a4703f1e7344bb891691c5857e8cfb9B&mid=0&platform=pc&og=cos&upsig=e3a9fba59b46ab2720c8b1807844e9f3&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&bvc=vod&nettype=0&orderid=0,1&logo=00000000" \
--referer 'https://www.bilibili.com/' -A 'Mozilla/5.0' \
--output - | ffplay -

相关文档链接与图片

关于音频流URL获取的详细内容,可参考docs/audio/musicstream_url.md。同时,下图展示了音频下载相关的图标:

下载图标

用户互动操作

在音乐播放功能中,用户互动操作如收藏和投币也是重要的功能点。B站提供了相应的接口用于实现这些操作。

查询收藏状态

查询音频收藏状态的接口为https://www.bilibili.com/audio/music-service-c/web/collections/songs-coll,请求方式为GET,认证方式为Cookie(SESSDATA),需要Cookie中DedeUserID存在且不为0。url参数sid为必要参数。

以下是查询音频au13598收藏状态的示例:

curl -G 'https://www.bilibili.com/audio/music-service-c/web/collections/songs-coll' \
--data-urlencode 'sid=13598' \
-b 'SESSDATA=xxx;DedeUserID=1;'

接口返回的data字段为bool类型,true表示已收藏,false表示未收藏。

查询投币数与投币操作

查询音频投币数的接口为https://www.bilibili.com/audio/music-service-c/web/coin/audio,请求方式为GET,需要sid参数和认证Cookie。返回的data字段为投币数量,0为未投币,上限为2。

投币音频的接口为https://www.bilibili.com/audio/music-service-c/web/coin/add,请求方式为POST,url参数包括sid、multiply(投币数量,最大为2)和csrf(CSRF Token,位于cookie)。

以下是为音频au13598投币的示例:

curl -G 'https://www.bilibili.com/audio/music-service-c/web/coin/add' \
--data-urlencode 'sid=15664' \
--data-urlencode 'multiply=1' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;DedeUserID=1;'

相关文档链接与图片

关于用户互动操作的详细内容,可参考docs/audio/action.md。下图为收藏相关的图标:

收藏图标

总结与展望

通过本文的介绍,开发者可以了解B站音频播放接口的基本使用方法,包括歌曲基本信息查询、音频流URL获取以及用户互动操作等。在实际开发中,需要根据具体需求选择合适的接口,并注意接口的认证方式和参数要求。

未来,随着B站API的不断更新和完善,可能会有更多功能强大的接口推出,开发者可以持续关注GitHub_Trending/bi/bilibili-API-collect项目,以获取最新的接口信息和开发资源。同时,在开发过程中,要遵守B站的相关规定,合理使用API,共同维护良好的开发生态。

希望本文能够帮助开发者更好地利用B站音频接口,开发出更加优质的音乐功能应用。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐