簡介
MusicLake 是 Github上開源的在線音樂播放器(到目前為止已收獲1.1k????)涂臣,
MusicApi 是抽離Android端在線音樂項(xiàng)目接口的一個(gè)子項(xiàng)目习柠,用來維護(hù)接口陕靠,主項(xiàng)目通過引入不同的musicapi 版本來現(xiàn)實(shí)更新api。
[圖片上傳失敗...(image-6f907b-1564077426400)]
- 簡單封裝網(wǎng)易云、百度音樂谷炸、蝦米音樂、QQ音樂API接口
- 通過DSBridge for Android 解決Android跨域問題禀挫,Android端解析調(diào)用js音樂API的api
- 增加NeteaseMusicApi接口
- 具體的接口實(shí)現(xiàn)請(qǐng)看MusicLake
DSbridge使用
通過BaseApiImpl旬陡,調(diào)用js方法拼接api請(qǐng)求地址,然后AjaxHandler收到請(qǐng)求地址语婴,再通過okhhtp請(qǐng)求描孟,獲取返回?cái)?shù)據(jù),然后在回到j(luò)s組裝返回?cái)?shù)據(jù)砰左。最后返回一個(gè)json字符串匿醒,在BaseApiImpl 回調(diào)方法中g(shù)son解析成具體對(duì)象。
API
- 百度音樂Api接口定義 : BaiduApiService(具體實(shí)現(xiàn)在MusicLake)
- 網(wǎng)易音樂Api接口定義 : NeteaseApiService(具體實(shí)現(xiàn)在MusicLake)
- 在線歌單Api接口定義 : PlaylistApiService(具體實(shí)現(xiàn)在MusicLake)
- 音樂播放Api接口app.native.js : 同PC端Api接口sunzongzheng/musicApi/dist/app.native.js
為了節(jié)省時(shí)間缠导,減少維護(hù)成本廉羔,PC端和Android端使用同一api js,使用 DSbridge 解決Android跨域問題僻造, 實(shí)現(xiàn)Android js交互憋他。具體接口實(shí)現(xiàn)在BaseApiImpl孩饼,app.native.js 包含的接口如下:
/**
* 搜索
*
* @param query 搜索文本
* @param limit 每頁多少歌曲
* @param offset 偏移量
* @param success 結(jié)果返回回調(diào)
* @param fail 失敗返回回調(diào)
*/
fun searchSong(query: String, limit: Int, offset: Int, success: (result: SearchData) -> Unit, fail: ((String?) -> Unit)? = null) {
.....
}
/**
* 獨(dú)立請(qǐng)求
* @param query 搜索文本
* @param type 歌曲類型 [QQ,XIAMI,NETEASE]
* @param limit 每頁多少歌曲
* @param offset 偏移量
* @param success 結(jié)果返回回調(diào)
*/
fun searchSongSingle(query: String, type: String, limit: Int, offset: Int, success: (result: SearchSingleData) -> Unit) {
.....
}
/**
* 獲取歌曲詳情
* @param vendor 歌曲類型 [qq,xiami,netease]
* @param id 歌曲Id
* @param success 結(jié)果返回回調(diào)
* @param fail 失敗返回回調(diào)
*/
fun getSongDetail(vendor: String, id: String, success: (result: SongDetail) -> Unit, fail: (() -> Unit)? = null) {
.....
}
/**
* 批量獲取歌曲詳情
*
* @param vendor 歌曲類型 [qq,xiami,netease]
* @param ids 歌曲Ids [101126,16435051,139808]
* @param success 成功回調(diào)
*/
fun getBatchSongDetail(vendor: String, ids: Array<String>, success: (result: BatchSongDetail) -> Unit) {
.....
}
/**
* 獲取服務(wù)器網(wǎng)易排行榜列表
*/
fun getTopList(id: String, success: (result: NeteaseBean) -> Unit) {
.....
}
/**
* 獲取歌詞信息
*
* @param vendor 歌曲類型 [qq,xiami,netease]
* @param success 成功回調(diào)
*/
fun getLyricInfo(vendor: String, id: String, success: (result: LyricData) -> Unit) {
.....
}
/**
* 獲取評(píng)論信息
*
* @param vendor 歌曲類型 [qq,xiami,netease]
* @param id 歌曲Id
* @param success 成功回調(diào)
*/
fun getComment(vendor: String, id: String, success: (result: Any) -> Unit, fail: ((String) -> Unit)? = null) {
.....
}
/**
* 獲取播放地址
* @param vendor 歌曲類型 [qq,xiami,netease]
* @param id 歌曲Id
* @param br 音質(zhì) 默認(rèn)12800
* @param success 成功回調(diào)
* @param fail 失敗回調(diào)
*/
fun getSongUrl(vendor: String, id: String, br: Int = 128000, success: (result: SongBean) -> Unit, fail: (() -> Unit)? = null) {
.....
}
/**
* 獲取歌手單曲列表
* @param vendor 歌曲類型 [qq,xiami,netease]
* @param id 歌手ID
* @param offset 偏移量
* @param limit 每頁限制
* @param success 成功回調(diào)
* @param fail 失敗回調(diào)
*/
fun getArtistSongs(vendor: String, id: String, offset: Int, limit: Int, success: (result: ArtistSongsData) -> Unit, fail: ((String) -> Unit)? = null) {
.....
}
/**
* 獲取專輯歌曲列表
* @param vendor 歌曲類型 [qq,xiami,netease]
* @param id 專輯ID
* @param success 成功回調(diào)
* @param fail 失敗回調(diào)
*/
fun getAlbumSongs(vendor: String, id: String, success: (result: ArtistSongsData) -> Unit, fail: ((String) -> Unit)? = null) {
.....
}
/**
* 獲取專輯詳情
* @param vendor 歌曲類型 [qq,xiami,netease]
* @param id 專輯ID
* @param success 成功回調(diào)
* @param fail 失敗回調(diào)
*/
fun getAlbumDetail(vendor: String, id: String, success: (result: AlbumData) -> Unit, fail: ((String) -> Unit)? = null) {
.....
}
/**
* 獲取歌手列表詳情(qq歌手列表)
* @param offset 偏移量
* @param params 例:val params = mapOf("area" to area, "sex" to sex, "genre" to genre, "index" to index)
* @param success 成功回調(diào)
* @param fail 失敗回調(diào)
*/
fun getArtists(offset: Int, params: Any, success: (result: ArtistsData) -> Unit, fail: ((String) -> Unit)? = null) {
.....
}
/**
* 獲取任意平臺(tái)歌手詳情
* id,專輯ID
* @param ids 歌手ID列表 map(id,vendor) 歌手id 和 歌曲類型 [qq,xiami,netease]
* @param success 成功回調(diào)
* @param fail 失敗回調(diào)
*/
fun getAnyVendorSongDetail(ids: MutableList<Map<String, String?>>, success: (result: MutableList<MusicInfo>) -> Unit, fail: ((String) -> Unit)? = null) {
.....
}
Usage
Step 1. Add the JitPack repository to your build file
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.caiyonglong:musicapi:1.0.3'
}
Tips
- assets/dist/app.native.js文件更新竹挡,同步sunzongzheng/musicApi/dist/app.native.js