musicApi

Introduction: 聚合音乐 api,支持 node/android/ios 调用
More: Author   ReportBugs   
Tags:

注意事项

  • 项目仍在开发阶段,即使是小版本之间也会出现不兼容,如用在生产环境,请写死版本号使用

安装

yarn add @suen/music-api

引入

  • node
      import musicApi from '@suen/music-api'
    
  • android、ios
    • 引入js
    • 通过 Fly 注册并调用,详见Fly 文档
    • 已在 window 下注册,webview 内可直接使用 window.musicApi
  • react native
    • 安装依赖
      // 请使用 yarn 经测试 使用 npm 可能会在装依赖时卡死
      yarn add react-native-crypto react-native-randombytes
      react-native link react-native-randombytes
      yarn add -D rn-nodeify@latest
      ./node_modules/.bin/rn-nodeify --hack --install --yarn // 执行到这一步时 请确定已安装 @suen/music-api
      
    • 通过以下代码引入
      import './shim.js' // shim.js 会生成在根目录下
      import musicApi from '@suen/music-api/dist/app.react-native'
      
  • electron-render

      // 主进程 引入 nodeAdapter,避免被打包进渲染进程 如无这个需求 可直接在渲染进程中引入
      import nodeAdapter from 'flyio/src/adapter/node'
      global.nodeAdapter = nodeAdapter
    
      // 渲染进程
      import musicApiContructor from '@suen/music-api/dist/app.electron'
      const musicApi = musicApiContructor(require('electron').remote.getGlobal('nodeAdapter'))
    
  • api server

      // express
      import app from '@suen/music-api/src/express-app'
      app.listen(8080)
    
      // lean cloud
      import app from '@suen/music-api/src/lean-cloud-server'
      app.listen(process.env.LEANCLOUD_APP_PORT)
    

使用

  • 函数调用
    musicApi.searchSong('周杰伦')
      .then(data => {
          console.log(data)
      })
    musicApi.qq.searchSong({
      keyword: '周杰伦'
    })
      .then(data => {
          console.log(data)
      })
    
  • api server 调用

Api

  • Common

    • 歌曲搜索
        function searchSong( keyword:关键字, offset:偏移页数 ) {
            return {
                status:Boolean, // 请求是否成功
                data:{
                    netease: Object,
                    qq: Object
                }
            }
        }
      
    • 歌曲 url
        function getSongUrl( vendor:歌曲来源, id:歌曲 id ) {
            return {
                status: Boolean, // 请求是否成功
                data: {
                    url:'歌曲地址'
                }
            }
        }
      
    • 歌曲歌词
        function getLyric( vendor:歌曲来源, id:歌曲 id ) {
            return {
                status: Boolean, // 请求是否成功
                data: Array, // 歌词数组
            }
        }
      
    • 歌曲评论

      由于网易云、QQ 音乐的评论逻辑不一样hotCommentscomments没有进行强封装

        function getComment( vendor:歌曲来源, id:歌曲 id, page:页数, limit:页大小 ) {
            return {
                status: Boolean, // 请求是否成功
                data: {
                    hotComments: Array, // 热评
                    comments: Array, // 所有评论
                    total: Number, //评论总数
                }
            }
        }
      
    • 歌曲详情

        function getSongDetail( vendor:歌曲来源, id:歌曲 id ) {
            return {
                status: Boolean, // 请求是否成功
                data: {
                    album: {
                        id: Number | String,
                        name: String,
                        cover: String
                    },
                    artists: Array,
                    name: String,
                    id: Number,
                    cp: Boolean
                }
            }
        }
      
    • 批量获取歌曲详情

      注意事项:

      • QQ 音乐一次只能获取 50 条数据,不会去重
      • 网易云音乐未发现单次数量限制,会去重
      • 去重的意思是 重复的歌曲 id,只会返回一次歌曲信息
        function getBatchSongDetail( vendor:歌曲来源, ids:歌曲 id 数组 ) {
          return {
              status: Boolean, // 请求是否成功
              data: [{
                  album: {
                      id: Number | String,
                      name: String,
                      cover: String
                  },
                  artists: Array,
                  name: String,
                  id: Number,
                  cp: Boolean
              }]
          }
        }
        
    • 歌手单曲

      注意事项:

      • 网易云没有分页,传页参数无效
      • 默认第一页,50 条数据

        function getArtistSongs( vendor:歌曲来源, id:歌手 id, offset:偏移页数, limit:页大小 ) {
          return {
              status: Boolean, // 请求是否成功
              data: {
                  detail: {
                      id: Number | String,
                      name: String,
                      avatar: String,
                      desc: String
                  },
                  songs: [{
                     album: {
                         id: Number | String,
                         name: String,
                         cover: String
                     },
                     artists: Array,
                     name: String,
                     id: Number,
                     cp: Boolean
                 }]
              }
          }
        }
        
    • 歌单信息

      注意事项:

      • QQ 音乐没有分页,传页参数无效;网易云可传 limit
      • 默认第一页,65535 条数据

        function getPlaylistDetail( vendor:歌曲来源, id:歌手 id, offset:偏移页数, limit:页大小 ) {
          return {
              status: Boolean, // 请求是否成功
              data: {
                  detail: {
                      id: Number | String,
                      name: String,
                      cover: String,
                      desc: String
                  },
                  songs: [{
                     album: {
                         id: Number | String,
                         name: String,
                         cover: String
                     },
                     artists: Array,
                     name: String,
                     id: Number,
                     cp: Boolean
                 }]
              }
          }
        }
        
    • 专辑信息

        function getAlbumDetail( vendor:歌曲来源, id:专辑 id ) {
            return {
                status: Boolean, // 请求是否成功
                data: {
                    name: String,
                    cover: String,
                    artist: {
                        id: Number,
                        name: String,
                    },
                    desc: String,
                    publishTime: Number,
                    songs: [{
                       album: {
                           id: Number | String,
                           name: String,
                           cover: String
                       },
                       artists: Array,
                       name: String,
                       id: Number,
                       cp: Boolean
                   }]
                }
            }
        }
      
  • Difference

    • 网易云

      • 获取排行榜

        注意事项:排行榜 id 可传 0-23

          function getTopList( id:排行榜 id ) {
              return {
                  status: Boolean, // 请求是否成功
                  data: {
                      name: '名称',
                      description: '简介',
                      cover: '封面',
                      playCount: '播放次数',
                      list: [{
                         album: {
                             id: Number | String,
                             name: String,
                             cover: String
                         },
                         artists: Array,
                         name: String,
                         id: Number,
                         cp: Boolean
                     }]
                  }
              }
          }
        
    • QQ 音乐

      • 获取歌手列表

        注意事项:一页限制 80 条

          function getArtists( offset : '偏移页数', { area = -100, sex = -100, genre = -100, index = -100 } ) {
              return {
                  status: Boolean, // 请求是否成功
                  data: {
                      area: '地区分类',
                      genre: '音乐分类',
                      index: '热门 + 首字母',
                      sex: '性别',
                      singerlist: [{
                         country: '地区分类',
                         singer_id: '歌手 id',
                         singer_mid: '歌手 mid',
                         singer_name: '歌手名',
                         singer_pic: '照片'
                      }],
                      tags: [{
                         area: [],
                         genre: [],
                         index: [],
                         sex: [],
                      }],
                      total: '总数量'
                  }
              }
          }
        
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools