song.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { toHttps } from './util'
  2. function filterSinger(singers) {
  3. let arr = []
  4. singers.forEach(item => {
  5. arr.push(item.name)
  6. })
  7. return arr.join('/')
  8. }
  9. export class Song {
  10. constructor({ id, name, singer, album, image, duration, url }) {
  11. this.id = id
  12. this.name = name
  13. this.singer = singer
  14. this.album = album
  15. this.image = image
  16. this.duration = duration
  17. this.url = url
  18. }
  19. }
  20. export function createPlayList(music) {
  21. return new Song({
  22. id: music.id,
  23. name: music.name,
  24. singer: music.artists.length > 0 && filterSinger(music.artists),
  25. album: music.album.name,
  26. image: toHttps(music.album.picUrl) || null,
  27. duration: music.duration / 1000,
  28. url: `https://music.163.com/song/media/outer/url?id=${music.id}.mp3`
  29. })
  30. }
  31. export function createTopList(music) {
  32. return new Song({
  33. id: music.id,
  34. name: music.name,
  35. singer: music.ar.length > 0 && filterSinger(music.ar),
  36. album: music.al.name,
  37. image: toHttps(music.al.picUrl),
  38. duration: music.dt / 1000,
  39. url: `https://music.163.com/song/media/outer/url?id=${music.id}.mp3`
  40. })
  41. }
  42. // 歌曲数据格式化
  43. const formatSongs = function formatPlayList(list) {
  44. let Songs = []
  45. list.forEach(item => {
  46. const musicData = item
  47. if (musicData.id) {
  48. Songs.push(createPlayList(musicData))
  49. }
  50. })
  51. return Songs
  52. }
  53. export const formatTopSongs = function formatTopList(list) {
  54. let Songs = []
  55. list.forEach(item => {
  56. const musicData = item
  57. if (musicData.id) {
  58. Songs.push(createTopList(musicData))
  59. }
  60. })
  61. return Songs
  62. }
  63. export default formatSongs