Greasy Fork

xiami album

给虾米歌单添加歌曲封面(新版本)

// ==UserScript==
// @name         xiami album
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  给虾米歌单添加歌曲封面(新版本)
// @description:en insert album for xiami music(for new version)
// @author       Beats0
// @match        https://www.xiami.com/favorite/*
// @match        https://www.xiami.com/collect/*
// @grant        none
// @require      https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js
// ==/UserScript==

(function () {
  'use strict'
  let href = window.location.href
  let flag = false
  const n = document.cookie.match(/(?:^|;\s*)xm_sg_tk=([^;]*)/); const a = n && n[1]
  if (!a) return

    const showFavoriteAlbum = () => {
    const hasPage = document.querySelector('.rc-pagination-item-active')
    const page = hasPage ? Number(document.querySelector('.rc-pagination-item-active').getAttribute('title')) : 1
    const userId = href.match(/\d+/)[0]
    const params = {
      type: 1,
      pagingVO: {
        page,
        pageSize: 100
      },
      userId
    }

    const r = a.split('_')[0] + '_xmMain_' + '/api/favorite/getFavorites' + '_' + JSON.stringify(params)
    const _s = md5(r)
    const trs = document.querySelectorAll('.table-container table tbody tr')
    if(trs[0].childElementCount !== 5) return
    fetch(`https://www.xiami.com/api/favorite/getFavorites?_q=%7B%22type%22:1,%22pagingVO%22:%7B%22page%22:${page},%22pageSize%22:${params.pagingVO.pageSize}%7D,%22userId%22:%22${userId}%22%7D&_s=${_s}`, {
      method: 'GET'
    }).then(response => response.json())
      .then((data) => {
        if (data.code !== 'SUCCESS') {
          window.alert('请求失败!')
          return
        }
        const { songs } = data.result.data
        songs.forEach((song, index) => {
          const albumEl = document.createElement('td')
          albumEl.innerHTML = `
            <div style="
              display: flex;
              width: 100px;
              height: 100px;
              margin-left: -10px;
          ">
        	<img src="${song.albumLogoS}" style="width: 100%;">
        </div>`
          trs[index].insertBefore(albumEl, trs[index].childNodes[0])
        })
      })
  }
  const showCollectAlbum = () => {
    const hasPage = document.querySelector('.rc-pagination-item-active')
    const page = hasPage ? Number(document.querySelector('.rc-pagination-item-active').getAttribute('title')) : 1
    const listId = Number(href.match(/\d+/)[0])
    const params = {
      listId,
      pagingVO: {
        page,
        pageSize: 30
      }
    }

    const r = a.split('_')[0] + '_xmMain_' + '/api/collect/getCollectSongs' + '_' + JSON.stringify(params)
    const _s = md5(r)
    const trs = document.querySelectorAll('.table-container table tbody tr')
    if(trs[0].childElementCount !== 5) return
    fetch(`https://www.xiami.com/api/collect/getCollectSongs?_q=%7B%22listId%22:${listId},%22pagingVO%22:%7B%22page%22:${page},%22pageSize%22:${params.pagingVO.pageSize}%7D%7D&_s=${_s}`, {
      method: 'GET'
    }).then(response => response.json())
      .then((data) => {
        if (data.code !== 'SUCCESS') {
          window.alert('请求失败!')
          return
        }
        const { songs } = data.result.data
        songs.forEach((song, index) => {
          const albumEl = document.createElement('td')
          albumEl.innerHTML = `
            <div style="
              display: flex;
              width: 100px;
              height: 100px;
              margin-left: -10px;
          ">
        	<img src="${song.albumLogoS}" style="width: 100%;">
        </div>`
          trs[index].insertBefore(albumEl, trs[index].childNodes[0])
        })
      })
  }

  const switchAlbum = () => {
    const collectRe = /ollect/
    const favoriteRe = /favorite/
    if (collectRe.test(href)) {
      showCollectAlbum()
    } else if (favoriteRe.test(href)) {
      showFavoriteAlbum()
    }
  }

  const clickListener = () => {
    const pagers = document.querySelectorAll('.rc-pagination li')
    for (let i = 0; i < pagers.length; i++) {
      pagers[i].addEventListener('click', () => {
        setTimeout(switchAlbum, 2000)
      }, false)
    }
  }

  const injected = () => {
    setTimeout(function () {
      switchAlbum()
      clickListener()
    }, 3000)
  }

  if(!flag) {
    injected()
    flag = true
  }

  document.addEventListener('click', () => {
    const newHref = window.location.href
    if(flag && href !== newHref) {
      injected()
      href = newHref
      console.log(href)
    }
  })
})()