UNPKG

create-chuntianxiaozhu

Version:

春天小猪模板工具

147 lines (140 loc) 3.76 kB
import axios from 'axios'; import { load } from 'cheerio'; import { getVarFromScript } from './utils'; import { v4 as uuidv4 } from 'uuid'; const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'; /** * 获取musicens列表 * @param name * @returns */ export async function scrapyMusicListFromMusicenc(name) { const res = await axios.get(`https://www.musicenc.com/?search=${name}`, { headers: { 'User-Agent': userAgent, }, }); const $ = load(res.data); const musicList = []; const uniqueMap = {}; $('.list>li').map(function () { if (musicList.length > 5) { return; } const authorTxt = $(this).children('span').text() || ''; const name = $(this).children('a').text() || ''; const token = $(this).children('a').attr('dates'); const uuid = uuidv4().replaceAll('-', ''); const author = authorTxt.slice(1, authorTxt.length - 2); const uniqueId = name + author; if (uniqueMap[uniqueId]) { return; } uniqueMap[uniqueId] = true; if (author && name) { musicList.push({ id: uuid, author, name: name.toLowerCase(), token, type: 0, }); } }); const musicReqPromises = []; for (let i = 0; i < musicList.length; i++) { const item = musicList[i]; musicReqPromises.push( axios .get(`https://www.musicenc.com/searchr/?token=${item.token}`, { headers: { 'User-Agent': userAgent, }, }) .then((res) => res.data), ); } const contents = await Promise.all(musicReqPromises); for (let i = 0; i < contents.length; i++) { const $ = load(contents[i]); const bidHref = $('.downBu.secm3').attr('href') || ''; const bid = bidHref.slice( bidHref.lastIndexOf('/') + 1, bidHref.lastIndexOf('.'), ); musicList[i].bid = bid; } return musicList; } /** * 获取musicens音乐链接 * @param bid * @returns */ export async function scrapyMusicLinkFromMusicenc(bid) { const res = await axios.get(`https://www.musicenc.com/article/${bid}.html`, { headers: { 'User-Agent': userAgent, }, }); const $ = load(res.data); const picsScript = $('script')[4]; const link = atob(getVarFromScript($(picsScript).text(), 'pics')); return axios.get(link).then((res) => res.data); } const TonzhonSearchLink = { 1: 'https://music-api.tonzhon.com/search/m/', 2: 'https://music-api.tonzhon.com/search/n/', 3: 'https://music-api.tonzhon.com/search/q/', 4: 'https://music-api.tonzhon.com/search/k/', }; /** * 获取铜钟列表 * @param name * @param source * @returns */ export async function scrapyMusicListFromTonzhon(name, source) { const res = await axios.get(`${TonzhonSearchLink[source]}${name}`, { headers: { 'User-Agent': userAgent, }, }); const data = res.data.data || []; const songs = data.songs || []; const result = []; songs.map((item) => { const uuid = uuidv4().replaceAll('-', ''); const articles = item.artists || []; const author = (articles[0] && articles[0].name) || item.alias; // 只有作者和歌曲名同时在才需要 if (author && item.name) { result.push({ id: uuid, author, name: item.name.toLowerCase(), bid: item.newId, type: source, }); } }); return result; } /** * 获取铜钟音乐 * @param bid * @returns */ export async function scrapyMusicLinkFromTonzhon(bid) { const res = await axios.get( `https://music-api.tonzhon.com/song_file/${bid}`, { headers: { 'User-Agent': userAgent, }, }, ); const data = res.data; return data.data; }