UNPKG

4lyrics

Version:

Get lyrics from 4 sites, lyrics.com, musixmatch.com, azlyrics.com and lyricslive.com

63 lines (55 loc) 6 kB
const fetch = require('node-fetch'); const cheerio = require('cheerio'); const useragents = [ 'Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0','Mozilla/5.0 (X11; U; Linux Core i7-4980HQ; de; rv:32.0; compatible; JobboerseBot; http://www.jobboerse.com/bot.htm) Gecko/20100101 Firefox/38.0','Mozilla/5.0 (Windows NT 5.1; rv:36.0) Gecko/20100101 Firefox/36.0','Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0','Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0','Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0','Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0','Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0','Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0','Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0','Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/20.6.14','Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0','Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0','Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0','Mozilla/5.0 (X11; U; Linux Core i7-4980HQ; de; rv:32.0; compatible; JobboerseBot; https://www.jobboerse.com/bot.htm) Gecko/20100101 Firefox/38.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0', ] const getURL = query => { return new Promise((resolve, reject) => { fetch(`https://www.musixmatch.com/search/${encodeURI(query)}/tracks`, { headers: { 'User-Agent': useragents[Math.floor(Math.random() * useragents.length)] }} ).then(r => r.text()) .then(body => { const $ = cheerio.load(body); const bestMatchURL = $('li[class="showArtist showCoverart"] a').attr('href') ? $('li[class="showArtist showCoverart"] a').attr('href').valueOf() : reject(new Error('No song found!')); return bestMatchURL ? resolve(`https://musixmatch.com${bestMatchURL}`) : bestMatchURL; }); }); } const getLyrics = url => { return new Promise((resolve, reject) => { fetch(url, { headers: { 'User-Agent': useragents[Math.floor(Math.random() * useragents.length)] }} ).then(r => r.text()) .then(body => { const $ = cheerio.load(body); //$('div[class=" col-sm-10 col-md-8 col-ml-6 col-lg-6"] div').first().remove(); $('div[class="lyrics-to hidden-xs hidden-sm"]').remove(); $('div[class="mxm-lyrics"] div[class=""]').remove(); $('div[class="translation-list-box"]').remove(); $('div[class="mxm-lyrics"] div div[class="row"] div').first().remove(); $('div[class="lyrics-to hidden-xs hidden-sm"]').remove(); $('div[class="review-changes review-changes__warning"]').remove(); $('div[class="review-changes review-changes__error"]').remove(); $('div[class="review-changes-box"]').remove(); if($('h2[class="mxm-empty__title"]').text() === 'Restricted Lyrics') { return reject(new Error('Lyrics are restricted (nothing can be done).')); } const potential = $('div[class="mxm-lyrics"] span p').text().trim(); const potential2 = $('div[class="mxm-track-lyrics-container"] div[class="mxm-lyrics"] span').first().text(); console.log(potential.length, potential2.length) if(potential && potential.length >= potential2.length && potential.length > 0) { return resolve(potential); } else if(potential2 && potential2.length > potential.length && potential2.length > 0) { return resolve(potential2); } else { return reject(new Error('I couldn\'t fetch the lyrics! Open a support ticket on the repo.')); } }) }); } module.exports = { getURL, getLyrics };